15 | 12 | 2017

Практическая работа № 5 Составление программ на языке Ассемблер

Практическая работа № 5 Составление программ на языке Ассемблер.

Цель Работы: 1. Приобрести навыки записывания двоичных кодов команд и чисел в ячейки оперативной памяти.

2. Приобрести навыки выполнения команд микропроцессора в режиме трассировки.

Оснащение рабочего места: ПК, операционная система Windows Home Edition.

Теоретическая часть.

Оперативная память состоит из ячеек длиной в один байт Положительные числа записываются в ячейки в прямом коде, отрицательные — в дополнительном коде.

Программа, которая находится в ОП и выполняется ЦП представляет собой набор байтов, которые воспринимаются ЦП как код той или иной команды. Машинные команды имеют разную длину – 1,2,3 и более байтов. Машинные команды находятся непосредственно одна за другой в сегменте кодов.

Адрес ячейки ОП формируется МП из двух частей: начальный адрес сегмента и смещение в середине сегмента.

Рассмотрим пример небольшой программы, представленной в таблице 1.

Для сокращения записи двоичные коды команд представлены в 16-ричной системе счисления. Запись [ax] → [bx] означает пересылку содержимого регистра ax в bx.

Такую программу можно непосредственно ввести в ячейки ОП и выполнить ее в среде отладочной программы Debug в режиме трассировки.

Режим трассировки предусматривает покомандное выполнение программы с просмотром результатов выполнения каждой команды в регистрах микропроцессора.

Таблица 1.

Адрес команды

Шестнадцатеричный код команды программы

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

1

2

3

100,101

29С0

Очищение ах

102,103

29DB

Очищение bx

104,105

29C9

Очищение cx

106,107,108

B82301

Число 0123h пересылается в ах

109,10А,10В

052500

[ax]+ 0123h → [ax]

10C,10D

89C3

[ax] → [bx]

10E, 10F

01D8

[ax] + [bx] →[ax]

112,113

29C0

Очищение ах

114

90

Нет операции

Для записи кодов чисел и команд в ячейки памяти, а также для просмотра содержимого ячеек ОП используется отладочная программа Debug. Запуск программы осуществляется таким образом: Пуск → Выполнить → Debug →ОК.

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

Таблица 2 . Список команд программы Debug.

Команда

Назначение команды

E

Записывание команд МП в сегмент кодов

R

Вывод содержимого регистров МП на экран дисплея

T

Выполнение МП команды, находящейся в ячейке ОП по адресу, указанному в регистре

D

Отображение не экране или на печатном устройстве содержимого ячеек ОП

Q

Выход из программы Debug

U

Определение мнемоники команд МП

Ход работы:

1.  Загрузите программу Debug в ОП: Пуск → Выполнить → Debug →ОК

2.  На приглашение программы Debug (значок «—«) введите команду r. На экран выведется информация про содержимое регистров микропроцессора. Обратите внимание на содержимое регистров ax, bx, cx, dx, cs, ip.

3.  Введите программу на машинном языке непосредственно в ячейки ОП (столбец 2 таблицы 1)
- e CS:100 29 C0 29 DB 29 C9 B8 23 01 05 25 00 89 C3 01 D8 89 D9 29 C0 90 <Enter>
Примечание: Параметр CS:100 – это обычный стартовый адрес для машинных кодов в среде Debug. Команда e записывает каждую пару шестнадцатеричных цифр в ячейку ОП в виде байта.

4.  Проверьте содержимое регистров МП:

- r <Enter>

Если содержимое регистра ip = 0100, то перейти к пункту 5. Если содержимое регистра ip ≠ 0100, то записать в регистр ip код 0100 и перейти к пункту 5.

Порядок установки в регистры командного указателя значения 100:

- r ip <Enter>

100 <Enter>

5.  Задайте выполнение первой команды программы 29С0 (очищение ах), которая находится в ячейке ОП по адресу, указанному в регистре IP (100) командой t:

-t <Enter>

Просмотрите содержимое регистров МП. Обратите внимание на содержимое регистров ах=0000, ip=102 (указывает адрес следующей программы).

6.  Задайте выполнение следующей команды программы 29DB (Очищение bx), которая находится в ячейке ОП по адресу, указанному в регистре IP (102) командой t:

-t <Enter>

Просмотрите содержимое регистров МП. Обратите внимание на содержимое регистров bx=0000, ip=104 (указывает адрес следующей команды).

7.  Задайте выполнение следующей команды программы 29С9 (очистка сх), которая находится в ячейке ОП по адресу, указанному в регистре IP (100) командой t:

-t <Enter>

Просмотрите содержимое регистров МП. Обратите внимание на содержимое регистров сx=0000, ip=106 (указывает адрес следующей команды).

8.  Задайте выполнение следующей команды программы В82301 (число 0123h пересылается в ах), которая находится в ячейке ОП по адресу, указанному в регистре IP (106) командой t:

-t <Enter>.

Просмотрите содержимое регистров МП. Обратите внимание на содержимое регистров аx=0123, ip=109 (указывает адрес следующей команды).

9.  Вспомните выполнение следующей команды программы 052500 (к содержимому регистра ах прибавляется число 0025h, результат пересылается в ах), которая находится в ячейке ОП по адресу, , указанному в регистре IP (109) командой t:

-t <Enter>.

Просмотрите содержимое регистров МП. Обратите внимание на содержимое регистров аx=0148 (0025+0123=0148), ip=10С (указывает адрес следующей команды).

10.  Продолжайте выполнять программу в режиме трассировки, пока не дойдете до выполнения команды с кодом 90, которая находится в ячейке по адресу 114.

11.  Определите мнемонику (символическое обозначение) команд программы (таблица 3):

-u 100,114 <Enter>.

Адреса ячеек памяти

Машинные коды команд

Мнемоника команд

229В:0100

29С0

SUB

AX, AX

229В:0102

29DB

SUB

229В:0104

29C9

SUB

229В:0106

B82301

MOV

229В:0109

052500

ADD

229В:010C

89C3

MOV

229В:010E

01D8

ADD

229В:0110

89D9

MOV

229В:0112

29C0

SUB

229В:0114

90

NOP

12.  Выйдите из среды программы Debug:

-q <Enter>.

Содержание и последовательность выполнения задания.

1.  Сделайте анализ выполнения индивидуального задания.

2.  Запишите в таблицу программу на машинном языке, определите адреса ячеек ОП, куда будут записаны команды, укажите назначение команд по форме:

Адрес команды

Шестнадцатеричные коды команд МП

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

Мнемоника команд

Загрузите программу Debug. Введите коды команд МП в ячейки ОП.

3.  Выполните программу в режиме трассировки. Сделайте анализ выполнения каждой команды.

4.  Определите мнемонику (символическое обозначение) команд программы:

-u 100, А2 <Enter>, где А2 — адрес команды, имеющей код 90 («нет операции») и запишите в таблицу.

5.  Выйдите из программы Debug.

Варианты заданий.

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

Вариант 1.

1.  Очистить регистры ax, bx.

2.  Записать число (-66)10 в регистр ax.

3.  Прибавить к содержимому регистра ах число (65)10.

4.  Переслать результат в регистр bx.

Вариант 2.

1.  Очистить регистры ax, bx, сх.

2.  Записать число (-160)10 в регистр ax.

3.  Переслать результат в регистры bx, сх.

4.  Прибавить к содержимому регистра ах содержимое ах

Вариант 3.

1.  Очистить регистры ax, bx.

2.  Прибавить к содержимому регистра ах число (49)10..

3.  Прибавить к содержимому регистра ах число (25)10.

4.  Переслать результат в регистр bx.

Вариант 4.

1.  Очистить регистры ax, bx, сх.

2.  Записать число (+130)10 в регистр ax.

3.  Прибавить к содержимому регистра ах число (-39)10.

4.  Переслать результат в регистры bx, сх.

Вариант 5.

1.  Очистить регистры ax, bx.

2.  Записать число (-145)10 в регистр ax.

3.  Прибавить к содержимому регистра ах число (100)10.

4.  Переслать результат в регистр bx.

Вариант 6.

1.  Очистить регистры ax, bx.

2.  Записать число (+12)10 в регистр ax.

3.  Прибавить к содержимому регистра ах число (-42)10.

4.  Переслать результат в регистр bx.

Вариант 7.

1.  Очистить регистр bx.

2.  Записать число (+152)10 в регистр ax.

3.  Прибавить к содержимому регистра ах число (-152)10.

4.  Переслать результат в регистр bx.

Вариант 8.

1.  Очистить регистры ax, bx, сх.

2.  Записать число (+140)10 в регистр ax.

3.  Переслать число из регистра ах в регистры bx, сх.

4.  Прибавить к содержимому регистра ах содержимое регистра bx.

Вариант 9.

1.  Очистить регистры ax, bx.

2.  Записать число (+122)10 в регистр ax.

3.  Переслать число из регистра ах в регистр bx.

4.  Записать число (-30)10 в регистр ax

5.  Прибавить к содержимому регистра ах содержимое регистра bx.

Вариант 10.

1.  Очистить регистры ax, bx.

2.  Записать число (-200)10 в регистр ax.

3.  Прибавить к содержимому регистра ах число (25)10.

4.  Переслать результат в регистр bx.

5.  Прибавить к содержимому регистра ах содержимое регистра bx.

Контрольные вопросы:

1.  Что называется смещением сегмента?

2.  Какой формат имеют машинные команды МП?

3.  Как называется программа, позволяющая записывать коды чисел и команд в ячейки памяти?

4.  Как осуществляется запуск программы Debug в среде ОС Windiws?

5.  Содержимое каких регистров МП используется для формирования адреса ячейки сегментов кодов?

6.  Как можно вывести содержимое всех регистров МП на экран монитора?

7.  Укажите порядок изменения содержимого регистра ip.

8.  Укажите порядок изменения содержимого регистра ах.

9.  Что означает выражение: «выполнение программы в режиме трассировки»?

10.  Какая команда программы выполняется при вводе команды и программы Debug.