Основные команды отладчика AFD

Отладчик 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.

BWfspec – команда записи точек останова в файл, определяемый параметром fspec.

BLfspec – команда загрузки точек останова из файла, определяемого параметром 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