Читайте также: |
|
Отладчик 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 PO C
1DC3:0100 DBE1 FDISI
Просмотр памяти в кодах ассемблера:
-u 0100,0111
1DF5:0100 E9C205 JMP 06C5
1DF5:0103 0000 ADD [BX+SI],AL
1DF5:0105 0000 ADD [BX+SI],AL
1DF5:0107 43 INC BX
1DF5:0108 4F DEC DI
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 4F DEC DI
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 PO NC
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],AL
1DF5:0107 43 INC BX
1DF5:0108 4F DEC DI
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 PO NC
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 PO NC
1DF5:012A 7420 JZ 014C
-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 PO NC
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 PO NC
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 PO NC
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
1DC3:0110 NOP
1DC3:0111 RET
1DC3:0112
-U 100,111
1DC3:0100 B82301 MOV AX,0123
1DC3:0103 052500 ADD AX,0025
1DC3:0106 8BD8 MOV BX,AX
1DC3:0108 01C3 ADD BX,AX
1DC3:010A 89D9 MOV CX,BX
1DC3:010C 29C1 SUB CX,AX
1DC3:010E 29C0 SUB AX,AX
1DC3:0110 90 NOP
1DC3:0111 C3 RET
-R IP
IP 0108
:100
Команда R IP позволяет изменить регистр IP и в данном случае установить указатель команды в начало программы.
-R
AX=0148 BX=0148 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 PE NC
1DC3:0100 B82301 MOV AX,0123
-T
AX=0123 BX=0148 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 PE NC
1DC3:0103 052500 ADD AX,0025
В предыдущем примере использовались непосредственные данные,описанные непосредственно в первых двух командах (MOV и ADD).Теперь рассмотрим аналогичный пример,в котором значения 0123 и 0025 определены в полях сегмента данных.Данный пример позволяет понять,как компьютер обеспечивает доступ к данным посредством регистра DS и адресного смещения
Сегмент данных:
¦ Адрес в DS ¦ Значение ¦ Номер байта ¦
+-----------------+----------------+--------------------+
¦ 0000 ¦ 23 01 ¦ 0 1 ¦
¦ 0002 ¦ 25 00 ¦ 2 3 ¦
¦ 0004 ¦ 00 00 ¦ 4 5 ¦
¦ 0006 ¦ 2A 2A 2A ¦ 6 7 и 8 ¦
Программа в машинных кодах:
A1 00 00 Переслать слово (2 байта), начинающееся в DS по адресу 00 в регистре AX.
03060200 Прибавить содержимое слова, начин. в DS по адресу 0002 к регистру AX.
A30400 Переслать содержимое регистра AX в слово начинающееся в DS по адресу 0004.
CB Вернуться в DOS.
Ввод данных в сегмент данных:
-E DS:00 23 01 25 00 00 00
-E DS:06 2A 2A 2A
Для ввода программы на машинном языке надо ввести следующие команды,включая пробелы:
-E CS:100 A1 00 00 03 06 02 00
-E CS:107 A3 04 00 CB
Просмотр сегмента данных:
-D DS:00
1DC3:0000 23 01 25 00 00 00 2A 2A-2A F0 4F 03 4E 17 8A 03.
1DC3:0010 4E 17 17 03 4E 17 57 15-01 01 01 00 02 FF FF FF..
1DC3:0020 FF FF FF FF FF FF FF FF-FF FF FF FF 1C 17 4E 01.
1DC3:0030 53 1B 14 00 18 00 C3 1D-FF FF FF FF 00 00 00 00
1DC3:0040 07 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
1DC3:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20.
1DC3:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20
1DC3:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00.
Просмотр сегмента кода:
-D CS:100
1DC3:0100 A1 00 00 03 06 02 00 A3-04 00 CB D9 29 C1 29 C0.
1DC3:0110 90 C3 D6 E0 5C 74 12 80-BF D6 E0 3A 34 00 B2 1D
1DC3:0120 D7 E0 5C 43 83 06 D1 DF-01 C7 06 CB DF D7 E0 01
1DC3:0130 1E CB DF 80 3E CF DF 00-75 0D C7 87 D7 E0 2A 2E
1DC3:0140 43 43 83 06 D1 DF 02 C7-87 D7 E0 2A 00 83 06 D1 CC
1DC3:0150 DF 01 5B C3 57 8B 3E CD-DF AC AA 0A C0 75 FA 5F
1DC3:0160 C3 57 8B 3E CB DF EB F1-53 A1 D1 DF BB DB E1 03
1DC3:0170 D8 80 7F FF 5C 74 04 C6-07 5C 43 89 1E CD DF 5B
Просмотр регистров и текущей команды:
-R
AX=0123 BX=0148 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 PE C
1DC3:0103 03060200 ADD AX,[0002] DS:0002=
Трассировка -выполнение одной команды:
-T
AX=0148 BX=0148 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=0107 NV UP EI PL NZ NA PE C
1DC3:0107 A30400 MOV [0004],AX DS:0004=
-T
AX=0148 BX=0148 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=010A NV UP EI PL NZ NA PE C
1DC3:010A CB RETF
Возврат на начало программы:
-R IP
IP 010A
:100
Просмотр регистров и текущей команды:
-R
AX=0148 BX=0148 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 PE C
1DC3:0100 A10000 MOV AX,[0000] DS:0000=0123
Трассировка до конца программы с выполнением команды RET:
-T
AX=0123 BX=0148 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 PE C
1DC3:0103 03060200 ADD AX,[0002] DS:0002=0025
-T
AX=0148 BX=0148 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=0107 NV UP EI PL NZ NA PE C
1DC3:0107 A30400 MOV [0004],AX DS:0004=0148
-T
AX=0148 BX=0148 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=010A NV UP EI PL NZ NA PE C
1DC3:010A CB RETF
-T
AX=0148 BX=0148 CX=0000 DX=0000 SP=FFF2 BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=0D75 IP=0000 NV UP EI PL NZ NA PE NC
0D75:0000 005926 ADD [BX+DI+26],BL DS:016E=E1
Для возврата на начало программы необходимо восстановить два регистра IP и CS:
-R IP
IP 0000
:100
-R CS
CS 0D75
:1DC3
Просмотр регистров и текущей команды:
-R
AX=0148 BX=0148 CX=0000 DX=0000 SP=FFF2 BP=0000 SI=0000 DI=0000
DS=1DC3 ES=1DC3 SS=1DC3 CS=1DC3 IP=0100 NV UP EI PL NZ NA PE C
1DC3:0100 A10000 MOV AX,[0000] DS:0000=0123
последняя команда доказывает что мы перешли на начало программы.
Для создания COM файла необходимо:
· ввести имя файла
-N B.COM
· задать размер файла в байтах
-R CX
CX 0000
:6
· команда -создать файл
-W
Запись: 1480006 байт
Дата добавления: 2015-11-14; просмотров: 40 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ЧТО НЕОБХОДИМО ИМЕТЬ, ЧТОБЫ УСПЕШНО ЗАРЕГИСТРИРОВАТЬСЯ В SHIPITO | | | ОТЧЕТ О ПЕШЕМ ПОХОДЕ НА ВЫСШУЮ ТОЧКУ БЕШЕНКОВИЧСКОГО РАЙОНА ВИТЕБСКОЙ ОБЛАСТИ |