Запуск отладчика
Программа вызывается через командную строку:
DEBUG
DEBUG [[диск:][путь]имя_файла [параметры]]
DEBUG C:\мойпуть\My.com
Работа с файлами
Команда |
Описание |
Пример |
-N |
-N Путь_Имя_Файла. С помощью этой команды можно загружать и сохранять файлы. Сокращённо от слова Name. |
-N My.com [Нажать Enter] |
-L |
Загрузка файла. Сокращённо от слова Load. |
-N My.com [Нажать Enter] -L [Нажать Enter] |
-W |
-W Путь_Имя_Файла. Сохранить файл. Сокращённо от слова Write. |
-N My.com [Нажать Enter] -W [Нажать Enter] Writing Число_Байт bytes |
Отображение и изменение значений регистров
Команда |
Описание |
Пример |
-R |
Выдаёт содержание всех регистров. |
-R [Нажать Enter] AX=D3E0 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=16BB ES=16BB SS=16BB CS=16BB IP=0100 NV UP DI PL NZ NA PO NC 15A3:0100 30C0 XOR AL,AL |
-R [регистр] |
Просмотр регистра и запись нового значения в регистр. |
-R AX [Нажать Enter] AX 0000 666 [Нажать Enter] |
Дамп памяти
Команда |
Описание |
Пример |
-D |
Выдаёт содержимое памяти. Сокращённо от слова Dump. |
-D [Нажать Enter] |
-D [Начало_Сегмента] L [Конец_Сегмента] |
Выдаёт содержимое памяти от начального сегмента до конечного сегмента. Чтобы вывести всё память нужно ввести -D 0 L 0 [Нажать Enter] |
-D 0000 L 0005 [Нажать Enter] 1814:0000 CD 20 FF 9F 00 |
Дизассемблирование
Команда |
Описание |
Пример |
-U |
Команда преобразования кода в инструкции ассемблера. Сокращённо от слова Unassemble. |
-U [Нажать Enter] 1814:0100 ADD [BX+SI],AL 1814:0102 XOR AL,00 |
Ассемблирование
Команда |
Описание |
Пример |
-A |
Преобразования инструкции ассемблера в машинный код. Сокращённо от слова Assemble. |
-A [Нажать Enter] 1814:0100 MOV AX,0009 1814:0103 [Вводим_Дальше] [Нажать Enter] |
Компиляция
Команда |
Описание |
Пример |
-G |
Запуск исполнения программы. Сокращённо от слова Go. |
-G [Нажать Enter] Program terminated normally |
-G =[Адрес_Начала_Работы] |
Начиная с этого адреса начинается компиляция. |
-G =100 |
-G [Адрес_Брейкпоинта] [Адрес_Брейкпоинта] … |
Программа запускается и выполняется пока не дойдёт до брейкпоинта после чего она остановится и выведет значения регистров да продолжения работы необходимо нажать -G. Максимальное число брейкпоинтов 10. |
-G 176 47d 537 647 [Нажать Enter] |
Трассировка
Команда |
Описание |
Пример |
-T |
Команда имеет сходство с командой (-G) Go, но отличается тем что выводит значения регистров поле каждой инструкции. Сокращённо от слова Trace. |
-T [Нажать Enter] |
-T =[Адрес_Начала_Работы] [Количество_Иструкций] |
Дополнительно указывает с какого адреса запускаться программе и количество исполняемых инструкций. |
-T =100 5[Нажать Enter] |
№234
Расширенная память (англ. expanded memory) — аппаратно-программная система, предоставляющая доступ DOS-приложениям к памяти, недоступной через адресное пространство основной памяти. Расширенная память адресуется странично через «окно», находящееся в верхней зарезервированной области памяти (UMA).
………………………………………………..
№235
Для начала разберемся с правилами набора команд debug.exe:
В debug.exe не различается регистр букв.
Пробелы в командах используется только для разделения параметров.
Вводимые числа должны быть в шестнадцатеричной системе счисления, причем без завершающей буквы h.
Сегмент и смещение записываются с использованием двоеточия, в формате сегмент:смещение, например, CS:3C1 (смещение 3C1h в сегменте кода) или 40:17 (смещение 17h в сегменте, адрес начала которого - 40[0]h).
Регистры CS, DS, ES, SS в этот момент инициализированы адресом 256-байтного префикса сегмента програмы, а рабочая области в памяти будет начинаться с адреса этого префикса + 100h. Команды debug.exe вводятся сразу после приглашения на месте, которое отмечено курсором. Каждая команда состоит из идентификатора и параметров, идентификатор состоит из одной буквы. Краткая таблица всех команд debug.exe
Команда |
Описание |
Формат |
A (Assemble) |
Транслирование команд ассемблера в машинный код; адрес по умолчанию - CS:0100h. |
A [<адрес_начала_кода>] |
C (Compare) |
Сравнение содержимого двух областей памяти; по умолчанию используется DS. В команде указывается либо длина участков, либо диапазон адресов. |
C <начальный_адрес_1> L<длина> <начальный_адрес_2> C <начальный_адрес_1> <конечный_адрес_1> <начальный_адрес_2> |
D (Display/Dump) |
Вывод содержимого области памяти в шестнадцатеричном и ASCII-форматах. По умолчанию используется DS; можно указывать длину или диапазон. |
D [<начальный_адрес> [L<длина>]] D [начальный_адрес конечный_адрес] |
E (Enter) |
Ввод в память данные или инструкции машинного кода; по умолчанию используется DS. |
E [<адрес> [<инструкции/данные>]] |
F (Fill) |
Заполнение области памяти данными из списка; по умолчанию используется DS. Использовать можно как длину, так и диапазон. |
F <начальный_адрес_1> L<длина> '<данные>' F <начальный_адрес> <конечный_адрес> '<данные>' |
G (Go) |
Выполнение отлаженной программы на машинном языке до указанной точки останова; по умолчанию используется CS. При этом убедитесь, что IP содержит корректный адрес. |
G [=<начальный_адрес>] <адрес_останова> [<адрес_останова> ...] |
H (Hexadecimal) |
Вычисление суммы и разности двух шестнадцатеричных величин. |
H <величина_1> <величина_2> |
I (Input) |
Считывание и вывод одного байта из порта. |
I <адрес_порта> |
L (Load) |
Загрузка файла или данных из секторов диска в память; по умолчанию - CS:100h. Файл можно указать с помощью команды N или аргумента при запуске debug.exe. |
L [<адрес_в_памяти_для_загрузки>] L [<адрес_в_памяти_для_загрузки> [<номер_диска> <начальный_сектор> <количество_секторов>]] |
M (Move) |
Копирование содержимого ячеек памяти; по умолчанию используется DS. Можно указывать как длину, так и диапазон. |
M <начальный_адрес> L<длина> <адрес_назначения> M <начальный_адрес> <конечный_адрес> <адрес_назначения> |
N (Name) |
Указание имени файла для команд L и W. |
N <имя_файла> |
O (Output) |
Отсылка байта в порт. |
O <адрес_порта> <байт> |
P (Proceed) |
Выполнение инструкций CALL, LOOP, INT или повторяемой строковой инструкции с префиксами REPnn, переходя к следующей инструкции. |
P [=<адрес_начала>] [<количество_инструкций>] |
Q (Quit) |
Завершение работы debug.exe. |
Q |
R (Register) |
Вывод содержимого регистров и следующей инструкции. |
R <имя_регистра> |
S (Search) |
Поиск в памяти символов из списка; по умолчанию используется DS. Можно указывать как длину, так и диапазон. |
S <начальный_адрес> L<длина> '<данные>' S <начальный_адрес> <конечный_адрес> '<данные>' |
T (Trace) |
Пошаговое выполнение программы. Как и в команде P, по умолчанию используется пара CS:IP. Замечу, что для выполнения прерываний лучше пользоваться командой P. |
T [=<адрес_начала>] [<количество_выполняемых_команд>] |
U (Unassemble) |
Дизассемблирование машинного кода; по умолчанию используется пара CS:IP. К сожалению, debug.exe некорректно дизассемблирует специфические команды процессоров80286+, хотя они все равно выполняются корректно. |
U [<начальный_адрес>] U [<начальный_адрес конечный_адрес>] |
W (Write) |
Запись файла из debug.exe; необходимо обязательно задать имя файла командой N, если он не был загружен. А программы записываются только в виде файлов .COM! |
W [<адрес> [<номер_диска> <начальный_сектор> <количество_секторов>]] |
Примечание. Символами [] отмечены необязательные параметры.
