Краткие сведения об отладчиках программ

 

Для отладки программ написанных на Ассемблере, обычно используют один из двух отладчиков: DEBUG фирмы BORLAND или Code View фирмы Microsoft. Они обеспечивают интерактивную отладку программ в формате .ЕХЕ- и .СОМ-файлов. Обычно они используется для отладки исполняемых программ, получен­ных с языка уровня ассемблера. Они позволяют ассемблировать и исполняемые фай­лы .ЕХЕ и .СОМ, скомпилированные с языков более высокого уровня.

DEBUG и Code View позволяют:

▪ прослеживать выполнение и управлять выполнением программ;

▪ вносить изменения в отлаживаемую программу;

▪ вводить небольшие программы на языке ассемблера, выполнять ассемблирова­ние этих программ и создавать исполняемые программы с расширением .СОМ;

▪ выполнять преобразование машинных шестнадцатеричных кодов команд в фор­мат языка ассемблера (деассемблирование);

▪ отображать текстовые файлы в ASCII и шестнадцатеричном форматах;

▪ просматривать и изменять содержимое регистров памяти МП и ячеек основ­ной памяти;

▪ загружать информацию с дисковых накопителей в основную память, и наобо­рот (считывать информацию с дисков и записывать на них);

▪ осуществлять поиск конкретных данных в текстах сообщений и программ (с вы­дачей адреса их хранения);

▪ просматривать регистр флагов с отображением мнемокодов значений этих фла­гов (таблица 8.1)

 

 

Таблица 8.1.Мнемокоды значений флагов

Флаг   Имя флага   Установлен   Сброшен  
OF   Переполнение (да/нет)   OV   NV  
DF   Направление (уменьш./увелич.)   DN   UP  
IF   Прерывания (вкл./откл.)   EI   DI  
SF   Знак (отриц./полож.)   NG   PL  
ZF   Нуль (да/нет)   ZR   NZ  
AF   Вспомогательный перенос (да/нет)   АС   NA  
PF   Четность (четн./нечетн.)   РЕ   PO  
CF   Перенос (да/нет)   SY   NC  

 

8.1 Основные команды отладчика DEBUG

 

Для вызова отладчика DEBUG следует набрать debug или DB и, если необходимо, имена файлов, с которыми мы будем работать, например debug prog.exe. Приглашение к вводу команд — -. После завершения работы с DEBUG для выхода из него сле­дует набрать q. После набора каждой команды следует нажимать Enter.

Отладчик DEBUG выполняет команды:

▪ N (name) — объявление имени файла.

▪ R m (register) — отображение на экране дисплея содержимого регистра памяти МП с именем m. Если m не указано, отображается содержимое всех регистров памяти МП, вектор-адрес следующей команды (CS:IP), машинный и мнемоко­ды этой команды; например:

-R

АХ=0005 ВХ=0005 СХ=0000 DX=0001 SP=FFEE ВР=0000 SI=0000 DI=0000 DS=1A8E ES=1A8E SS=1A8E CS=1A8E IP=010A NV UP EI PL NZ NA PO NC 1A8E:010A B81500 MOV AX,0015 ;

Если выводится содержимое одного регистра, то команда R позволяет изменить его содержимое:

-R ах

АХ 0005

:45

-R ах

АХ 0045

▪ A n (assembler) — прием команд ассемблера с клавиатуры и преобразование их в машинные коды, n — начальный вектор-адрес машинных команд.

Пример ввода программы:

-А 100

1А8Е:0100 mov ax,15 1А8Е:0103 mov bx,5 1А8Е:0106 add ax,bx 1А8Е:0108 div bx 1A8E:010A

▪ U nl,n2 L1 (unassembler) — преобразование машинных кодов команд в команды на языке ассемблера и отображение их на экране дисплея, nl — вектор-адрес 1 -и, а п2 — смещение последней из машинных команд, подлежащих деассемблиро-ванию, 1 — длина программы (может указываться либо п2, либо L1). Пример деассемблирования программы:

-U100 1а

1А8Е:0100 В81500 MOV АХ,0015

1A8E:0103 BB0500 MOV BX.0005

А8Е:0106 01D8 ADD AX.BX

1А8Е:0108 F7F3 DIV ВХ

▪ Т k (trassing) — выполнение очередных k команд программы. Если k не указано, то выполняется одна команда (пошаговое выполнение программы). Команды обращения к процедурам и внутренние прерывания командой Т не выполняют­ся, так как по Т будут последовательно выполняться команды процедуры и ко­манды обработки прерывания соответственно. В этих случаях следует исполь­зовать команду процедурной трассировки Р (procedure), почти аналогичную команде Т, но позволяющую автоматически полностью выполнять встречаю­щиеся при трассировке процедуры, или команду G п. После выполнения ко­манд (команды) на дисплей выводится:

- содержимое всех регистров памяти МП в шестнадцатеричном коде (значения флагов регистра FL выводятся в мнемокоде (см. табл. 9.2);

- вектор-адрес (CS: IP);

- машинный и мнемокоды текущей команды.

▪ G n (go) — выполнение .EXE- или .СОМ-программы до команды с вектор-адре­сом п, при отсутствии n программа выполняется до конца.

После выполнения команд (команды) на дисплей выводится:

- содержимое всех регистров памяти МП в шестнадцатеричном коде (значения);

- флаги регистра FL в мнемокоде

- вектор-адрес (CS: IP), машинный и мнемокоды текущей команды. После выполнения программы получим:

-G 10а

AX-0005 BX-0005 CX-0000 DX-0001 SP-FFEE BP-0000 SI-0000 DI-0000 DS=1A8E ES=1A8E SS-1A8E CS-1A8E IP-010A NV UP El PL NZ NA PO NC 1A8E:010A 48 DEC AX

▪ D n,s Ll (dump) — отобразить на экране дисплея содержимое ячеек памяти, начиная с ячейки по вектор-адресу n (по умолчанию n — текущий вектор-ад­рес + 1 и l = 128), то есть, нажав клавиши D и Enter, можно посмотреть следую­щие 128 ячеек:

-D

1D20:0C00 F7 07 01 00 75 12 2Е С7-06 СВ 98 02 00 ЕВ 09 Е8 ....и...........

1D20:0C10 96 00 F8 ЕВ 00 F9 ЕВ ОА-50 ВО 03 В4 FF E8 03 00 ........Р.......

1020:0020 58 F8 СЗ 57 26 8В 7F 04-2Е 89 ЗЕ CF 98 26 88 05 X..W&.....>..&..

1020:0СЗ0 26 88 65 01 50 2Е Al DE-98 26 89 45 02 58 ЗС 01 &.6.Р.. . .&.Е.Х<.

:

1020:0С70 75 ОА 26 89 55 04 26 89-40 06 ЕВ 5А ЗС 02 75 06 &

- если S и L1 не указаны (есть только D n), то осуществляется вывод 128 ячеек памяти, например:

-D 405

1А8Е:0400 69 6С 65-66 69 6С 65 66 69 6С 65 llefileflle 1А8Е:0410 66 69 6С 65 66 69 6С 65-66 69 6С 65 66 69 6С 67

1А8Е:0420 00 44 СО 21 F6 С2 80 74-05 F6 С2 10 75 05 55 86

1А8Е:0430 FD 8С DB 53 81 СЗ 20 00-03 DA 8С СО 8В С2 80

1А8Е:0440 OF 81 04 8В F2 03 Е6 8В-СЕ D1 Е9 4Е 4Е 8В FE .......NN. .+

1А8Е:0450 Е8 2В 08 8Е С5 8Е DB F3-A5 FC 8E DO 07 06 BF +..............

1А8Е:0460 01 33 F6 АО 95 ВА 10 00-ЕВ 2В АО 95 В2 10 ЕВ ......+.....5

1А8Е:0470 АО 95 В2 10 ЕВ 36 АО 95-В2 10 ЕВ 3В АО 95 В2....6.....;....

1А8Е:0480 ЕВ 5D АО 95 В2 .].. .

Содержимое выводится в шестнадцатеричном коде и в соответствующих симво­лах ASCII (символы расширенного стандарта ASCII выводятся в виде точки (.)).

▪ En 'текст1', 'текст2'... (enter) — изменение содержимого ячеек памяти, на­чиная с вектор-адреса n; количество ячеек определяется размером указанных в команде текстов, например, по результатам команды -е 200 'pole', 'файл', 'file' выводится информация:

-d 200 1с

1А8Е:0200 70 6F 6С 65 Е4 АО А9 АВ-66 69 6С 65 pole...file:

При вводе числовой информации (машинных кодов команд) следует набрать Е n, нажать клавишу Enter и после отображенного байта информации и точки вве­сти новую информацию (1 байт), например:

-е 300

1А8Е:0300 73.20

Для ввода последующих байтов следует нажать клавишу Space и выполнить ввод очередного байта.

▪ F n L1 'текст!' (fill) — заполнение блока памяти длиной 1 байт, начиная с век­тор-адреса п, однобайтовыми фрагментами текст!: -f 400 120 'file',

Результат выполнения команды:

d 400 130

1А8Е:0400 66 69 6С 65 66 69 6С 65-66 69 6С 65 66 69 6С 65 1А8Е:0410 66 69 6С 65 66 69 6С 65-66 69 6С 65 66 69 6С 65 1А8Е:0420 00 44 CD 21 F6 С2 80 74-05 F6 С2 10 75 05 Е8 52 .D.! . .

▪ S n L1 "текст" (search) — поиск фрагмента «текст» в поле памяти длиной 1 яче­ек с выдачей вектор-адреса ячейки, хранящей искомый текст: -s 200 ПО 'fi'.

Результат команды: 1А8Е: 0208.

▪ W (write) — запись программы на диск; в регистр СХ должна быть предвари­тельно записана длина программы в байтах, в регистр ВХ — нуль, а командой N задано имя файла (N — имя_файла);

▪ L (load) — загрузка файла с диска в ОП, предварительно следует в регистр ВХ записать нуль, в регистр СХ записать длину файла в байтах и объявить его имя командой N; для стандартно оформленных .СОМ- и .ЕХЕ-программ это же мож­но выполнить, набрав debug имя_файла.

Необходимо помнить что:

• ввод всех числовых данных осуществляется в шестнадцатеричной системе счисления, текстов — в символах ASCII, помещенных в кавычки;

• вектор-адрес содержит: адрес сегмента: адрес смещения;адрес сегмента мо­жет быть задан в явном виде 4-разрядным шестнадцатеричным кодом или указанием соответствующего сегментного регистра; сегмент команд может быть задан по умолчанию; адрес смещения задается в явном виде шестна­дцатеричным кодом. Примеры задания вектор- адреса: 4FC5:10B. 13Сб:1АВВ. DS:0. CS:100:

• при вводе и отображении 2-байтовых слов старший байт размещается пра­вее младшего. Пример: при отображении машинного кода команды

mov ax,0123 на экране получим: В82301 (В8 — машинный код команды ассемблера 'mov ax').








Дата добавления: 2016-01-26; просмотров: 1336;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.