Команды отладчика DEBUG

1. Команда вывода содержимого заданного диапазона памяти .

D:[<диапазон>]

Если диапазон не указан, то выводится содержимое 128 байт , начиная с адреса, следующего после информации , выведенной по предыдущей команде D.

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

D1000 L200 выводит на экран содержимое памяти из DS:1000 длиной 200. Сегмент DS в этой команде используется по умолчанию, другие надо указывать явно.

2.Команда ассемблирования мнемонических кодов прямо в памяти.

A:[<адрес>]

Эта команда используется для ввода коротких программ в ЭВМ. Программа может содержать мнемонические обозначения машинных команд. Для сегментов используются известные обозначения: CS,DS,ES,SS. Все числовые значения вводятся как шестнадцатиричные числа, содержащие до четырех знаков. Префиксы должны указыватся перед кодами операций, ккоторым они относятся. Префиксы NEAR и FAR могут использоватся для указания ближних или дальних переходов.
Отладчик не может определить, относится ли некоторый операнд к слову или байту памяти. В этом случае тип данных может быть указан явно с помощью префиксов WORDPTR и BYTE PTR. Также используется соглашение, что операнд, заключенный в квадратные скобки, означают содержимое адреса. Например:

MOV AX,21 ; загрузить 21 в регистр AX

MOV AX, [21] ; загрузить содержимое по адресу 21

При вводе команд можно использовать все способы косвенного обращения к регистрам: ADD BX,[BP+34]

POP [BP+DI]

А100 принимает коды с 100Н адреса в сегменте CS, учитывает длину получившейся команды и устанавливает новый адрес. Выход из этого режима по нажатию Enter на очередной пустой строке.

3. Команда выполнения программы, находящуюся в памяти

G [=<адрес >] [<адрес>]

Если задан адрес, то выполнение начинается с этого адреса. Знак = служит для различия стартового адреса от точки разрыва. Если адрес не задан, то программа выполняется так, как будто она работает не под управлением отладчика. Если в команде указаны другие адреса, то выполнение останавливается по первому адресу независимо от его положения в списке. При достижении точки разрыва выводятся регистры флаги и перекодированная команда. Может быть установлено до десяти точек разрыва. Точки разрыва устанавливаются только по адресам первых байт команды.
Для выполнения этой команды пользовательский стек должен быть установлен правильным образом и содержать дополнительно шесть байт.

GCS:125 400 выполнит подряд все команды с адреса 125 до 400 и остановится. Если по пути есть обращения к подпрограммам или переходы за пределы указанного блока, результаты непредсказуемы: от выполнения всей программы до зависания и других тяжелых последствий. Обычно применяется для быстрого прохождения уже изученных участков программы.

4. Команда дезассемблирования байт, содержащихся в памяти

U [<адрес или диапазон>]

При вводе этой команды без параметров дизассемблируются 20h байт начиная с адреса, следующего затем адресом, содержимое которого было дезассемблировано по предыдущей команде U. Если указан диапазон, то дизассемблируются все байты, входящие в него.

Пример: U04ba:100 L 10

Дизассемблировать 16 байт начиная с адреса 04ba:100

- U60:385 дизассемблирует программный код с указанного адреса. Длина одного блока по умолчанию 24 байта, но может быть задана в виде L30 после адреса. Это удобно для распечатки листинга через PrintScreen на принтер. Длина блока подбирается такой, чтобы дизассемблированная информация занимала один полный экран – 25 строк, листинг получается аккуратным и удобным в работе. Структура выводимой информации поясняется ниже:
адрес содержимое расшифровка в виде мнемокода
0060:0385 E83B00 CALL 03C3
0060:0388 7407 JZ 0391
0060:038A E83600 CALL 03C3
0060:038D 8B07 MOV AX,[BX]
0060:038F 0000 ADD [BX+SI],AL
0060:0391 E82F00 CALL 03C3
0060:0394 8B07 MOV AX,[BX]

5. Команда записи файла на диск

W [<адрес>] <устройство> [<нач.сектор>][<число секторов>]

Файл записывается начиная с адреса CS:100. Если указан адрес, то файл записывается начиная с этого адреса. Имя файла должно быть задано либо, при вызове отладчика, либо по команде N. Вывод осуществляется на указанное устройство: 1- A 2 - B и т.д.

W100 запишет на диск под заданным именем содержимое командного (по умолчанию) сегмента с адреса 100. Длина записи определяется парой регистров ВХ и СХ, содержимое которых образует одно 32 разрядное число. (может не хватить места на диске!!!). Команда записи не может работать с ЕХЕ файлами, т.к. не умеет создавать заголовок.
Данная команда выполняет две функции:
- запись в файл;
- запись в дисковый сектоp.
Отсюда следуют и две возможные фоpмы команды W:
W [адpес] -запись в файл, заданный пpедшествующей командой N, со-
деpжимого памяти начиная с указанного адpеса (или с адpеса CS:IP).
Число записываемых байтов беpется в BX:CX.
W [адpес] диск сектоp N - запись в N дисковых сектоpов, на диско-
воде диск, начиная с относительного сектоpа сектоp содеpжимого памя-
ти начиная с указанного адpеса (или с адpеса CS:IP). Число записывае-
мых байтов беpется в BX:CX. Таким обpазом можно, сфоpмиpовав в
пpогpамме некотоpую область данных (напpимеp, с помощью команд E или
F), записать ее затем в системные области диска (BOOT RECORD и пpоч.).

6. Команда занесения данных в память:

E <адрес> <список>

Назначение команды – занесение байтов в память по указанному адресу. Если в команде задается список, то занесение байт в память выполняется автоматически. Если список не указан, то выводится адрес и его содержимое, затем адрес повторяется и программа ожидает ввода нового значения. Может быть выполнено одно из следующих действий:

- замена значения введенным новым значением. Если новое значение содержит неверную цифру или более двух цифр, то неверный или лишний символ не отображается

- ввести пробел, чтобы перейти в следующему байту;

- ввести черту для возврата к предыдущему байту, который можно заменить при необходимости;

- ввести символ возврата каретки, чтобы завершить выполнение этой команды.

ECS:1000 выводит содержимое байта по указанному адресу и позволяет ввести новое значение. Пробел – переход к следующему байту, Enter конец редактирования.

ECS:1000 01 02 03 04 заполнит память с адреса 1000 указанным списком байтов 01 02 03 04. Длина списка ограничена длиной строки на экране.

7. Команда заполнения памяти

F <диапазон > < список >

Команда заполняет указанный диапазон памяти значениями, указанными в списке. Если диапазон больше, чем значений в списке, то список будет использоватся повторно. Если в списке больше значений, чем требуется, то лишние значения игнорируются.

FB800:0 L200 41 0E заполняет экранную память (и экран) буквой А(код 41Н) желтого(0EH) цвета.

8. Команда ввода из порта

I <значение>

Осуществляет ввод байта данных из порта, указанного в парметре <значение> и выводит этот байт на экран.

-I379 читает данные из регистра статуса принтера (379Н) результат = 5FН, зная значение отдельных битов, можно узнать состояние принтера.

9. Команда вывода в порт

O <значение> <байт>

Команда выодит указанный байт в порт, определенный в параметре <значение>.

О378 55 пишет в регистр данных принтера биты 01010101.

10. Команда вывода содержимого регистров

R [<имя регистра>

Команда осществляет вывод содержимого одного или более регистров процессора . Если операнды не указываются, то выводится содержимое всех регистров. Допустимые имена регистров:

fx, bx,cx,dx,sp,bp,si,di,ds,es,ss,cs,ip,pc . Если указан регистр флагов, то выводится все флаги в виде двухбуквенного кода:

Обозначение флагов

Флаг Установлен Сбpошен Описание
CF CY CN Флаг пеpеноса. Устанавливается в состояние 1, если аpифметическая опеpация вызвала пеpенос (пpи сложении) или заем (пpи вычитании) из стаpшего бита pезультата. В пpотивном случае флаг CF сбpасывается
PF PO PE Флаг четности. Во многих командах устанавливается в 1, если младшие восемь бит pезультата содеpжат четное число единичных бит. В пpотивном случае флаг PF сбpасывается в 0.
AF AC NA Флаг вспомогательного пеpеноса.Устанавливается в 1, если аpифметическая опеpация вызвала пеpенос (пpи сложении) или заем (пpи вычитании) из младшей тетpады. В пpотивном случае флаг CF сбpасывается в 0. Пpогpаммно этот флаг недоступен.
ZF ZR NZ Флаг нуля. Большинством команд устанавливается в 1, когда pезультат опеpации pавен 0.
SF NG PL Флаг знака. Большинство команд устанавливают флаг SF в то же состояние, в каком находится стаpший бит pезультата.
IF EI DI Флаг пpеpывания. Пpи установленном флаге IF пpоцессоp pаспознает и обpабатывает внешние аппаpатные пpеpывания. Пpи IF=0 пpоцессоp игноpиpует аппаpатные пpеpывания.
DF UP DN Флаг напpавления обpаботки цепочек.Пpи DF=0 после выполнения цепочечной опеpации пpоизводится автоматический инкpемент, а в состоянии DF=1 - автоматический декpемент индексных pегистpов ESI/SI и EDI/DI, адpесующих цепочки.
OF NV OV Флаг пеpеполнения. Флаг OF устанавливается  в 1,если в аpифметических опеpациях со знаковыми опеpандами pезультат пpевышает диапазон пpедставимых чисел.В пpотивном случае  OF сбpасывается в 0.

При запуске программы сегментные регистры устанавливаются на начало свободной памяти, указатель команд (IP) - на 0100h, все флаги сбрасываются, а остальные регистры обнуляются.

R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17A0 ES=17A0 SS=17A0 CS=17A0 IP=0100 NV UP EI PL NZ NA PO NC
17A0:0100 CD13 INT 13

RAX вызов на редакцию регистра AX, можно изменить значение вручную.

11. Команда сравнения

C <диапазон><адрес>

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

<адрекс 1><байт 1><байт 2><байт 3>

C1000:100 400 2000:200 сравнивает два блока длиной 300 начиная с адресов 1000:100 и 2000:200 на экран выводит все адреса, где данные не совпадают.

12. Команда загрузки файла

L [<адрес>] <устройство><начальный сектор><число секторов

Команда загружает указанное число секторов с указанного диска начиная с указанного cектора. Загрузка производится по указанному адресу или по адресу CS:100h. Примеры:

- при вводе команды: newfile.com L будет загружен файл NEWFILE.COM,

- по команде L04BA:100 2 0F 6D , будет загружено в память по адресу 04BA:100109 записей (это 6Dh) начиная с пятнадцатой(это 0Fh).

L100 загружает указанный командой N файл в память по адресу 100Н

L0 0 0 2 читает в память содержимое диска А:, по адресу 0, начиная с 0 логического сектора, два сектора. Это загрузочная запись дискеты.

13. Команда пересылки

M <диапазон><адрес>

Эта команда пересылает блок данных указанного диапазона по указанному адресу. Пример:

MCS:100 110 CS:500 - пересылает 110 байт начиная с адреса

CS:100 . Будет переслано начиная с адреса CS:500.

М1000:100 L 200 2000:100 копирует блок длиной 200 с адреса 1000:100 на 2000:100. Старый блок остается на месте.

14. Команда установления имени файла

N [<устройство>] <путь> [<параметры командной строки>]

По этой команде устанавливается имя файла, которое затем может быть использовано в командах L - загрузки файла и W - команда записи файла.

Nfilename.ext  задан файл с таким именем.

15. Команда поиска

S <диапазон><список>

Команда осуществляет поиск в указанном диапазоне заданного списка значений. Список может содержать один или более байт, отделенных друг от друга пробелом или запятой.

SCS:100 FFFF CD 13 ищет в сегменте команд все обращения к дискам через BIOS.

16. Команда трассировки

T [=<адрес >][<значение>]

По этой команде выполняется код, содержащийся начиная с указанного адреса, количество команд указывается значением. При этом после каждого шага выводится содержимое всех регистров и флагов. Пример:

T=011a 10

По этой команде будет выполнено 16(10h) команд, начиная с адреса 011a в текущем cегменте.

Не рекомендуется для прохождения ПЗУ BIOS и программ, критичных по времени, например работы с дисками или связи. Строковые операции выполняются тоже пошагово, т.е. долго и утомительно. Зато, этой командой можно войти в подпрограмму, в том числе и во вложенную, т.е. добраться до самых потайных мест программы.

17. Команда  пошагового выполнения, начиная с указанного адpеса.

Р [=адpес] [счетчик]

Р выполняет очередной шаг по текущему адресу. Подпpогpаммы, циклы и пpогpаммы обpаботки пpогpаммных пpеpываний (команды CALL, LOOP, INT и т.д.) выполняются как одна команда.

Р1234 выполняет шаг, начиная с адреса CS:1234 (А есть ли там разумная команда?)

18. Шестнадцатеричная арифметика

H (шестнадцатеричная арифметика)

-H400 200 получив два числа выдает их сумму и разность 0600 0200 Удобно для подсчета длин всяких переходов.

19. Команда завершения работы

Q   без параметров, работа окончена (сохранялись?)

Необходимо помнить, что введенная вручную программа не сохраняется на диске автоматически если ее не записать в виде файла командами N и W и теряется при выходе из отладчика по команде Q.

Все указанные команды вводятся в ответ на подсказку отладчика - минус (-). Список команд отладчика можно получить по команде ?. Все команды (кроме Q) воспринимают параметры, ( только 16-ричные значения), разделяемые запятыми или пробелами, например: dcs:110 120. После буквы команды пробел можно не делать, дальше,– обязательно! Заглавные и строчные буквы не различаются.

Адреса задаются сегментным регистром (по умолчанию CS для A, G, L, Р, T, U и W и DS для всех других команд ) или его адресом из 4 цифр и смещением. Двоеточие между сегментом и смещением обязательно.

Debug поддерживает правила DOS при редактировании командной строки, клавиши F1 и F3 позволяют повторить последнюю введенную строку пошагово или всю, например для устранения случайной мелкой ошибки.