Скачать 101.61 Kb.
|
РАБОТА С ОТЛАДЧИКОМ AFDPRO Данная лабораторная работа предназначена для того, чтобы вы получили наглядные представления об архитектуре процессора на примере микропроцессора 8086, приобрели практические навыки работы с отладчиком программ, познакомились с выполнением команд и различными способами адресации, а также мнемонической записью команд на языке Турбо Ассемблера. Процессор 8088 - это процессор, который используется в компьютерах IBM PC и благодаря которому создано одно из наиболее удачных семейств компьютеров. Однако процессор 8088 представляет собой только один процессор из серии процессоров, известных, как серия iAPx86. Другие процессоры данной серии включают в себя процессоры 8086, используемые в компьютерах IBM модели 25 и 30, процессор 80286, используемый в компьютере IBM AT и IBM PS/2 (модели 50 и 60), процессор 80386, применяемый в компьютерах IBM PS/2 модели 80, процессор 80486. Каждый из этих процессоров так или иначе отличается от процессора 8088. Процессоры серии iAPx86 объединяет одно общее свойство: все они могут выполнять код, написанный для процессоров 8086 и 8088. Процессор 8086 представляет собой основание всей ветви процессоров серии iAPx86. Процессор 8086 - это тот же процессор 8088 с расширенной шиной внешних данных. В то время как процессор 8086 может осуществлять передачу данных в память и из память по 16 битов за операцию, процессор 8088 может передавать данные только по 8 бит. Оба процессора имеют одинаковый набор инструкций. Вообще говоря, язык Ассемблера, используемый для программирования на IBM PC и последующих компьютерах, известен, как язык Ассемблера процессора 8086, а не язык Ассемблера процессора 8088. Поэтому нужно иметь в виду, что язык Ассемблера процессора 8086 включает в себя также Ассемблер процессора 8088. Полноэкранный отладчик AFDPRO Полноэкранный отладчик AFDPRO в первую очередь предназначен для отладки программ, написанных на языке Ассемблера, но его также рекомендуется использовать при изучении системы команд и программировании на языке Ассемблера, так как он предоставляет возможность иметь в интерактивном режиме полный доступ ко всем регистрам процессора и ячейкам памяти. Посредством AFDPRO могут быть загружены для отладки файлы типа EXE или СОМ. Мы в данной лабораторной работе рассмотрим применение AFDPRO только для изучения архитектуры процессора. Для запуска AFDPRO в данной лабораторной работе достаточно просто запустить AFDPRO без указания командной строки. После запуска программы выводится экран с названием программы. Для продолжения работы необходимо нажать какую-нибудь клавишу, после чего появляется основной экран AFDPRO. Основной экран Основной экран разделен на окна. Курсор устанавливается в окне командной строки, помеченной 'CMD >'. Все команды вводятся в этом окне. В дальнейшем мы будем ссылаться на эту часть экрана как на командную строку. Окно над командной строкой показывает содержимое всех регистров процессора и четыре верхних элемента стека. Эту часть экрана в дальнейшем будем называть областью регистров. Имеются два регистра сегмента - HS и FS, которые не реализованы в процессоре аппаратно. Показанные флаги процессора имеют два представления. Первое - в виде 16-разрядного слова и второе, когда каждый из восьми флаговых разрядов (OF, DF, IF, SF, ZF, AF, PF и CF) представлен двоичным значением. Все неиспользуемые разряды слова флагов установлены в ноль для облегчения интерпретации 16-разрядного слова флагов. Флаг трассировки используется AFDPRO, и поэтому он недоступен пользователю. Область ниже командной строки содержит текст отлаживаемой программы в дисассемблированном виде, начиная с ячейки CS:IP. Самое левое поле в каждой строке содержит смещение адреса, следующие шестнадцатеричные значения представляют объектный код каждой инструкции. Дисассемблированный текст выглядит аналогично ассемблерному листингу, за исключением того, что не используются символические имена. Область справа от командной строки - это окно памяти номер 1, а область под дисассемблируемой областью - окно памяти номер 2. Каждое окно в первой колонке содержит адреса, а содержимое памяти выводится в шестнадцатеричном виде. Смещение от начального адреса каждой строки показано в верхней строке каждого окна. В каждой строке окна 1 в шестнадцатеричном виде показаны восемь байтов. Окно 2 разделено на две области, которые используют одни и те же адреса. Левая часть отображает содержимое памяти также, как и окно 1, но по 16 байтов в строке. Правая часть показывает содержимое той же области памяти, что и левая, но в коде КОИ-8. Адреса окон могут отличаться друг от друга. Все символы, выведенные с повышенной яркостью, могут быть изменены пользователем вводом на их место новых значений. Курсор можно свободно передвигать в каждом окне. Для перехода из одного окна в другое нужно использовать клавиши F7-F10. Если в команде вызова AFDPRO указано имя файла, то выполняется загрузка этого файла, и в дисассемблерном окне появляются первые выполняемые инструкции программы. Если имя файла не указано, то значения кодов инструкций случайны также, как и содержимое окон памяти. Обратите внимание на то, что при этом значение в указателе инструкций IP устанавливается равным 100, а содержимое сегментных регистров CS, DS, ES, SS одинаково. Используя отладчик, вы можете закодировать любую команду, посмотреть ее код, выполнить ее, увидеть, как при этом меняется содержимое регистров и ячеек памяти. Для кодирования команд используется команда вызова встроенного ассемблера - A. Формат команды: A [адрес] Пример: A CS:100 Если параметр 'адрес' не указан, то ассемблирование начинается с текущей команды. В противном случае - с указанного адреса. Выбранная ячейка должна находиться в оперативной памяти. После ввода этой команды AFDPRO переходит в режим ассемблирования. Курсор устанавливается на строку дисассемблированного кода, выведенную в обратном фоне, и символы в этой строке выводятся с повышенной яркостью. Вы можете вводить мнемоническое изображение любой инструкции. Все введенные символы преобразуются в символы верхнего регистра. Все изменения в ассемблируемой строке игнорируются, если они не были закончены нажатием клавиши . Команды могут быть изменены или заменены как в поле мнемоники, так и в поле операндов. Введенная команда ассемблируется и, если ошибок не обнаружено, содержимое ячейки памяти изменяется на новое значение. Кроме того, окно дисассемблера перемещается, устанавливая курсор на следующую команду. Заменяемая команда может иметь длину в байтах, отличную от длины новой команды. Это может привести к тому, что следующие инструкции будут интерпретироваться иначе. Введите команду AFDPRO A Затем наберите текст инструкции, например, mov ax,1234 Посмотрите, как закодировалась инструкция по адресу CS:0100. Команда 'D' используется для установки адреса начала дисассемблируемой области. Этот адрес может быть задан как сегмент и смещение. Формат команды: D [адрес] Примеры: D 120 D * D DS:100 D 123:AX+SI D IP При нажатии функциональной клавиши F1, независимо от текущего значения указателя инструкции IP, выполняется инструкция, показанная в дисассемблируемой области в обратном фоне. После выполнения одиночного шага все регистры, включая указатель инструкции IP и регистр сегмента кода CS, корректируются, и в строке с обратным фоном выводится следующая инструкция. Строка предыдущей команды показывает инструкцию, выполненную перед этим. Используя F1, выполните по шагам фрагмент программы, обратите внимание, как меняется содержимое регистров и ячейки памяти с адресом DS:0004. В окнах памяти вы можете изменить значение любого подсвеченного символа. Для этого, используя функциональные клавиши F7 - F10, вы переходите в нужное окно, управляя курсором, переходите к нужному символу и вводите его новое значение. В окне памяти 2 можно вводить и символьные значения, для чего необходимо перейти в правую часть окна с помощью тех же функциональных клавиш F7 - F10 и вводить нужные символы в ячейки памяти. Установка адреса окна памяти Для установки начального адреса для обoих окон памяти можно использовать команду М. Формат команды: Mn адрес Примеры: М1 DS:1230 M1 ES M2 DS:SI+1000-DI М1 2340:[SI] M2 SI+AX+10 M1 [SI] 'n' может быть 1 или 2 (номер окна). Если введено имя регистра, за которым следует двоеточие (:), текущее имя регистра, отображенное в указанном окне, заменяется на вновь введенное имя. Заполнение окна памяти Команда заполнения используется для заполнения области памяти указанной строкой. Формат команды: F адрес, повтор, строка Организация циклов на ассемблере Составим фрагмент программы, реализующий пересылку байта из одной ячейки в другую: mov si, 0000 mov di, 0400 mov al,[si] mov [di],al Здесь пересылается байт из ячейки с адресом DS:0000 в ячейку с адресом DS:400. Введите этот фрагмент с адреса CS:200, посмотрите, как выполняется эта пересылка. При этом в окне памяти 1 установите начальный адресDS:0000, а в окне памяти 2 - начальный адрес DS:0400. Проверьте, чтобы перед выполнением фрагмента содержимое сегментных регистров было таким же, как при загрузке AFDPRO. Организуем цикл для пересылки 40 последовательных байтов из одной области памяти в другую: mov cx, 28 mov si, 0000 mov di, 0400 mov al,[si] mov [di],al inc si inc di dec cx jne 206 или mov cx, 28 mov si, 0000 mov di, 0400 mov al,[si] mov [di],al inc si inc di loop 206 где 206 - смещение в сегменте команд команды mov al,[si]. Выполните несколько циклов, используя функциональную клавишу F1, посмотрите, как меняется содержимое регистров и ячеек памяти. Вывод справочной информации Нажатие на функциональную клавишу F4 обеспечивает возможность получения справочной информации непосредственно на экране. Справочник контекстно зависимый, то есть выводится информация о команде, вводимой в данный момент. Справочная информация выводится на русском языке. Для просмотра справочной информации возможно использование клавиш и . Команда G (выполнить) Формат команды: G [нач.адр.] [,адр.ост] Пример: G G * G CS:100 G 123, 1100 G ,1200 Команда G используется для запуска отлаживаемой программы. Необходимо, чтобы адресные параметры ссылались на ячейки, которые содержат первый байт допустимых инструкций, в противном случае результат выполнения команды непредсказуем. Начальный адрес 'нач.адр.' может быть указан как сегмент и смещение. Если значения сегмента не указано, то используется значение регистра сегмента кода, отображаемого в данный момент. Если CS: указан явно, то значением кода сегмента становится то, которое использовала последняя выполненная инструкция. Команда 'G' без указания начального адреса начинает выполнение с инструкции, которая отображена в дисассемблируемой области в обратном фоне. Завершение работы и возврат в DOS Формат команды: QUIT Эта команда используется для завершения работы AFDPRO. Команда QUIT должна быть введена полностью для того, чтобы избежать непреднамеренного завершения работы AFDPRO Команды отладчика AFDPRO Вычисление выражений Формат команды: ? [%]=выражение Примеры: ? = %1234+ffff ? %= %1234+ffff % означает десятичное значение, в остальных случаях полагается шестна- дцатиричное значение Использование встроенного ассемблера Формат команды: А [адрес] Примеры: A A CS:100 Разрешение/запрещение звукового сигнала Формат команды: BE(ep) (ON) (OFF) Пример: BE BE ON BEEP OFF Загрузка определений точек останова из файла Формат команды: BL фспец Пример: BL A:TEST.SET Просмотр на экране содержимого клавишного буфера (макросов) Формат команды: BR [фспец] Пример: BR TEST.AUT Запись определений точек останова в файл Формат команды: BW фспец Пример: BW TEST.SET Сравнение двух областей памяти Формат команды: С адр.1, адр.2, длина Примеры: С DS:100,FOOO:123,%100 С 100, HS:0123, CХ*2 Koпирование данных из одной области памяти в другую Формат команды: CO исх.адр., пр.адр., длина Примеры: CO DS:100, 5023:123, %100 CO 100, HS:0123, CX*2 Определение начального адреса дисассемблирования Формат команды: D адр. Примеры: D 120 D * D FS:100 D 123:AX+SI D IP Просмотр каталога файлов Формат команды: DI[R] [фспец] Примеры: DIR C:\test\*.exe DIR *.* Указание типа процессора для ассемблирования Формат команды: DM [88 | V20 | 286] Примеры: DM DM 286 Заполнение области памяти Формат команды: F адр, повтор, строка Примеры: F 1234,1B,23 456A 'текст' 11 'еще текст' F CS:DI+SI, %100, 20 Команда G (выполнить) Формат команды: G [нач.адр.][,адр.ост] Пример: G G * G CS:100 G 123, 1100 G ,1200 Команда GC (продолжить) Формат команды: GC [/T][/A][нач.адр.] [,адр.ост] Пример: GC Ввод из порта Формат команды: I адр. Примеры: I 3EC I 3EC+SI I DX I DX-AX Задание и выполнение прерывания Формат команды: INT номер Пример: INT 21 Загрузка файла в память Формат команды: L фспец , [aдр.] Примеры: L TEST L TEST.COM L DATA.DAT, DS:1234 Установка адреса окна памяти Формат команды: Mn адр. Примеры: М1 DS:1230 M1 ES M2 FS:SI+1000-DI М1 2340:[SI] M2 SI+AX+10 M1 [SI] Выбор режима отображения Формат команды: МО(de) МО(de) M(ono) МО(de) C(olor) МО(de) A(lternative) ON МО(de) A(lternative) OFF Команда МО выдает информацию о текущем режиме экрана. Команда МО М переводит экран в монохромный режим, команда МО С - в цветной. МО A OFF ( режим по умолчанию ) использует для вывода информации в программе тот же экран, что и для самого AFDPRO. Для использования альтернативного экрана вводится команда МО A ON, и тогда клавиша F6 используется для переключения экранов. Вывод данных в порт Формат команды: О адр., знач. Пример: О 3ЕС, 12 О 3EC+SI,1230 O DX, AL O DX-AX, AX+BX*2 Kорректировка содержимого памяти Формат команды: Р адр., строка Примеры: Р 110, 12 3ЕС 'текст' SI P DS:1103, AX 1234 P *, 90 Печать дисассемблированного кода Формат команды: PD адр., длина [,фспец.] Примеры: PD *, 100 PD DS:1103, СХ, А:TST.PRT Печать данных в шестнадцатеричном виде и в коде KOИ-8 Формат команды: PH адр., длина [,фспец] Примеры: PH *, 100 PH DS:1103, CX, A:TST.PRT Распечатка записей трассировки Формат команды: PT [начало, длина [,фспец]] Примеры: PT PT 10, 20 PT 10,5,\WORK\TST.PRT Чтение содержимого дисков в память Формат команды: RD адрес, драйвер, головка, дорожка, сектор, число секторов Драйвер - обозначает диск ( A..D ), с которого выполняется чтение. Завершение работы и возврат в DOS или переход в резидентный режим Формат команды: QUIT [R[ESIDENT]] Команда установки регистра Формат команды: [R] регистр=значение Примеры: R AX=1250 DS=AX+SI CF=1 BX=AL*3+D-CX/AH CX=%20 Команда поиска строки Формат команды: S [[адр.], строка] Примеры: S 0:0,12 3EC 'текст в KOИ-8' SI S DS:1103, AX 1234 S Команда поиска инструкции Формат команды: SI [[адрес],инструкция] Примеры: SI CS:100, PUSH AX SI Отображение данных трассировки Формат команды: Т ТВ Разрешение показа трассировки с предварительной очисткой буфера трассы Формат команды: TR [ON | OFF] [CLR] Примеры: TR TR ON CLR Запись данных в файл Формат команды: W фспец., адр., длина Пример: W TEST.DAT, ES:SI, 1200 Запись содержимого области памяти на диск Формат команды: WD адрес, драйвер, головка, дорожка, сектор, число секторов Драйвер - обозначает диск ( A..D ), на который выполняется запись. Загрузка буфера клавиатуры (загрузка макрокоманды) Формат команды: XL спец. Пример: XL TEST.AUT Режим обучения (генерация макроопределения) Формат команды: ХТ Запись информации о нажатых клавишах в файл (сохранение макроопределений) Формат команды: XW фспец. Пример: XW TEST.AUT Выполнение записанных нажатий клавиш (выполнение макрокоманды) Формат команды: XX [фспец.] Примеры: XX XX TEST.AUT |
Поиск |