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

2. Пример машинных кодов: непосредственные данные.

 2.1.  Загрузить программу DEBUG в память компьютера.

 2.2.  Подготовить программу на языке машинных кодов. Для примера рассмотрим программу состоящую из 9 команд:

Команда Назначение

1) В82301 Переслать значение 0123H в AX

2) 052500 Прибавить значение 0025H к AX

3) 8BD8 Переслать содержимое AX в BX

4) 03D8 Прибавить содержимое AX к BX

5) 8BCB Переслать содержимое BX в CX

6) 2BC8 Переслать содержимое AX в CX

7) 2BC0 Вычесть содержимое AX из AX (очистка AX)

8) 90 Нет операции

9) CB Возврат в DOS

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

 2.3.  Ввести первые 6 байт программы. Для этого необходимо ввести команду E(ввод) в следующем виде:

E CS:100 B8 23 01 05 25 00

CS означает что ввод команд должен производиться в сегмент памяти начало которого указано в регистре сегмента команд CS. 100 означает что ввод команд должен производиться начиная с ячейки памяти удаленной через 100 ячеек относительно начальной ячейки сегмента команд(смещение). Далее указываются байты двух первых команд последовательно друг за другом. Данная команда запишет коды в 6 ячеек памяти, следовательно для следующей записи необходимо задавать смещение 106.

 2.4.  Ввести следующие 6 байт программы. Для этого необходимо ввести команду E в следующем виде:

E CS:106 8B D8 03 D8 8B CB

Эта команда отладчика вводит 3 следующие команды программы на машинном языке. Эта команда отладчика загружает еще 6 ячеек памяти, следовательно смещение для следующего ввода должно быть увеличено на 6, т.е. число 10C в шестнадцатиричной системе счисления.

 2.5.  Ввести оставшиеся команды программы. Для этого необходимо ввести команду отладчика E в следующей форме:

E CS:10C 2B C8 2B C0 90 CB

После ввода этой команды отладчика вся программа составленная на языке машинных кодов оказывается записанной в сегмент команд памяти ЭВМ со смещением на 100 ячеек.

 2.6.  Выполнить просмотр регистров микропроцессора. Для этого ввести команду отладчика R (просмотр регистров) в следующей форме:

R

На экране появятся 3 информационные строки. В первой и второй строках указывается обозначение регистров микропроцессора и содержимое этих регистров. Например: AX=0000 означает что в регистре AX записано число 0000 в шестнадцатиричной системе счисления. В конце второй строки указывается состояние регистра флагов FLAGS. Символьные обозначения для регистра флагов следующие:

NV - нет переполнения старшего бита в АЛУ (арифметическо-логическое устройство)

UP - правое направление пересылки данных в АЛУ

DI - внешние прерывания микропроцессора запрещены

PL - в АЛУ положительное число (знак плюс)

NZ - в АЛУ число отличное от нуля (не ноль)

NA - нет переноса из 3 бита в АЛУ (используется для специальных арифметических операций)

PO - четность младших 8 бит в АЛУ (контроль на четность)

NC - нет переноса из старшего бита в АЛУ (используется при арифметических операциях, сдвигах или циклических сдвигах)

В третьей строке указывается начальный адрес сегмента памяти (содержимое регистра CS) и смещение начального адреса введенной программы относительно начала сегмента. Далее указывается машинный код первой команды введенной программы. Затем указывается обозначение этой команды на языке Ассемблер. Например: MOV AX,0123. Данные в машинном коде задаются обратным шестнадцатирич-

ным числом 2301, а в команде Ассемблера указываются прямым шестнадцатиричным числом 0123.

 2.7.  Выполнить первую команду введенной программы. Для этого необходимо ввести команду отладчика T (трассировка, т.е. пошаговое выполнение команд) в следующей форме:

T

При этом выводится новая информация о состоянии регистров. В регистр AX записывается число 0123, изменяется величина смещения, которая также указывается в указателе команд (IP), выводится машинный код следующей команды и ее обозначение на языке Ассемблер.

 3.8.  Выполнить следующую команду введенной программы. Для этого необходимо ввести команду отладчика T в следующей форме:

T

Объяснить изменения отраженные на дисплее после выполнения команды отладчика.

 2.9.  Выполнить следующую команду введенной программы. Объяснить изменения произошедшие в регистрах микропроцессора.

 2.10.  Выполнить в пошаговом режиме с помощью команды отладчика T все команды введенной программы кроме последней команды RETF, ее машинный код CB. Объяснить изменение информации в регистрах микропроцессора.

 2.11.  Выполнить просмотр введенной программы. Для этого необходимо использовать команду отладчика D, указав сегмент для просмотра и смещение. Так как нужно просмотреть область памяти где записаны коды команд то необходимо использовать в качестве указателя сегмента регистр CS и ввести команду в следующей форме:

D CS:100

При этом выводится дамп памяти в котором в первой его строке, начиная с первой ячейки указываются коды в шестнадцатиричной системе счисления последовательно для всех команд введенной программы. Одна строка дампа памяти в состав которой входит 16 байт информации называется параграфом.

 2.12.  Для того чтобы повторить выполнение всех команд необходимо сбросить содержимое регистра IP и повторить трассировку снова. Введите команду отладчика:

R IP

На экране дисплея появится текущее состояние регистра IP. Введите исходное значение регистра IP для рассматриваемой программы:100. Далее с помощью команды отладчика T повторите трассировку до конца программы. Последней командой программы, которую вы должны выполнить, должна быть команда RETF. Дальнейшее выполнение команды отладчика T приведет к непредсказуемому поведению компьютера, т.к. далее в сегменте записаны неизвестные пользователю коды.  Будьте внимательны! 

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

Q

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