Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 2.doc
Скачиваний:
12
Добавлен:
19.11.2018
Размер:
280.06 Кб
Скачать

Войти в режим ассемблирования командой

А 100

и набрать программу следующего вида:

MOV СХ,10

MOV AX,0E21

LOOP 103

INT 20

Пояснение. Эта программа должна в цикле 10Н раз напечатать восклицательный знак "!" (см. команду А, пример 2). Однако, команда вызова пре­рывания INT 10 была пропущена, хотя должна на­ходиться перед командой цикла LOOP. Для того, чтобы исправить ошибку можно заново набрать конец прог­раммы, начиная с адреса CS:0106. В случае больших программ это весьма затруднительно, поэтому вставку можно произвести, сдвинув конец программы в часть верхних адресов памяти командой М. Затем вставить необходимую цепочку команд, и второй командой М присоединить хвостовую часть программы в конец до­бавленных операторов.

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

  • выполним команду

М 106L10 200

и тем самым произведем сдвиг в область памяти, начинающуюся с DS:0200, конца программы с командами:

LOOP 103

INT 20

  • Перейдем в режим ассемблирования

А 106

  • введем пропу­щенную инструкцию INT 10

  • выйдем обратно на монитор отладчика - на черту

  • выполним команду

М 200L10 108

и тем самым мы присоединим «хвост» программы.

Программа отредактирована.

N – (Name) команда указания имени. Эта команда, прежде всего, определяет имя файла, который далее либо будет считываться с диска коман­дой L, либо записываться на диск командой W.

Формат этой команды следующий:

N <имя файла>

Команда Name выполняет две функции:

  • Для первых двух файлов образует два контрольных блока файлов (FCB –File Control Block – Блок управления файлом), адреса которых CS:5C и CS:6C. Запуск программы DEBUG с указанием имени файла образует лишь один контрольный блок файла FCB (адрес блока CS:5C).

Контрольные блоки файлов используются командами Load и Write и, кроме того, передают имена файлов тестирующим программам.

  • Все введенные имена файлов и все параметры запоминаются, начиная с адреса CS:81, в таком же виде, в каком они были введены (вместе с разделителями). Адрес CS:80 содержит число введенных символов. Регистр АХ указывает правильность определения накопителей, находящихся в двух первых описаниях файлов.

Указание. Если программа DEBUG была загружена без указания имени файла, то перед загрузкой файла командой L необходимо употребить команду Name.

Пример 1.

Прочесть с диска в оперативную память файл AUTOEXEC.BAT.

Для этого выполнить:

N C:\AUTOEXEC.BAT

L

Внимание! При загрузке файла командой Load в регистровую пару ВХ:СХ, будет занесена длина за­груженного файла в байтах.

Пример 2.

Создать на диске файл TEST.DAT, состоящий из ну­лей длины 1000Н байт.

Для этого выполним следующую цепочку команд:

F 100 L1000 0 ; обнуление области памяти, длиной 1000Н, ; начиная с адреса DS:0100

N TEST.DAT ; присвоение имени файлу

R BX ; обращение к регистру BX

  1. ; обнуление регистра ВХ

R CX ; обращение к регистру СХ

0 ; запись в регистр СХ размера файла

W ; запись файла на диск

В примере использованы еще не известные команды R и W, описание которых будет приведено ниже.

Эту же команду N можно использовать для ввода дополнительных параметров командной строки, как это сделано в примере 3.

Пример 3.

Предположим, что мы решили изучить программу фор­матирования FORMAT.COM с использованием метода трассировки. Предварительно загрузим программу в опе­ративную память, являющуюся рабочей областью отладчика (1 и 2 команды). Прежде чем начинать трассировку работы программы, необходимо указать имя диска (А, который собираемся форматировать, то есть передать параметр. В этом случае мы должны использовать следующие команды:

N C:\DOS\FORMAT.COM

L

N A:

T=100

Следует еще раз отметить, что имеются три области памяти, которые мо­гут быть изменены командой N. Ими являют­ся:

  • область размером 16 байт с адреса CS:5C. Это FCB для файла 1;

  • область размером 16 байт с адреса CS:6C. Это FCB для файла 2;

  • область размером 128 байт, начинающая­ся с адреса СS:80. 3десь хранится число симво­лов в строке после команды N, а начиная с байта CS:81 хранится сама строка символов после команды N.

Можно проверить это, используя команду распе­чатки Dump.

Пример 4.

В этом примере определяются файлы и другие параметры, применяемые в загруженной программе:

DEBUG prog

N file1 file2

Программа DEBUG загружает программу prog с адреса CS:100 и записывает контрольный блок файла в ячейку с адресом CS:5C. Затем команда Name образует контрольные блоки файлов file1 и file2, адреса которых соответственно CS:5C и CS:6C. Контрольный блок файла prog записывается заново. Область хранения параметров (с адреса CS:81) содержит все символы, находящиеся за кодом команды N, включая разделители (пробелы). В ячейке CS:80 записано число этих символов (0СH).

О – (Output) команда вывода данных в порт. Эта команда позволяет вывести указанный байт в порт с заданным адресом. Она полезна для тестирования работы периферийных уст­ройств и корпусов на системной плате в диалоговом режиме.

Формат команды:

О <адрес порта> <величина>

Здесь вместо <адреса порта> подставляется адрес необходимого порта в диапазоне 0-FFFFH, а вместо <величина> - значение, которое затем загружается в порт. Если порт шестнад­цатибитный, то <величина> может быть четы­рехразрядным шестнадцатиричным числом, которое загружается в порт.

Пример 1.

Передать значение 4FH в выходной парт 2F8H:

О 2F8 4F

Пример 2.

Мотор дисковода А: для флоппи-дисков можно включить следующей командой:

О 3F2 10

Пример 3.

Для компьютеров с CGA-контроллером можно включить окаймление дисплея командой

О 3D9 <цвет окаймления>,

где <цвет_окаймления> может быть числом из интерва­ла 0-FН.

Пример 4.

Покажем, как можно включить звуковой сигнал путем обращения к порту 061Н. Для этого сначала прочитаем содержимое порта командой:

I 61

запомним полученное число. Далее добавим к этому числу константу 3 и по коман­де

О 61 <число>

выведем в порт 61, полученное в результате сложения число.

Р – (Proceed) команда высокоуровневой трасси­ровки. Эта команда также, как и команда Т (см. ниже), предназначена для трассировки .СОМ и .ЕХЕ-программ. Однако, в отличие от Т-трассировки, эта трассировка менее детальна. Она не отслеживает досконально подпрограм­мы и программные прерывания, а также циклы LOOP и строковые инструкции с повто­рением. Но как и в случае Т-трассировки после каждой инструкции печатается со­держимое всех регистров и следующей испол­няемой инструкции.

Формат команды:

Р=<адрес> <число_инструкций>

Можно опустить любой из двух параметров командной строки: <адрес> и/или <число инструкций>. Параметр <адрес> задает на­чальный адрес, начиная с которого будет производиться трассировка, а параметр <число инструкций> будет указывать общее число инструкций, которые будут исполнены после нажатия клавиши <Enter> . Обязателен ввод символа [ = ] при указании адреса для того, что­бы не спутать адрес с числом исполняемых инструкций.

Этот тип Р-трассировки крайне полезен при изучении общей логики выполнения прог­раммы, избавляя от утомительного отслежи­вания деталей. При начальном изучении прог­раммы необходимо начинать именно с Р-трассировки.

Рассмотрим несколько примеров с трассировкой.

Пример 1.

Введем программу печати символа "А", начинающую­ся с адреса 100:

MOV АХ,ОЕ41

INT 10

INT 20

и проведем сначала Р-трассировку (рис. 2.9):

Р=100

Р

Р

Заметим, что оттрассировались только эти три инструкции "целиком".

Теперь дадим команду:

T=100

и затем многократные

Т

Для сравнения часть детальной трассировки приведена на рис. 2.10. Увидим, что при исполнении команды INT 10 мы перешли в другую область памяти, а именно в область BIOS, а выполнение команды состоит из отдельных простых команд программы обработки прерывания STI, TEST, JZ и др.

Пример 2. (выполнить самостоятельно)

Ввести, начиная с адреса 100, следующую программу:

MOV АХ,В800

MOV DS,AX

MOV ВХ,0

MOV СХ,800

MOV АХ,0321

MOV [BX],AX

INC ВХ

INC ВХ

LOOP

INT 20