Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Assembler / P02

.pdf
Скачиваний:
64
Добавлен:
02.06.2015
Размер:
397 Кб
Скачать
☆

 

 

11

 

1.2)

E адрес [список]

Enter — ввод

 

Ввод данных по указанному адресу.

 

 

а) E адрес

(список опущен)

 

-e200

1C36:0200 01.02 12. 1B.0

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

Результат:

-d200L3

1C36:0200 02 12 00

Итак, при нажатии пробельной клавиши отладчик выводит очередной байт и запрашивает его изменение, выводя точку. Для перехода к предыдущему бай-

ту нужно ввести дефис (попробуйте!).

Упражнение. С помощью команды E можно просматривать память. По-

смотрите, что будет происходить, если вы подадите команду efff0 и несколь-

ко раз нажмете пробельную клавишу. Перейдете ли Вы границу сегмента? А что произойдет, если вы наберете команду dfff0?

б) E адрес список

e200 02 12 00

Результат тот же, что и в предыдущем примере, но на этот раз замена дан-

ных ведется "вслепую".

Слова приходится заносить в память побайтно. Байты заносятся в обратном порядке. Например, для ввода по адресу (смещению) 120 слова 1234 подаем ко-

манду:

-e120 34 12

Пример ввода строки символов:

-e130 'string for example',D,A,'$'

(0Dh — код возврата каретки, 0Ah — код перевода строки. $ — терминатор

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

1.3) R [имя регистра] Register — регистр а) R (без параметра) — выводятся имена всех регистров и их содержимое.

Последняя строка вывода имеет формат:

адрес

код команды

мнемоника команды [содержимое памяти]

12

1С36:0100 A10002

MOV AX,[0200]

DS:0200=01E4

б) R имя регистра — debug выводит содержимое регистра, а на следую-

щей строке помещает двоеточие — приглашение к вводу нового значения. К

сожалению, можно указывать только 16-разрядные регистры.

-rbx 1107

: 1 (вводим новое содержимое регистра)

<Enter> -rah

br ERROR (недопустимое имя регистра)

в) RF выводит содержимое регистра флагов

NV UP DI NG NZ AC PE NC -

После дефиса можно ввести новые значения флагов: - PLCY (если задано более чем один код значения для флага, появляется сообщение об ошибке df error если задан код значения, отсутствующий в списке — сообщение bf error).

1.4) F область список Fill—заполнение

Если размер области превосходит длину списка, то список используется по-

вторно, пока область не будет заполнена. Остаток списка усекается.

Пример. Перед созданием программы в отладчике полезно заполнить уча-

сток памяти кодом команды nop (90h) (если это не сделать, "мусор" в памяти сбивает с толку начинающего пользователя).

-f100L100 90

 

Упражнение. Выполнить f400L10 1 2 3 и изучить результат.

 

2) Работа с кодами команд.

 

2.1)

A [адрес]

Assemble — ассемблировать

 

Пример работы этой команды мы уже видели. Если в начале сеанса работы

с debug не указывать адрес, то ассемблирование начнется с адреса XXXX:0100.

Отметим, что с использованием мини-ассемблера заполнение памяти дан-

ными осуществить даже проще, чем с помощью команды E:

-a200

1C36:0200 dw ffd0,12,a1c7

13

1C36:0206

-

(В результате [200]=FFD0h, [202]=0012h, [204]=A1C7h.)

-a200

1C36:0200 db "String",D,A,'$'

1C36:0209

 

Здесь использованы директивы dw (Define Word — задать слово) и db

(Define Byte — задать байт).

 

2.2)

U [область]

Unassemble — дисассемблировать

 

Команда переводит коды из области памяти в мнемонику команд.

 

Если перевод невозможен, то выводится ???? или DB число. Если параметр

область опущен, то команда дисассемблирует 20 байт, начиная с текущего зна-

чения IP. Вновь введем U — следующие 20 байт и т.д. (аналогично команде D

без параметров).

 

 

3) Выполнение программы.

 

3.1)

T[=стартовый адрес] [количество повторений]

Trace — трассировка

 

После выполнения каждой команды выводится информация, как при подаче

команды R. Приведем примеры:

 

 

а) t — выполнить одну команду, адрес которой в CS:IP;

 

 

б) t5 — выполнить 5 команд, начиная с текущего адреса;

 

в) t=106 8 — выполнить 8 команд, начиная с адреса CS:106.

3.2)

G[=стартовый адрес] [адрес останова]

Go — прогон

 

а) g — выполнить программу, начиная с адреса, хранящегося в IP. Про-

грамма должна заканчиваться инструкциями завершения (эти инструкции мы изучим позднее — сейчас упоминаем о них только в справочных целях), напри-

мер, INT 20h или MOV AH,4Ch /INT 21h. После выполнения INT 20h debug выводит сообщение:

Program terminated normally (Выполнение программы завершено)

Теперь повторный запуск программы возможен только после выполнения ко-

манды L (см. ниже).

б) g=100 адрес команды nop

14

Мы рекомендуем на начальном этапе обучения завершать учебные про-

граммы, набираемые в debug, командой nop и использовать ее адрес в качестве адреса останова.

4) Работа с файлами и дисками.

4.1)

N имя файла

Name — имя

 

Задание имени файла. Расширение указывать обязательно. Используется

перед следующими двумя командами.

 

4.2)

L [адрес]

Load — загрузка

 

Содержимое файла переписывается в ОЗУ. Файлы с любым расширением

кроме .exe — начиная с указанного адреса (если адрес опущен, то начиная с

CS:0100). Для файлов с расширением .exe адрес игнорируется, используется

стартовый адрес, записанный в самом файле.

 

 

По окончании загрузки в BX:CX содержится размер файла в байтах.

4.3)

W [адрес]

Write — запись

 

Запись файла на диск. Предварительно в BX:CX нужно записать размер

файла. Если адрес не указан, то подразумевается CS:0100.

 

У команд L и W имеются также параметры для работы с секторами диска.

Мы их не рассматриваем.

 

 

5) Сервис.

 

5.1)

H <величина> <величина>

Hex — шестнадцатеричный

 

Встроенный калькулятор. Вычисляет сумму и разность указанных величин:

H a b (a и b — слова) a+b a-b

Примеры: 1) Программа начинается по адресу 0100h и заканчивается по ад-

ресу 012Ah. Определить размер программы.

-h12a ff

0229 002B (Размер программы 2Bh)

2) В байте записано число FEh. Дополнительным кодом какого числа оно явля-

ется? Расширяем знак до размеров слова

-H0 fffe

fffe 0002 (Дополнительный код –2 есть FEh)

5.2) M область-источник адрес_приемника Move — перемещать

S область список

15

Пример. Предположим, мы набрали программу

-a100

11CF:0100 mov ax,1

11CF:0103 add ax,bx

11CF:0105 nop

11CF:0106

и обнаружили, что пропустили команду mov bx,2. Перемещаем часть про-

граммы "подальше". Размер области берем "с запасом".

-m103L20 200

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

-a103

11CF:0103 mov bx,2

11CF:0106

Теперь мы знаем адрес назначения (0106) и перемещаем хвост программы

-m200L20 106

-u100 (проверяем правильность результата) ...

Упражнение. Разработайте последовательность действий, если нужно уда-

лить часть команд программы. О "перекрытии" области-приемника и области-

источника беспокоиться не нужно (проверьте!).

 

5.3) C область1 адрес_области

Compare — сравнение

Выводится таблица в формате

 

адрес1 байт1 байт2 адрес2

 

в том случае, если байт1 не совпадает с байт2.

Упражнение. Придумайте пример. С помощью команды E введите данные в две области памяти (например, две незначительно различающиеся строки) и

сравните содержимое областей с помощью команды C.

5.4) Search — поиск

Список — это список байтов или строка. Debug выдает все адреса байтов или строк, которые совпадают с указанными.

Упражнение. Придумайте примеры. 6) Остальные команды.

6.1) Q

Quit — завершение

16

Осуществляется выход из debug. При этом набранные программы и данные теряются, если они предварительно не были сохранены посредством команды

W.

6.2) ? Выводит на экран алфавитный список команд debug.

3.5. Как получить текст программы, набранной в debug.

После отладки внесения необходимых изменений в команды программы хотелось бы получить файл с текстом программы, чтобы добавить в него ком-

ментарии, распечатать и т.д. Можно рекомендовать следующую последователь-

ность действий.

1) Определяем размер программного кода. Если вся программа состоит из чистого кода, как pr1.com, даем команды

D:\USER\>debug pr1.com

-r

и читаем в регистрах BX:CX шестнадцатеричный размер программы. (В нашем случае 9h).

2) Создадим с помощью любого текстового редактора файл (например, pr1.cmd), содержащий команды отладчика:

U100L9

Q

(последнюю команду Q обязательно завершить нажатием Enter). Вновь запуска-

ем debug.

D:\USER\>debug pr1.com < pr1.cmd > pr1.txt

Входная информация поступает из pr1.cmd, выходная направляется в файл pr1.txt. Для этого используются символы > и < (перенаправление операций ввод-вывода).

Остается подправить содержимое файла pr1.txt в редакторе.

Упражнение. В предыдущей главе мы выясняли, какие флаги состояния бу-

дут выставлены центральным процессором при выполнении сложения слов: 2345h + 3219h и 5439h + 456Ah. Проверить правильность сделанных выводов,

используя debug.

Соседние файлы в папке Assembler