- •Лабораторно-практическое занятие №19
- •Теоретическая часть программа монитора "микролаб"
- •Программа счета
- •Организация программ
- •Прерывания
- •Подпрограммы и стек
- •Программа задержки
- •Ход работы.
- •Разработать:
- •Команды ввода / вывода, управления работы со стеком.
- •Xthl (обмен содержимого верхушки стека и содержимого регистров н и l)
- •In порт (ввод)
Лабораторно-практическое занятие №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А |
3С |
|
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. Нажав кнопку ВОЗВР. и далее нажимая кнопку ПУСК, выполните программу по шагам. Проследите, как меняется содержимое аккумулятора.