Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Aliens Vs Predator |#5| Unexpected meeting
Aliens Vs Predator |#4| Boss fight with the Queen
Aliens Vs Predator |#3| Escaping from the captivity of the xenomorph
Aliens Vs Predator |#2| RO part 2 in HELL

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Питер Абель Весь текст 992.61 Kb

Ассемблер и программирование для IBM PC

Предыдущая страница Следующая страница
1 2 3 4 5 6 7 8  9 10 11 12 13 14 15 ... 85
               - запросить регистр CX командой: R CX [Return]
               - отладчик выдаст на этот запрос CX 0000 (нулевое значение)
               - указать длину программы - 6,
               - записать измененную программу: W [Return]

     В обоих случаях DEBUG выдает сообщение "Writing nnnn bytes."  (Запись
nnnn байтов).  Если nnnn равно 0, то  произошла  ошибка  при  вводе  длины
программы, и необходимо повторить запись cнова.


     ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ
     ________________________________________________________________

     Отладчик DOS DEBUG это  достаточное  мощное  средство,  полезное  для
отладки  ассемблерных  программ.  Однако  следует  быть  осторожным  с  ее
использованием, особенно для команды E (ввод).  Ввод данных в неправильные
адреса  памяти  или  ввод  некорректных   данных    могут    привести    к
непредсказуемым результатам.  На экране  в  этом  случае  могут  появиться
"странные" символы, клавиатура заблокирована или даже DOS прервет DEBUG  и
перезагрузит себя  с  диска.  Какие-либо  серьезные  повреждения  вряд  ли
произойдут,  но возможны некоторые неожиданности,  а также потеря  данных,
которые вводились при работе с отладчиком.
   Если данные, введенные в сегмент данных или  сегмент  кодов,  оказались
некорректными, следует, вновь используя команду E, исправить  их.  Однако,
можно не заметить ошибки  и  начать  трассиpовку  программы.  Но  и  здесь
возможно еще использовать команду E для изменений.  Если необходимо начать
выполнение с первой команды, то следует установить в  регистре  командного
указателя (IP) значение 0100. Введите команду  R  (register)  и  требуемый
регистр в следующем виде:

                              R IP [Return]

     Отладчик выдаст на экран содержимое регистра IP и перейдет в ожидание
ввода. Здесь следует ввести значение 0100 и нажать для проверки результата
команду R (без IP). 0тладчик выдаст содержимое регистров, флагов и  первую
выполняемую команду.  Теперь можно, используя команду T,  вновь  выполнить
трассировку программы.
     Если  ваша  программа  выполняет  какие-либо  подсчеты,  то  возможно
потребуется очистка некоторых областей памяти и регистров.  Но yбедитесь в
сохранении  содержимого  регистров  CS,  DS,  SP  и  SS,  которые    имеют
специфическое назначение.
     Прочитайте в руководстве по DOS главу о программе DEBUG.  В настоящий
момент рекомендуется: вводный материал и следующие команды oтладчика: дамп
(D), ввод (E), шестнадцатиричный (H), имя (N), выход  (Q),  регистры  (R),
трассировка (T) и  запись  (W).  Можно  oзнакомиться  также  и  с  другими
командами и проверить как они работают.



     ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
     ________________________________________________________________

     2.1. Напишите машинные команды для
          а) пересылки шест. значения 4629 в регистр AX;
          б) сложения шест. 036A с содержимым регистра AX.

     2.2. Предположим, что была введена следующая е команда:

               E CS:100 B8 45 01 05 25 00

     Вместо шест.  значения 45 предполагалось 54.  Напишите команду E  для
корректировки   только   одного   неправильно   введенного   байта,   т.е.
непосредственно замените 45 на 54.

     2.3. Предположим, что введена следующая е команда:

               E CS:100 B8 04 30 05 00 30 CB

          а) Что  представляют  собой  эти  команды?  (Сравните  с  первой
     программой в этой главе).
          б) После выполнения этой программы в  регистре  AX  должно  быть
     значение 0460, но в действительности оказалось 6004. В чем  ошибка  и
     как ее исправить?
          в) После исправления команд необходимо снова выполнить программу
     с первой команды. Какие две команды отладчика потребуются?

     2.4. Имеется следующая программа в машинных кодах:

               B0 25 D0 E0 B3 15 F6 E3 CB

     Программа выполняет следующее:

          - пересылает шест. значение 25 в регистр AL;
          -  сдвигает  содержимое  регистра  AL  на  один  бит  влево   (в
     результате в AL будет 4A);
          - пересылает шест. значение 15 в регистр BL;
          - умножает содержимое регистра AL на содержимое регистра BL.

Используйте отладчик для ввода (E) этой программы  по  адресу  CS:100.  Не
забывайте, что все значения представлены в шестнадцатиричном  виде.  После
ввода программы наберите D  CS:100  для  просмотра  сегмента  кода.  Затем
введите команду R и необходимое число команд T для  пошагового  выполнения
программы до команды RET.  Какое значение будет в регистре AX в результате
выполнения программы?

     2.5.  Используйте  отладчик  для  ввода  (E)  следующей  программы  в
машинных кодах:

               Данные:        25 15 00 00
               Машинный код:  A0 00 00 D0 E0 F6 26 01 00 A3 02 00 CB

     Программа выполняет следующее:

          - пересылает содержимое одного байта  по  адресу  DS:00  (25)  в
     регистр AL;
          - сдвигает содержимое регистра AL влево на один бит  (получая  в
     результате 4A);
          - умножает AL на содержимое одного байта по адресу DS:01 (15);
          - пересылает результат из AX в  слово,  начинающееся  по  адресу
     DS:02.

     После ввода программы используйте команды D  для  просмотра  сегмента
данных и сегмента кода. Затем введите команду R и необходимое число команд
T для достижения конца программы (RET).  В этот момент регистр  AX  должен
содержать результат 0612. Еще раз используйте команду D DS:00 и  заметьте,
что по адресу DS:02 значение записано как 1206.

     2.6. Для предыдущего  задания  (2.5)  постройте  команды  для  записи
программы на диск под именем TRIAL.COM.

     2.7. Используя команду A отладчика, введите следующую про грамму:

               MOV  BX,25
               ADD  BX,30
               SHL  BX,01
               SUB  BX,22
               NOP
               RET

сделайте  ассемблирование  и  трассировку  выполнения  этой  программы  до
команды NOP.



ГЛАВА 3                                         Требования языка ассемблер
__________________________________________________________________________

     Ц е л ь:   показать  основные  требования  к  программам   на   языке
ассемблера и этапы ассемблирования, компановки и выполнения программы.


     ВВЕДЕНИЕ
     ________________________________________________________________

     В гл.2 было показано как ввести и  выполнить  программу  на  машинном
языке.  Несомненно  при  этом ощутима трудность расшифровки машинного кода
даже для очень небольшой программы.  Сомнительно,  чтобы кто-либо серьезно
кодировал  программы  на  машинном  языке,  за исключением разных "заплат"
(корректировок)  в  программе  на  языках  высокого  уровня  и  прикладные
программы.  Более высоким уровнем кодирования является уровень ассемблера,
на  котором  программист  пользуется  символическими  мнемокодами   вместо
машинных команд и описательными именами для полей данных и адресов памяти.
     Программа написанная символическими мнемокодами, которые используются
в языке ассемблера, представляет собой исходный модуль.  Для  формирования
исходного модуля применяют программу DOS EDLIN или любой другой подходящий
экранный редактор.  Затем с помощью  программы  ассемблерного  транслятора
исходный текст транслируется  в  машинный  код,  известный  как  объектная
программа.  И наконец, программа DOS LINK определяет все  адресные  ссылки
для объектной программы, генерируя загрузочный модуль.
     В данной  главе  объясняются  требования  для  простой  программы  на
ассемблере и показаны этапы ассемблирования, компановки и выполнения.


     КОММЕНТАРИИ В ПРОГРАММАХ НА АССЕМБЛЕРЕ
     ________________________________________________________________

     Использование комментариев в программе улучшает ее ясность,  oсобенно
там, где назначение набора команд непонятно. Комментаpий всегда начинаются
на любой строке исходного модуля с символа точка с запятой (;) и ассемблер
полагает в этом случае, что все символы, находящиеся справа от ;  являются
комментарием.  Комментарий может содержать любые печатные символы, включая
пробел.
     Комментарий может занимать всю строку или следовать  за  командой  на
той же строке, как это показано в двух следующих примерах:

     1.        ;Эта строка полностью является комментарием
     2.        ADD AX,BX  ;Комментарий на одной строке с командой

     Комментарии появляются только в листингах  ассемблирования  исходного
модуля и не приводят к генерации машинных кодов,  поэтому  можно  включать
любое  количество  комментариев,  не  оказывая  влияния  на  эффективность
выполнения программы.  В  данной  книге  команды  ассемблера  представлены
заглавными  буквами,  а    комментарии    -    строчными    (только    для
удобочитаемости).


     ФОРМАТ КОДИРОВАНИЯ
     ________________________________________________________________

     Основной формат кодирования команд ассемблера имеет следующий вид:

               [метка]   команда   [операнд(ы)]

     Метка (если имеется), команда и операнд (если имеется) pазделяются по
крайней мере одним пробелом или  символом  табуляции.  Максимальная  длина
строки  -  132  символа,  однако,  большинство  предпочитают  работать  со
строками  в  80  символов  (соответственно   ширине    экрана).    Примеры
кодирования:

               Метка     Команда   Операнд
               COUNT     DB        1    ;Имя, команда, один операнд
                         MOV       AX,0 ;Команда, два операнда


                                  Метки
                                 -------
     Метка в языке ассемблера может содержать  следующие символы:

               Буквы:         от A до Z и от a до z
               Цифры:         от 0 до 9
               Спецсимволы:   знак вопроса (?)
                              точка (.) (только первый символ)
                              знак "коммерческое эт" (@)
                              подчеркивание (-)
                              доллар ($)

     Первым символом в метке должна быть буква или  спецсимвол.  Ассемблер
не делает различия между  заглавными  и  строчными  буквами.  Максимальная
длина метки - 31 символ. Примеры меток: COUNT, PAGE25, $E10. Рекомендуется
использовать описательные и смысловые метки.  Имена  регистров,  например,
AX, DI или  AL  являются  зарезервированными  и  используются  только  для
указания соответствующих регистров. Например, в команде

               ADD  AX,BX

ассемблер "знает", что AX и BX относится к регистрам. Однако, в команде

               MOV  REGSAVE,AX

ассемблер воспримет имя REGSAVE  только  в  том  случае,  если  оно  будет
определено в   сегменте   данных.   В   прил.3   приведен   cписок    всех
зарезервированных слов ассемблера.


                                 Команда
                                ---------
     Мнемоническая команда  указывает  ассемблеру  какое  действие  должен
выполнить данный оператор.  В  сегменте  данных  команда  (или  директива)
определяет поле, рабочую oбласть или константу.  В сегменте  кода  команда
определяет действие, например, пересылка (MOV) или сложение (ADD).


                                 Операнд
                                ---------
     Если команда   специфицирует   выполняемое   действие,   то   операнд
определяет  а)  начальное  значение  данных или б) элементы,  над которыми
выполняется  действие  по  команде.  В  следующем  примере  байт   COUNTER
определен в сегменте данных и имеет нулевое значение:

          Метка     Команда   Операнд

          COUNTER   DB   0    ;Определить байт (DB) с нулевым значением

     Команда может иметь один  или  два  операнда,  или  вообще  быть  без
операндов. Рассмотрим следующие три примера:

                              Команда Операнд     Комментарий

               Нет операндов    RET               ;Вернуться
Предыдущая страница Следующая страница
1 2 3 4 5 6 7 8  9 10 11 12 13 14 15 ... 85
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (15)

Реклама