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

2.3. Отладчик Debug

DEBUG.EXE – специальная системная программа для ввода и пошагового выполнения программ, написанных на машинном языке или с помощью команд ассемблера.

Для запуска этой программы нажмите кнопку Пуск, затем Выполнить, введите Debug и нажмите ввод, в результате программа должна загрузиться с диска в память.

После окончания загрузки на экране появится приглашение в виде дефиса, что свидетельствует о готовности программы Debug для приема команд.

Наиболее часто используемые инструкции Debug:

1. Q – выход из программы.

2. ? – получение справки.

3. H (Hexarithmetic) – шестнадцатеричная арифметика. Если после символа Н набрать 2 числа (размером не более 4 цифр каждое) через пробел, то получим сумму и разность набранных чисел:

4. R [<имя регистра>] – работа с регистрами (от слова Register). Инструкция «R» без параметра позволяет просмотреть содержимое всех регистров, а также значение флагов и команду, расположенную по смещению 0100 в сегменте кода. Обычно по смещению 0100 находится первая команда программы.

С помощью этой инструкции можно ввести новое значение в один регистр. Для этого после команды нужно ввести название регистра:

Как видим, при первом просмотре регистров командой r, в регистре АХ был 0, затем содержимое регистра было изменено.

5. U [<сегментный регистр>:]<начальный адрес>, <конечный адрес> – просмотр ячеек оперативной памяти, начиная с указанного смещения в сегменте, заданном сегментным регистром. Команда U (Unassemble) дизассемблирует команды, находящиеся в памяти по заданному адресу.

Например, в следующем примере мы просматриваем команды, находящиеся в регистре CS, начиная с адреса 100, по адрес 102.

6. Е [<сегментный регистр>:]<смещение> – запись информации в ячейки оперативной памяти.

Как было сказано, с помощью Debug можно вводить команды как на машинном языке, так и на языке ассемблера. Инструкция Debug E (Enter) служит для ввода команд на машинном языке. Здесь Debug используется как интерпретатор, чтобы работать непосредственно с микропроцессором. Можно задавать машинные команды, записывать их в определенное место оперативной памяти, обычно, начиная с 0100 смещения относительно начала сегмента кода. Затем выполнять пошагово (по одной команде) либо сразу всю программу.

Так как микропроцессор понимает только двоичные числа (сокращенно их можно записать шестнадцатеричными), то и коды машинных команд записываются в виде шестнадцатеричных чисел, причем команды бывают одно-, двух- трехбайтовые и т.д.

Например, команда для сложения значений из регистров АХ и ВХ двухбайтовая и имеет машинный код 01D8.

Инструкция “E <смещение>” при работе распечатывает в следующей после ее ввода строке адрес, состоящий из двух чисел, и старое значение байта по этому адресу: <содержимое CS>:<смещение><значение байта>, далее компьютер ожидает ввода нового значения байта.

Для ввода, например, двухбайтовой машинной команды 01D8 нужно записать 01 в сегмент кода по смещению 100, и D8 – по смещению 101:

7. Т (от Tracing) – запуск программы, находящейся в оперативной памяти по адресу 0100, в пошаговом режиме. Для вызова программы на выполнение нужно предварительно позаботиться, чтобы в регистре IP (счетчик команд) было число 0100.

8. А <смещение> – ввод команд в ассемблерном виде (от Assemble). Первую команду программы следует начинать вводить со смещения 0100. Далее система ждет поочередного ввода команд ассемблера. Для окончания ввода нужно нажать Enter после пустой строки.

Пример. Введем в оперативную память программу на ассемблере, выполняющую сложение двух чисел. Установим начальный адрес следующим образом: A 0100 [Enter].

Отладчик выдаст значение адреса сегмента кодов и смещения в виде хххх:0100. Теперь можно вводить каждую команду, завершая клавишей Ввод.

Прежде чем выполнить программу, проверим сгенерированные машинные коды при помощи команды U. Необходимо сообщить отладчику адреса первой и последней команд, которые необходимо просмотреть, в данном случае 0100 и 0106. Введите: U 100, 106

Как видим, машинные коды сгенерированы верно.

С помощью команды R выведем содержимое регистров и первую команду нашей программы:

С помощью команд Т выполним последовательно все команды программы:

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

Изучим остальные команды Debug, после чего вернемся к примеру.

9. G (от Go) – запуск программы, находящейся в оперативной памяти по адресу 0100. Для вызова программы на выполнение нужно предварительно позаботиться, чтобы в регистре IP (счетчик команд) было число 0100.

10. N <имя .com-файла> – задает имя программы (Name) для последующей записи ее на диск либо считывания с диска. Перед записью предварительно нужно записать 0 в регистр ВХ, а размер программы (в байтах) – в регистр СХ.

11. W (от Write) – запись программы на диск. После выполнения инструкции “W” на диске в текущей директории появится файл с расширением .COM – точная копия веденной программы.

12. Lзагрузка программы с диска в оперативную память. Предварительно имя программы задается с помощью команды N.

Вернемся к примеру со сложением двух чисел. Чтобы записать эту программу на диск, следует выполнить три действия:

1. присвоить программе имя;

2. указать длину программы;

3. выполнить запись.

1. Присвоим будущему файлу имя с помощью команды N.

2. Программа состоит из четырех двухбайтных инструкций, занимает адреса со смещениями с 0100 по 0106, значит ее длина – 8 байт. Размер программы Debug хранит в регистровой паре [BX:CX]. В нашем случае значение длины умещается в одном регистре, поэтому старший регистр пары мы просто обнулим: BX=0, CX=8.

3. Для записи программы на диск используем программу W.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]