Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНАЯ РАБОТА№19.doc
Скачиваний:
13
Добавлен:
18.03.2015
Размер:
1.1 Mб
Скачать

Лабораторно-практическое занятие №19

Тема: Подпрограммы, работа со стековой памятью.

Цель:Исследование особенностей записи и обращения к подпрограммам; изучение методов использования стека при создании программ.

Теоретическая часть программа монитора "микролаб"

ПЗУ микролаборатории содержит программу монитора, которая считывает с клавиатуры, выполняет выбранную операцию и управляет дисплеем. Микролаборатория все время выполняет программу монитора, за исключением случая, когда она выполняет программу пользователя.

Когда нажимается кнопка ПУСК, программа монитора заставляет процессор перейти к адресу, указанному на дисплее "Микролаб". Когда нажимается кнопка СБРОС, микролаборатория возвращается к программе монитора. Программа монитора позволяет проверять содержимое регистров в шаговом режиме после выполнения каждой команды /т.е. после каждого шага/. На третьем и четвертом индикаторах, считая справа, после выполнения каждой команды /шаговый режим/ высвечивается содержимое аккумулятора. Кроме того, после каждого шага команды программа монитора записывает содержимое регистров в специальные ячейки ОЗУ. Следовательно, можно проверить содержимое регистров на каждом шаге, просмотрев соответствующие ячейки ОЗУ /табл.1/.

Адреса регистров МП(микролабораторииКР580ИК80А) Таблица№1

Адреса

Регистры

83EB

Аккумулятор -А

83EA

Регистр признаков(флагов)-F

83E9

Регистр-В

83E8

Регистр-С

83E7

Регистр-D

83E6

Регистр-E

83E5

Регистр-H

83E4

Регистр-L

83E3

Указатель стека(младший байт)SP-L

83E2

Указатель стека(старший байт)SP-H

83E1

Программный счетчик (младший байт)PC-L

83E0

Программный счетчик (старший байт)PC-H


Программа счета

На рис.2, показана структурна схема программы, которая "заставляет" ячейку памяти считать в двоичном коде от 0 до 255 и затем повторять этот счет.

Сначала один регистр /в данном случае аккумулятор/ устанавливается в 0. Затем содержимое аккумулятора переписывается в ячейку памяти с адресом 8020 и увеличивается на 1. Далее запись в ячейку памяти повторяется снова. В табл.2, приводится листинг программы.

Рис.2. Структурная схема программы счета.

Программа начинается с адреса 8004 вместо 8000, так что потом можно добавить несколько команд в начале программы /в "Микролаб" 8000 - первая ячейка ОЗУ, следовательно, программа пользователя не может начинаться раньше этого адреса/ . Первая команда - МVI А, 0.

Листинг программы счета таблица2.

Адрес

Содержимое

Метки

Команды

Комментарии

8004

ЗЕ

МVI А, 0

Установка А в "0"

8005

00

8006

32

LООР:

SТА 8020

А— ячейка памяти

8007

20

8008

80

80:09

00

N0P

800А

INK А

Прирастить А

800В

С3

JMP LOOP

Переход к LООР

800С

06

800D

80

Она загружает в аккумулятор нули. Следующая команда - SТА 8020 пересылает содержимое аккумулятора в ячейку памяти 8020. Код 32 в ячейке с адресом 8006 указывает, что это команда SТА. Когда процессор считывает этот код, он "понимает", что следующие два байта /адреса 8007 и 8008/ содержат адрес, по которому должно быть записано содержимое аккумулятора /в данном случае 8020/. Следует помнить, что байты адреса записываются в обратном порядке. Эта команда не изменяет содержимого аккумулятора, она просто копирует данные в ячейку памяти. За командой SТА идет команда NОР, чтобы зарезервировать место для последующего использования. Следующая команда - INR А, она увеличивает содержимое аккумулятора. Когда достигается максимальная величина счета /в двоичном коде -1111 1111, в шестнадцатеричном - FF или 255 - в десятичном/, содержимое аккумулятора сбрасывается и дальнейший счет идет с нуля. Это обычный режим работы двоичного счетчика.

Последняя команда - переход. Эта команда возвращает программу к команде SТА, адрес 8006.

Проведем эксперимент по выполнению описанной программы в шаговом режиме.

1. Введите в память "Микролаб" программу, приведенную в табл.2. Проверьте правильность ее записи в память.

2. Переключите тумблер режима в положение ШАГ.

3. Установите начальный адрес программы /8004/. На двух крайних

правых индикаторах появится команда МVI А /код ЗЕ/.

4. Нажмите кнопку ПУСК. Программа начала выполняться в шаговом режиме. Первая команда выполнена. Теперь на двух крайних правых индикаторах высвечено содержимое ре­гистра признаков, а содержимое аккумулятора появилось на третьем и четвертом индикаторах, считая справа. На этих индикаторах видны нули, так как первая команда выполнена и в аккумулятор занесены нули.

5. Нажмите кнопку ПУСК. Выполнена команда SТА 8020. Содержимое аккумулятора не изменилось, в ячейке памяти 8020 должны появиться нули. Чтобы проверить содержимое этой ячейки, нажмите кнопки 8, 0, 2, О, а также кнопку УСТ.АД. На двух крайних правых индикаторах - нули. Это содержимое ячейки 8020. Набирая любой другой адрес, можно просмотреть любую ячейку памяти после каждого шага выполнения программы. Набирая соответствующие адреса, можно также просмотреть и содержимое регистров МП /см. табл.1/.

6. Нажмите кнопку ВОЗВР. Тем самым вы вернулись к выполнению вашей программы и выполнили следующую команду /NОР/. На индикаторах опять появилось содержимое регистра признаков и аккумулятора.

7. Нажмите кнопку ПУСК. Выпол­нена команда INR А. На индикаторе видна единица, что свидетельствует о приращении содержимого аккумулятора.

8. Проверьте содержимое ячейки 8020. В ней находятся нули, так как перепись единицы из аккумулятора в эту ячейку еще не произошла.

9... Нажав кнопку ВОЗВР . , вернитесь к выполнению вашей программы.

10. Нажмите кнопку ПУСК, выпол­нится следующая команда /SТА 8020/, т.е. содержимое аккумулятора пере­писалось в ячейку 8020.

11. Проверьте содержимое ячейки 8020. Теперь там находится единица.

12. Нажав кнопку ВОЗВР. и далее нажимая кнопку ПУСК, выполните программу по шагам. Проследите, как меняется содержимое аккумулятора.