- •Команда ассемблирования (перевод мнемокода ассемблера в машинный код)
- •2. Команда дизассемблирования (перевод машинного кода в мнемокод ассемблера)
- •Команда ввода данных в память
- •Команда вывода содержимого участка памяти на экран
- •Команда просмотра и изменения содержимого регистров
- •Мнемонические обозначения состояний флагов
- •Команда пошагового выполнения программы
- •Команда задания имени файла программы
- •Команда загрузки файла в память
- •Команда записи области памяти в файл
- •Команда выхода из отладчика
- •Варианты заданий
Команда ассемблирования (перевод мнемокода ассемблера в машинный код)
Отладчик DEBUG можно использовать для введения операторов ассемблера непосредственно в память машины. Команду ASSEMBLE можно использовать при составлении коротких программ на ассемблере, а также при внесении изменений в существующие программы. Эта команда позволяет вводить мнемокод ассемблера непосредственно в память, избавляя от необходимости транслировать (ассемблировать) программу. Вводимый текст не может включать метки перехода в чистом виде.
При введении команды, необходимо набрать "а" или "A" и, через пробел, необязательный параметр – адрес первой команды загружаемой программы. Если указан короткий адрес, то адрес сегмента выбирается из регистра CS. Если адрес не задан вообще, то машинный код будет помещаться в память, начиная с того места, где закончилась обработка предыдущей командой ASSEMBLE. Если после старта отладчика команда вводится в первый раз и в командной строке отсутствует начальный адрес, то размещение машинного кода производится с адреса CS:0100.
После введения команды ассемблирования на экране появляется начальный адрес. Это сигнал на введение первой команды программы. Если команда введена без ошибок, на экран выдается адрес следующей команды и отладчик опять переходит в режим ожидания. В случае ошибки отладчик обозначает ее месторасположение. Если введены все команды программы, то нажимается Enter – команда ASSEMBLE заканчивает работу и возвращает управление отладчику.
Пример ассемблирования небольшой программы:
-a 0976:0100
0976:0100 MOV AL,2A
0976:0102 MOV DI,0200
0976:0105 MOV CX,001D
0976:0108 CLD
0976:0109 REPNZ STOSB
0976:010B MOV AL,24
0976:010D STOSB
0976:010E PUSH ES
0976:010F POP DS
0976:0110 MOV DX,0200
0976:0113 MOV AH,09
0976:0115 INT 21
0976:0117 INT 20
0976:0119 <---- Нажимается Enter
-
2. Команда дизассемблирования (перевод машинного кода в мнемокод ассемблера)
Команда UNASSEMBLE служит для перевода машинного кода на язык ассемблера. При введении команды необходимо набрать "u" или "U" и, через пробел, необязательные параметры – начальный адрес обрабатываемого кода, конечный адрес обрабатываемого кода или его размер.
В командной строке UNASSEMBLE можно не указывать начальный адрес обрабатываемого кода. Если указан короткий адрес, то адрес сегмента выбирается из регистра CS. Если адрес не задан вообще, то машинный код обрабатывается с того места, где закончилась обработка предыдущей командой UNASSEMBLE. Если после старта отладчика команда вводится в первый раз и в командной строке отсутствует начальный адрес, то обработка машинного кода производится с адреса CS:0100.
Обрабатываемый участок памяти можно определить начальным и конечным адресами. При этом, в не зависимости от формы начального адреса, конечный адрес должен быть коротким.
Другой вариант задания обрабатываемого участка памяти – задание его начального адреса и размера. Чтобы отличить размер от короткого конечного адреса перед ним вводится символ "L".
Если размер участка памяти, обрабатываемой командой UNASSEMBLE, не определен, то по умолчанию длина обрабатываемого участка равна 32 байтам.
Результатом выполнения команды дизассемблирования является листинг программы, сгруппированный в три колонки. В листинге слева (первая колонка) указывается полный логический адрес команды. Затем (вторая колонка) – значение составляющих команду байтов в машинном коде. В третьей колонке находится соответствующая этому коду инструкция ассемблера.
Пример дизассемблирования небольшой программы, введенной в предыдущем примере:
-u CS:0100 L19
0976:0100 B02A MOV AL,2A
0976:0102 BF0002 MOV DI,0200
0976:0105 B91D00 MOV CX,001D
0976:0108 FC CLD
0976:0109 F2 REPNZ
0976:010A AA STOSB
0976:010B B024 MOV AL,24
0976:010D AA STOSB
0976:010E 06 PUSH ES
0976:010F 1F POP DS
0976:0110 BA0002 MOV DX,0200
0976:0113 B409 MOV AH,09
0976:0115 CD21 INT 21
0976:0117 CD20 INT 20
-