ОТЛАДЧИК DEBUG
Отладчик DEBUG используется для работы с программой написанной на ассемблере или в машинных кодах.
Команды отладчика:
-D - вывод участка памяти или иначе называют дамп памяти - это участок в 128 байт
пример: -D DS:00
-D 40:13
в первом случае выдастся участок памяти сегмента данных начиная с относительного адреса 00; во втором случае выдастся дамп памяти начиная с адреса 413.
-E -ввод данных в память в шестнадцатеричном коде начиная с определенного адреса
пример: -E DS:00 90 56 CD 78 45 09
в этом случае вводятся данные 90 56 CD 78 45 09 в сегмент данных начиная с 00 относительного адреса
-R - просмотр содержимого всех регистров и текущей команды с помощью этой команды можно изменить содержимое регистров
пример: -R IP
в этом случае выдается значение регистра IP и можно ввести новое значение этого регистра
-T - трассировка или пошаговое выполнение программы
-U -представить т.е .распечатать какую-то область памяти в кодах ассемблера
пример: -U 100,120
представление области памяти текущего сегмента кодов с 100 - 8 - по 120 смещение в кодах ассемблера
-A -исправление программы кодами ассемблера
пример: -A 120
исправление программы представленной в памяти начиная с относительного адреса 120
-N -задание имени COM файла
пример: -N имя.COM
-W -создание файла с расширением COM
-Q -выход из DEBUG'a
Вызов отладчика:
C:\SYS\VC>debug
Пример: Для проверки размера доступной для работы памяти необходимо просмотреть значение ,находящееся в памяти в ячейках 413Н и 414Н - 400- это адрес сегмента, который записывается как 40 (последний нуль подразумевается) и - 13-это смещение от начала сегмента. Таким образом, можно ввести следующий запрос:
-d 40:13
Просмотр всех регистров:
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=0100 NV UP EI PL NZ NA
1DC3:0100 DBE1 FDISI
Просмотр памяти в кодах ассемблера:
-u 0100,0111
1DF5:0100 E9C205 JMP 06C5
1DF5:0103 0000 ADD [BX+SI],
1DF5:0105 0000 ADD [BX+SI],
1DF5:0107 43 INC BX
1DF5:0108
1DF5:0109 4D DEC BP
1DF5:010A 4D DEC BP
1DF5:010B 41 INC CX
1DF5:010C 4E DEC SI
1DF5:010D 44 INC SP
1DF5:010E 2E CS:
1DF5:010F 43 INC BX
1DF5:0110
1DF5:0111 4D DEC BP
-r
AX=0000 BX=0000 CX=FE04 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1DF5 ES=1DF5 SS=1DF5 CS=1DF5 IP=0100 NV UP EI PL NZ NA
1DF5:0100 E9C205 JMP 06C5
Изменение программы в памяти:
-a 0100
1DF5:0100 JMP 0121
1DF5:0102
Просмотр:
-U 0100,0111
1DF5:0100 EB1F JMP 0121
1DF5:0102 050000 ADD AX,0000
1DF5:0105 0000 ADD [BX+SI],
1DF5:0107 43 INC BX
1DF5:0108
1DF5:0109 4D DEC BP
Выполнение программы (трассировка):
-T
AX=0000 BX=0000 CX=FE04 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1DF5 ES=1DF5 SS=1DF5 CS=1DF5 IP=0127 NV UP EI PL NZ NA
1DF5:0127 206E6F AND [BP+6F],CH SS:006F=20
-T
AX=0000 BX=0000 CX=FE04 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1DF5 ES=1DF5 SS=1DF5 CS=1DF5 IP=012A NV UP EI PL NZ NA
1DF5:012A 7420 JZ
-T
AX=0000 BX=0000 CX=FE04 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1DF5 ES=1DF5 SS=1DF5 CS=1DF5 IP=012C NV UP EI PL NZ NA
1DF5:012C 65 DB 65
Ниже приведена простая программа на машинном языке :
B82301 Переслать значение 0123H в AX
052500 Прибавить значение 0025H в AX
8BD8 Переслать содержимое AX в BX
03D8 Прибавить содержимое AX к BX
8BCB Переслать содержимое BX в CX
2BC8 Вычесть AX из AX (чистка AX)
90 Нет операции
CB Возврат в DOS
Команды имеют различную длину : один, два или три байта. Машинные команды находятся в памяти непосредственно друг за другом. Выполнение программы начинается с первой команды ,и далее последовательно выполняются остальные.
Для печати протокола CTRL + PRT SC
Для непосредственного ввода программы на машинном языке надо ввести следующую команду, включая пробелы:
-E CS:100 B8 23 01 05 25 00
-E CS:106 8B D8 03 D8 8B CB
-E CS:10C 2B C8 2B C8 90 CB
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=0100 NV UP EI PL NZ NA
1DC3:0100 B82301 MOV AX,0123
-T
AX=0123 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=0103 NV UP EI PL NZ NA
1DC3:0103 052500 ADD AX,0025
-T
AX=0148 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=0106 NV UP EI PL NZ NA PE NC
1DC3:0106 8BD8 MOV BX,AX
-T
-U 100,107
1DC3:0100 B82301 MOV AX,0123
1DC3:0103 052500 ADD AX,0025
1DC3:0106 8BD8 MOV BX,AX
-A 108
1DC3:0108 ADD BX,AX
1DC3:010A MOV CX,BX
1DC3:010C SUB CX,AX
1DC3:010E SUB AX,AX