Debug: h (hexadecimal)

Выполнение шестнадцатеричных арифметических операций над двумя заданными числами.

Синтаксис

hчисло1 число2

Параметры

число1

Обязательный параметр. Первое шестнадцатеричное число в диапазоне от 0 до FFFFh.

число2

Обязательный параметр. Второе шестнадцатеричное число в диапазоне от 0 до FFFFh.

?

Вывод списка подкоманд debug.

Заметки

  • В программе Debug.exe два введенных числа складываются, а затем вычисляется их разность. Результаты вычислений выводятся в одной строке — вначале сумма, затем разность.

Примеры

Введите следующую команду:

H19f 10a

Результаты вычислений Debug.exe будут выведены в виде:

02A9 0095

Debug: i (input)

Считывание и вывод на экран одного байта из указанного порта ввода.

Синтаксис

i порт

Параметры

порт

Обязательный параметр. Задание порта ввода адресом. Адрес может быть 16-битным значением.

?

Вывод списка подкоманд debug.

Примеры

Введите следующую команду:

I2f8

Если находящаяся в порту величина равна 42h, Debug.exe считает ее и выведет в следующем виде:

Debug: l (load)

Загрузка файла или содержимого сектора диска в память. Выполненная без параметров подкоманда l загружает файл, указанный в командной строке программы debug, в память, начиная с адреса CS:100. В регистрах BX и CX указывается количество загруженных байт. Если имя файла не было задано в командной строке debug, используется файл, ранее заданный при вызове последней подкоманды n.

Синтаксис

l[адрес]

l [адрес] [диск] [первый_сектор] [число]

Параметры

адрес

Задание адреса области памяти, в которую требуется загрузить содержимое файла или сектора. Если параметр адрес не задан, используется текущий адрес в регистре CS.

диск

Задание накопителя, содержащего диск, с которого считываются определенные сектора. Данный параметр задается числом: 0 = A, 1 = B, 2 = C и т. д.

первый_сектор

Задание шестнадцатеричного номера первого сектора, содержимое которого требуется загрузить.

число

Задание шестнадцатеричного числа последовательных секторов, содержимое которых требуется загрузить. Параметры диск, первый_сектор и число используются только в том случае, когда необходимо загрузить содержимое определенных секторов, а не файл, указанный в командной строке debug или в последней подкоманде n (name).

?

Вывод списка подкоманд debug.

Заметки

  • Для загрузки задаваемого регистрами BX:CX числа байтов из файла на диске используется следующий Синтаксис:

l[адрес]

  • Для пропуска файловой системы и прямой загрузки указанных секторов используется следующий Синтаксис:

l [адрес] [диск] [первый_сектор] [число]

  • Задание правильных записей адреса

Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a, g, l, t, u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. All numeric values are in hexadecimal format. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

CS:0100

BA:0100

  • Использование параметра адрес

При вызове подкоманды l с указанием параметра адрес Debug.exe загрузит файл или содержимое сектора диска в область памяти, начиная с адреса.

  • Использование всех параметров

При вызове подкоманды l со всеми параметрами Debug.exe загружает содержимое сектора диска, а не файла.

  • Загрузка содержимого сектора диска

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

  • Загрузка файла .exe

Для файлов с расширением .exe параметр адрес игнорируется. В этом случае Debug.exe использует загрузочный адрес, задаваемый в заголовке .exe файла. При загрузке заголовок отделяется от самого .exe файла, загружаемого в память, поэтому размер файла, указанный в заголовке, и фактически занимаемый размер в памяти будут различаться. Для просмотра .exe файла целиком он может быть переименован в файл с другим расширением и затем просмотрен в программе Debug.

  • Загрузка файлов .hex

В программе Debug.exe файлы с расширением .hex распознаются как файлы в шестнадцатеричном формате. Подкоманду l можно запустить без параметров для загрузки такого шестнадцатеричного файла, начиная с адреса, указанного в данном файле. Если подкоманда l запущена с параметром адрес, начальная точка загрузки определяется как сумма заданного адреса и адреса, содержащегося в шестнадцатеричном файле.

Примеры

В командной строке введите:

Debug

Введите следующую команду:

Nfile.com

Чтобы загрузить файл File.com, введите следующую команду:

l

Debug.exe загружает этот файл и выводит приглашение debug.

Чтобы загрузить содержимое 109 (6Dh) секторов диска C, начиная с логического сектора 15 (0Fh), в область памяти, начиная с адреса 04BA:0100, введите следующую команду:

L04ba:100 2 0f 6d

Debug: m (move)

Копирование содержимого одного блока памяти в другой.

Синтаксис

m диапазон адрес

Параметры

диапазон

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

адрес

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

?

Вывод списка подкоманд debug.

Примечания

  • Задание правильных записей диапазона

Параметр диапазон используется в подкомандах debug для задания диапазона памяти. Параметр диапазон можно задать в одном из следующих форматов: начальный адрес и конечный адрес или начальный адрес и длина (обозначаемая l) диапазона. Например, оба следующих выражения задают диапазон из 16 байтов, начинающийся с адреса CS:100:

Cs:100 10f

Cs:100 l 10

  • Задание правильных записей адреса

Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a, g, l, t, u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

CS:0100

BA:0100

  • Копирование данных

Если адреса в копируемом блоке памяти заданы так, что в этот блок не записываются новые данные, то информация в этом блоке не изменяется. Если же операция копирования является перекрывающей, перекрывающиеся данные перезаписываются. (Операция копирования является перекрывающей, если два блока памяти имеют общую часть).

  • Перекрывающееся копирование двух областей памяти

Подкоманда m выполняет перекрывающее копирование без потери данных в области назначения. Содержимое адресов, которые будут перезаписаны, копируется в первую очередь. Если данные копируются из старших адресов в младшие адреса, операция копирования начинается с младшего адреса исходного блока и продолжается в направлении старшего адреса. И наоборот, если данные копируются из младших адресов в старшие, копирование начинается со старших адресов исходного блока и продолжается в направлении младшего адреса.

Примеры

Чтобы скопировать содержимое адресов с CS:110 по CS:510, а затем с CS:10F по CS:50F и так далее, пока все содержимое адресов с CS:100 по CS:500 не будет скопировано, введите следующую команду:

Mcs:100 110 cs:500

Чтобы просмотреть результаты, воспользуйтесь подкомандой d (dump), указав адреса, заданные в подкоманде m.

Debug: n (name)

Задание имени исполняемого файла для команд debug l (load) или w (write) или задание параметров для отлаживаемого исполняемого файла. Выполненная без параметров подкоманда nочищает текущие значения.

Синтаксис

n[путь][исполняемый_файл]

n [Параметры_файла]

Параметры

[путь][исполняемый_файл

Задание расположения и имени исполняемого файла для тестирования.

[Параметры_файла]

Задание параметров и ключей командной строки для тестируемого исполняемого файла.

?

Вывод списка подкоманд debug.

Примечания

  • Использование подкоманды n

Подкоманду n можно использовать двумя способами. Во-первых, для задания имени файла для последующих подкоманд l (load) или w (write). Если программа Debug.exe вызвана без задания имени файла для отладки, команда n имя_файла должна быть вызвана перед использованием команды l для загрузки файла. Имя файла форматируется соответствующим образом для контрольного блока файла (FCB) по адресу CS:5C. Во-вторых, подкоманда n может использоваться для задания параметров и ключей командной строки отлаживаемого файла.

  • Области памяти

В следующей таблице перечислены четыре области памяти, которые используются командой n.

Область памяти Contents
CS:5C Блок управления файлом (FCB) для файла 1
CS:6C Блок управления файлом (FCB) для файла 2
CS:80 Длина строки команды n (в символах)
CS:81 Начало строки команды n

Первое имя файла, задаваемое командой n, размещается в блоке управления файлом по адресу CS:5C. Если задано второе имя, оно помещается в блок управления файлом по адресу CS:6C. Количество символов в командной строке команды n (кроме первого символа, n) сохраняется по адресу CS:80. Собственно командная строка n (снова без символа n) сохраняется, начиная с адреса CS:81. Эти символы могут быть любыми параметрами и разделителями, которые допустимо вводить с командной строки в Windows 2000.

Примеры

В этом примере запускается команда debug и загружается программа Prog.com для отладки. Чтобы указать два параметра для программы Prog.com и запустить эту программу, введите следующую команду:

debug prog.com
nparam1 param2
g

В этом случае подкоманда g (go) запускает программу так, как если бы она была запущена с командной строки в виде:

Prog param1 param2

При тестировании и отладке создается среда времени исполнения для программы Prog.com.

В следующей последовательности команд первая подкоманда n задает имя файла File1.exe для последующей подкоманды l (load), которая загружает файл File1.exe в память. Вторая подкомандаn задает Параметры для файла File1.exe. Наконец, подкоманда g запускает File1.exe так, как если бы с командной строки было бы введено File1 File2.dat File2.dat.

nfile1.exe
l
nfile2.dat file3.dat
g

После команды l во втором экземпляре команда n не используется. Если подкоманда w (write) используется во втором экземпляре подкоманды n, файл File1.exe (т. е. отлаживаемый) сохраняется под именем File2.dat. Чтобы этого не произошло, всегда вызывайте команду l или w сразу же после команды n в первой форме.

Debug: o (output)

Вывод байта в порт вывода.

Синтаксис

oпорт байт

Параметры

порт

Обязательный параметр. Задание адреса порта вывода. Адрес порта может быть 16-битным значением.

байт

Обязательный параметр. Задание значения байта, выводимого в порт.

?

Вывод списка подкоманд debug.

Примеры

Чтобы отправить байт 4Fh в порт вывода по адресу 2F8h, введите следующую команду:

O2f8 4f

Debug: p (proceed)

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

Синтаксис

p [=адрес] [число]

Параметры

адрес

Задание адреса инструкции, которая будет выполнена первой. Если адрес не указан, по умолчанию выполнение начнется с инструкции, задаваемой регистрами CS:IP.

число

Задание количества инструкций, которые будут выполнены перед возвратом управления программе Debug.exe. По умолчанию используется значение 1.

?

Вывод списка подкоманд debug.

Примечания

  • Задание правильных записей адреса

Адрес состоит из двух частей: первая содержит буквенное обозначение сегментного регистра или адрес сегмента из четырех цифр, а вторая содержит значение смещения. Адрес сегмента или сегментный регистр могут быть пропущены. По умолчанию для подкоманд a, g, l, t, u и w команды debug адрес сегмента содержится в регистре CS. Для других подкоманд по умолчанию используется сегмент DS. Все числовые значения при этом представлены в шестнадцатеричном формате. Между именем сегмента и значением смещения следует вставлять двоеточие. Следующие адреса являются допустимыми:

CS:0100

BA:0100

  • Использование параметра адрес

Если в параметре адрес не указан сегмент, Debug.exe использует регистр CS тестируемой программы. Если параметр адрес опущен, выполнение программы начинается с адреса, указываемого регистрами CS:IP. Чтобы отличить параметр адрес от параметра число, перед адресом обязательно должен быть введен знак равенства (=). В случае если инструкция по заданному адресу не является циклом, строковой инструкцией, программным прерыванием или процедурой, подкоманда p работает также, как подкоманда t (trace).

  • Передача управления тестируемой программе

Если в программе Debug.exe управление передано тестируемой программе с помощью команды p, выполнение продолжается до тех пор, пока цикл, строковая инструкция, программное прерывание или процедура не будут закончены или пока не будет выполнено заданное количество инструкций. Затем управление возвращается к Debug.exe.

  • Просмотр сообщений

После запуска подкоманды p Debug.exe выводит на экран содержимое регистров, флаги состояния и следующую инструкцию в деассемблированном виде.

Предупреждение!

    • Подкоманда p не может быть использована для отладки инструкций, содержащихся в ПЗУ.

Примеры

В этом примере тестируемая программа содержит инструкцию call по адресу CS:143F. Чтобы выполнить процедуру, указанную в call, и возвратиться в программу Debug.exe, введите следующую команду:

p=143f

Результаты программы Debug.exe будут выведены в следующем формате:

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
2246:1442 7505 JNZ 144A

Debug: q (quit)

Окончание работы программы Debug.exe без сохранения тестируемого файла и возврат в командную строку.

Синтаксис

q

Параметры

?

Вывод списка подкоманд debug.

Debug: r (register)

Редактирование содержимого одного или нескольких регистров ЦПУ. Выполненная без параметров команда r выводит содержимое всех регистров и флагов из временного хранилище регистра, состояния всех всех флагов и декодированную инструкцию в текущей области.

Синтаксис

r [регистр]

Параметры

регистр

Задание имени регистра, содержащего сведения, которые требуется вывести на экран.

?

Вывод списка подкоманд debug.

Примечания

  • Использование подкоманды r

Если задан регистр, Debug.exe выводит на экран его 16-разрядное значение в шестнадцатеричном формате и двоеточие в качестве приглашения. Если требуется изменить значение содержащееся в регистре, введите новое значение и нажмите клавишу ENTER. В противном случае нажмите клавишу ENTER для возврата к приглашению программы debug.

  • Допустимые регистры x86

В следующей таблице перечислены допустимые регистры x86 для параметра регистр.

Значение
ax
bp
bx
cs
cx
di
ds
dx
es
f
ip
pc
si
sp
ss

Если задан недопустимый регистр, выводится следующее сообщение:

Ошибка: br

  • Использование f вместо регистра

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

Флаг Установлен Снят
Переполнение ov nv
Направление dn (уменьшение) up (увеличение)
Прерывание ei (включено) di (выключено)
Знак ng (отрицательный) pl (положительный)
Ноль zr nz
Добавочный перенос ac na
Четность pe (четный) po (нечетный)
Перенос cy nc

Новые значения флагов могут быть введены в любой последовательности. Между этими значениями не нужно вводить пробел. Чтобы завершить выполнение подкоманды r, нажмите клавишу ENTER. Флаги, новые значения для которых не вводились, останутся неизмененными.

  • Сообщения подкоманды r

При задании более одного значения для флага выводится следующее сообщение:

Ошибка: df

При вводе кода, не содержащегося в таблице, выводится следующее сообщение:

Ошибка: bf

В обоих случаях Debug.exe пропустит все значения, следующие после неверного ввода.

  • Значения, используемые по умолчанию в программе Debug.exe

Когда запускается программа Debug.exe, сегментный регистр указывает на нижнюю границу свободной памяти, указатель инструкций устанавливается равным 0100h, все флаги состояния очищаются, оставшиеся регистры обнуляются, за исключением sp, который устанавливается равным FFEEh.

Примеры

Если текущее положение указателя инструкций равно CS:11A, выводятся следующие сведения:

AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21

Чтобы просмотреть только состояния флагов, введите следующую команду:

rf

Результаты программы Debug.exe выводятся в следующем формате:

NV UP DI NG NZ AC PE NC - _

Введите одно и несколько допустимых значений флагов с пробелами или без них. Например:

Наши рекомендации