Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
212-235.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
179.35 Кб
Скачать

Запуск отладчика

Программа вызывается через командную строку:

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).

Регистры CSDSESSS в этот момент инициализированы адресом 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)

Выполнение инструкций CALLLOOPINT или повторяемой строковой инструкции с префиксами 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 [<адрес> [<номер_диска> <начальный_сектор> <количество_секторов>]]

Примечание. Символами [] отмечены необязательные параметры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]