Отладчик AFD является очень простым и удобным в использовании средством отладки программ. Он чрезвычайно компактен (размер файла afd.com порядка 65К), но при этом предоставляет достаточно большой спектр услуг и предназначен для решения широкого круга задач, включая следующие:
- разработка и отладка программ на языке ассемблера;
- дизассемблирование COM и EXE файлов;
- изучение работы программ и их модификация;
- изучение текущего содержимого оперативной памяти, регистров и т.д.
Отладчик AFD предоставляет в распоряжение пользователя два экрана - основной, в котором осуществляются все операции и визуализируется основная информация, и альтернативный (скрытый), предназначенный для отображения результатов работы программы. Основной экран имеет две страницы. Вторая страница предназначена для установки точек прерывания в программе. Переходы с одной страницы на другую осуществляются нажатием функциональной клавиши F5 - Set Break Point, что отражено в меню внизу экрана первой страницы.
Команды отладчика выполняются после нажатия клавиши ENTER.
Рассмотрим основные команды отладчика:
А {addr (адрес)} - команда модифицирования ассемблерного кода. Позволяет редактировать команды программы, вводить программу с клавиатуры. Выход из режима ввода программы осуществляется нажатием клавиш перемещения курсора, F8, F7. Если адрес addr, модифицируемой команды не указан, изменения производятся в текущей (выделенной) строке. Если команда задана с параметром (адресом), текущей становится инструкция с данным адресом.
G {start ad.(старт. адр.)}{, break ad.(адрес останова)} - команда запуска программы. Выполняет программу, начиная с текущей точки (если в команде отсутствует первый операнд) или с адреса start ad. (“ старт. адр. ”. Дополнительно может быть установлена точка останова. Сегментом по умолчанию для адреса останова break ad. Является CS. Выполнение программы может быть остановлено нажатием CTRL-Esc.
QUIT { R {esident}} - команда выхода из отладчика и возврата в DOS. При выходе из отладчика рабочие файлы не сохраняются. Опция R делает программу AFD резидентной, при этом AFD может быть вызвана нажатием CTRL-Esc.
L fspec (имя файла) {param}{,addr} - команда загрузки файла в память. Если в команде указывается адрес addr, программа располагается в памяти с данного адреса, в противном случае адрес “назначения” определен по умолчанию (CS:0100). После завершения операции загрузки программы в память, число загруженных байт отображается в регистрах BX-CX.
M n addr | [reg] – команда отображения в окне памяти n сегмента памяти, где n может принимать значения 1 или 2 в зависимости от того, какое окно выбрано. Отладчик предоставляет в распоряжение пользователя два окна, в котором могут отображаться различные участки памяти. Оба эти окна располагаются на основном экране – одно справа, другое внизу экрана. Сегмент по умолчанию указывается в самом окне. Для изменения адреса отображаемого участка можно использовать содержимое регистра, например, SI, AX и т.п.. Так, можно записать команду M 1 [BX]. Если при этом в регистре BX содержится значение 13а5, то в правом окне отображения памяти будут выведены содержимое ячеек, начиная с указанного адреса. Ту же операцию можно выполнить командой M 1 13а5.
MO {DE} M{ONO} | C{OLOR} | A{LTERN} ON | OFF - команда обеспечения настройки экрана. Позволяет включить альтернативный (скрытый) экран для отображения данных, выдаваемых исполняющейся программой. После выполнения команды MO A ON переключение между основным и альтернативными экранами осуществляется с помощью клавиши F6. Если команда задается с параметром M, используется монохромный адаптер, параметр С позволяет использовать цветной адаптер. Если задать команду без параметров, будут выданы действующие установки экрана приложения.
W fspec, addr, length – команда записи данных из сегмента памяти в файл fspec. Адрес начала записываемого фрагмента памяти определяется параметром addr. Cегментный адрес по умолчанию находится в DS. Число записываемых байт, указывается в length, оно задается в шестнадцатеричном формате.
{ R } reg=value – команда установки значения регистра. Если необходимо установить все доступные биты флагового регистра FL, следует дать команду FL=value, например: FL=FE. Здесь флаговый регистр устанавливается шестнадцатиразрядным значением. Можно этой же командой устанавливать отдельные биты этого регистра, при этом следует обращаться к ним по именам: OF, DF, IF, SF, ZF, AF, PF, CF. Например, CF=1. Чтобы задать значение регистра AX нужно выполнить команду AX=12fd.
D addr – команда отображения кодов программы. Стартовый адрес дезассемблированных кодов указывается в параметре addr. Сегментный адрес по умолчанию содержится в регистре CS. CS:n – указывает последнюю выполненную инструкцию. Дезассемблированные коды отображаются в окне программы, которое располагается в центре основного экрана. В самой левой колонке приводятся адреса инструкций, далее, в следующей колонке, следуют машинные коды и затем - ассемблерные представления этих кодов.
CO s-addr, d-addr, length – команда копирования содержимого области памяти с начальным адресом s-addr в область с адресом d-addr, число копируемых байт определяется значением length. Сегментный адрес по умолчанию хранится в регистре DS.
I addr – команда ввода данных из порта ввода/вывода. В качестве адреса addr может быть указан любой 8-ми битный или 16-ти битный адрес или регистр.
O addr, value – команда вывода значения value в порт, адрес которого определяется параметром addr. В качестве значения value может быть слово или байт.
P addr, string – команда изменения содержимого памяти в кодовом сегменте (программной памяти). Изменения производятся с адреса addr, второй операнд string определяет сами изменения. Сегмент по умолчанию в CS.
F addr, repeater, string – команда заполнения фрагмента памяти строкой string, указаной в качестве третьего операнда. Строка дублируется repeater раз. Адрес сегмента по умолчанию в DS.
S {{addr}, string} - команда поиска данных в памяти. Если адрес addr в команде не указан, он берется как CS:0. В CS – адрес сегмента по умолчанию. Если данные найдены, они отображаются в окне памяти М2 отладчика. String – строка поиска. Если команда S задана без параметров, поиск повторяется с использованием прежних значений.
C addr1, addr2, length – команда сравнения двух областей памяти. Если сравниваемые области не совпадают, в окне памяти М1 отображается область, определяемая первым параметром addr1, а область, начинающаяся с адреса addr2,отображается в окне памяти М2.
BW fspec – команда записи точек останова в файл, определяемый параметром fspec.
BL fspec – команда загрузки точек останова из файла, определяемого параметром fspec.
PH addr, length {,fspec}- команда печати шестнадцатеричных и ASCII данных из памяти, начиная с адреса addr. Число распечатываемых ячеек определяется параметром length. Адрес сегмента памяти по умолчанию в DS. Если параметр fspec не определен, вывод будет осуществляться на принтер.
PD addr, length {,fspec}- команда печати дезассемблированных кодов из памяти, начиная с адреса addr. Число распечатываемых инструкций определяется параметром length. Адрес сегмента памяти по умолчанию в СS. Если параметр fspec не определен, вывод будет осуществляться на принтер.
- fspec определяет имя файла, наименованного в соответствии с соглашениями DOS. Для команды L расширением по умолчанию является “ exe ”;
- параметр addr задает адрес в формате seg:offset. Если сегмент seg не определен, используется значение по умолчанию. Offset может задаваться по разному: это может быть конкретное значение или результат вычисления выражения. Так, например, выражение может иметь вид: DS:SI+BX-123, или ” * ”, где “*” является указателем на следующую инструкцию;
- Reg – обозначение регистра размером в байт или слово;
- Value – может принимать значение некоторого регистра или байта/слова в шестнадцатеричном формате. Если value – “ * ”, то в качестве значения берется содержимое регистра IP. Десятичное значение записывается как %123, можно использовать арифметические выражения, например AX+BX*3/2. Порядок выполнения вычислений строго определен – слева-направо;
- String задает список значений или ASCII строк (строка заключена в кавычки) разделенных пробелами или запятой.
- Например: 1234 BX, ‘tromb’ FF.
Назначение функциональных клавиш:
F1 - пошаговое выполнение программы с входом в процедуру;
F2 - пошаговое выполнение программы без входа в процедуру;
F3 - повторный запуск программы;
F4 - HELP команд отладчика;
F5 - вход в поле меню установки точек прерывания;
F6 - переключение основного и альтернативного экранов (инициализируется после соответствующей установки);
F7, F8, F9, F10 - установка курсора в нужное поле экрана – up, down, left, right.
Лабораторная работа № 1