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

4. Пример машинных кодов: определение размера памяти.

 4.1.  Базовая система ввода-вывода (BIOS) имеет подпрограмму, которая определяет размер памяти. Обращение к BIOS осуществляется по команде INT по прерыванию 12Н. В результате BIOS возвращает в регистр АХ размер памяти в килобайтах. Для этого необходимо вызвать отладчик DEBUG из DOS и ввести для команд INT 12H и RET следующие машинные коды:

E CS:100 CD 12 CB

 4.2.  Введите команду отладчика R для отображения содержимого регистров. При этом регистр IP должен содержать 0100 и высвечиваться команда INT 12.

 4.3. 0 Введите команду отладчика T несколько раз и просмотрите выполняемые команды BIOS до тех пор пока не появится команда IRET. В этот момент регистр АХ содержит размер памяти в шестнадцатиричном формате. Теперь введите еще раз команду Т для выхода из BIOS и возврата в вашу программу. На экране появится команда RET для машинного кода СВ, который был введен вами.

 4.4.  Для завершения работы с программой и выхода из DEBUG в DOS введите команду отладчика Q.

5. Специальные средства отладчика.

  5.1.  Вызовите отладчик DEBUG и введите команду отладчика:

A 100

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

MOV AL,25

MOV BL,32

ADD AL,BL

RET

Команда RET записывается в 106 ячейку относительно начала сегмента команд. В этот момент отладчик готов к приему команды в 107 ячейку. Не вводя информации нажмите клавишу "ввод"(Enter).

При этом операция ввода команд ассемблера будет прекращена.

 5.2.  Введите команду отладчика U, которая показывает машинные коды для команд ассемблера. Необходимо сообщить отладчику адреса первой и последней команд, которые необходимо просмотреть, в данном случае 100 и 106. Введите:

U 100,106

На экране появятся адреса ячеек, машинные коды команд и обозначение этих команд на ассемблере.

 5.3.  Выполните команду отладчика R для вывода содержимого регистров и первой команды программы.

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

 5.5.  Для завершения работы с программой и выхода из DEBUG в DOS введите команду отладчика Q.

6. Сохранение программы из отладчика.

  6.1. Вызвать отладчик DEBUG.

  6.2. С помощью команды А со смещением 100 ввести программу:

MOV AX,0012

MOV [0004],AX

MOV AX,0053

MOV [0006],AX

MOV BX,0002

MOV AX,[0000]

ADD AX,AX

MOV DX,AX

ADD BX,DX

MOV AX,[BX]

MOV [0002],AX

RET

Последняя команда RET записывается в 011D ячейку сегмента команд. Следующая свободная ячейка для записи команды 011E.

 6.3.  Присвоить имя программе EBF с расширением COM. Для этого ввести команду N:

N EBF.COM

  6.4.  Запросить регистр СХ командой:

R CX

Отладчик выдаст сообщение СХ 0000 и приглашение к установке нового значения регистра СХ.

 6.5.  В регистре СХ указывается длина введенной программы. Длину программы определяют как разность между адресом следующим после последней команды программы и адресом первой команды программы, т.е. 011Е-0100=1Е. Вести число 1Е в регистр СХ.

 6.6.  Записать программу вводом команды: W.

 6.7.  Выйти из отладчика вводом команды: Q.

 6.8.  Выти из DOS в NORTON и проверить наличие файла EBF.COM на диске.

 6.9.  Отключить панели NORTON и загрузить из DOS программу по ее имени с помощью отладчика:

DEBUG EBF.COM

 6.10.  Ввести команду отладчика U и просмотреть исходную программу.

 6.11.  Выполнить трассировку программы, используя команды отладчика R и T.

 6.12.  С помощью команды U определить адрес 6 команды программы MOV AX,0001.

 6.13.  С помощью команды А заменить команду MOV AX,0001 командой MOV AX,0002.

 6.14.  С помощью команды U проверить правильность записи команды в программу.

 6.15.  Выполнить трассировку измененной программы, используя команды отладчика R и Т. Объяснить, что изменилось в выполнении программы.

  6.16.  Выйти из отладчика вводом команды: Q.

СОДЕРЖАНИЕ ОТЧЕТА 

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

КОНТРОЛЬНЫЕ ВОПРОСЫ 

 1.  Напишите машинные команды для:

а) пересылки значения 4629Н в регистр АХ;

б) сложения 036А с содержимым регистра АХ.

 2.  Предположим, что была введена следующая Е-команда:

Е CS:100 B8 45 01 05 25 00

Вместо значения 45 предполагалось 54. Напишите команду Е для корректировки только одного неправильно введенного байта, т.е. непосредственно замените 45 на 54.

 3.  Имеется следующая программа в машинных кодах:

B0 25 D0 E0 B3 15 F6 E3 CB

Программа выполняет следующее:

- пересылает значение 25Н в регистр AL;

- сдвигает содержимое регистра AL на один бит влево (в результате в AL будет 4А);

- пересылает значение 15Н в регистр BL;

- умножает содержимое регистра AL на содержимое регистра BL.

Используйте отладчик для ввода (Е) этой программы по адресу CS:100. Не, забывайте, что все значения представлены в шестнадцатиричном виде. После ввода программы наберите D CS:100 для просмотра сегмента кода. Затем введите команду R и необходимое число команд Т для пошагового выполнения программы до команды RET. Какое значение будет в регистре АХ в результате выполнения программы?

 4.  Используйте отладчик для ввода (Е) следующей программы в машинных кодах:

Данные: 25 15 00 00

Код: A0 00 00 D0 E0 F6 26 01 00 A3 02 00 CB

Программа выполняет следующее:

- пересылает содержимое одного байта по адресу DS:00 (25) в регистр AL;

- сдвигает содержимое регистра AL влево на один бит (получая в результате 4А);

- умножает AL на содержимое одного байта по адресу DS:01 (15);

- пересылает результат из АХ в слово, начинающееся по адресу DS:02.

После вводе программы используйте команды D для просмотра сегмента данных и сегмента кода. Затем введите команду R и необходимое число команд Т для достижения конца программы (RET). В этот момент регистр АХ должен содержать результат 0612. Еще раз используйте команду D DS:00 и определите какое значение записано по адресу DS:02.

ОТВЕТЫ:

1. а) В82946, б) 056А03

2. E CS:101 54

3. 0612

4. 12 06

Л а б о р а т о р н а я р а б о т а N 2

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