- •Лабораторная работа № 1 Ознакомление с работой на учебной микро-эвм.
- •Структура учебной микро-эвм.
- •Адресация в учебной микро-эвм.
- •Директивы монитора.
- •Лабораторная работа № 2 Запись и выполнение простых программ
- •Лабораторная работа № 3 Ввод - вывод, маскирование данных и организация условных переходов.
- •Лабораторная работа 4 Подпрограмма и стек
- •Лабораторная работа n5 Подключение дисплея и клавиатуры к микро-эвм
Лабораторная работа 4 Подпрограмма и стек
Цель работы: исследование особенностей записи и обращения к подпрограммам; изучение методов исследования стека при создании программ.
Краткие сведения из теории
Память микро-ЭВМ, построенной на основе МПК серии К580, может иметь не более 65 536 однобайтных ячеек. Учитывая ограниченные возможности памяти при разработке программ, нужно стараться сделать их как можно короче. С этой целью часть программы, которая неоднократно повторяется, или программа, которая используется, могут быть оформлены в виде подпрограмм - последовательностей команд, выполнение которых может быть вызвано из любого места программы любое количество раз.
Процесc передачи управления к подпрограмме называется ее вызовом. Данные и адреса, требуемые для работы подпрограммы, называются входными параметрами. Результаты работы подпрограммы, передаваемые по окончании ее работы в основную программу, называются выходными параметрами.
Для вызова подпрограмм и возврата из них используются команды:
CALL<A2><A1> и RET.
Команда CALL<A2><A1> загружает в программный счетчик МП БИС содержимое байтов <A2> <A1>, записанных в последующих двух адресах памяти после адреса, где записан код команды CALL (CD). Содержимое байта <A2> записывается в младший байт PCL программного счетчика, а третий байт <A1> команды - в старший байт PCH программного счетчика, при этом МП БИС автоматически сохраняет в стеке адрес основной программы, к которому она будет обращаться после выполнения подпрограммы.
Стек - специально организованная область ОЗУ, задействованная в микро-ЭВМ для временного хранения данных или адресов. Число, записанное в стек последним, извлекается из него первым. Команда RET (C9) помещает в программный счетчик последнее записанное на данный момент в стеке число. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна заканчиваться командой RET. Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, т. е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данной микро-ЭВМ определяется лишь размером стека.
Существуют также команды условного вызова подпрограммы и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (аналогично командам условных переходов). Все команды условного вызова подпрограммы - трехбайтные, во втором и третьем байтах сообщается начальный адрес подпрограммы. Команды вызова подпрограмм и возврата из них используют стек и внутренний регистр МП БИС SP (STACK POINTER) для адресации к стеку.
Помимо команд вызова подпрограмм и возврата из них со стеком можно обмениваться информацией с помощью команд PUSH<R> (записать в стек содержимого обозначенного регистра МП БИС). Эти команды являются однобайтными, и в них содержится указание пары регистров МП БИС.
При записи в стек содержимого пары регистров или программного счетчика по адресу SP-1 записывается содержимое старшего регистра из указанной пары или старший байт PCH программного счетчика, а по адресу SP-2 в стек записывается содержимое младшего регистра из указанной пары младшего байта PCL программного счетчика.
При записи из стека данных в пару регистров или программный счетчик в младший регистр пары или PCL записывается число из адреса, указанного в указателе стека SP, а в старший регистр пары или PCH - число, записанное по адресу SP+1. В результате выполнения команды содержимое указателя стека SP увеличивается на 2. Данные в памяти не изменяются, а лишь происходит их чтение и увеличение содержимого SP.
Таким образом, при записи данных адреса стека растут от больших к меньшим, а указатель стека SP всегда содержит последний адрес стека, в котором записано число.
При разработке программ необходимо первоначально назначать область стека, записывая в SP адрес с помощью команды LXI SP<A2><A1> или команды SPHL.
Все операции со стеком должны быть сбалансированы, т. е. каждая подпрограмма должна содержать равное количество команд PUSH<R> и POP<R> и оканчиваться командой RET. В противном случае выполнение команды RET в конце подпрограммы приведет к записи в программный счетчик случайного числа из стека. Адрес возврата в основную программу будет потерян, и нарушиться последовательность ее выполнения.
Как правило, в начале каждой программы сохраняют в стеке содержимое всех задействованных при ее выполнении регистров с помощью команд PUSH<R>. В конце подпрограммы восстановление содержимого регистров осуществляется с помощью команд POP<R> и в обратной последовательности по отношению к их записи в стек.
Обычно в виде подпрограмм записываются многократно используемые фрагменты программ, например подпрограмма выдачи звукового сигнала, подпрограмма обслуживания клавиатуры и дисплея и т. д.
Алгоритм работы простой подпрограммы временной задержки приведен на рис.4.7.
Общее время задержки вычисляется по формуле:
TD = t1 + ( t2 + t3 + t4 ) N1 + t5,
где: N1 - число, первоначально записанное в счетчике.
В качестве счетчика выбран регистр B, в который записывается число N1 из регистра C.
Команда NOP нужна для увеличения времени выполнения цикла, а следовательно, и общей задержки. Вместо команды NOP может быть записана любая последовательность команд, выполнение которых не изменяет содержимого микропроцессора.
Время записи числа N1 в регистр B и возврата из подпрограммы t1+t5 фиксировано и в цикл не входит. Минимальная задержка для приведенной подпрограммы определяется при N1 = 01 и равна:
TD MIN = t1 + t2 + t3 + t4 + t5.
Максимальная задержка имеет место при N1 = 00 и вычисляется по формуле:
TD MAX = t1 + (t2 + t3 + t4 ) 256 + t5.
Подпрограмма DLY (подпрограмма П.10) представляет подпрограмму временной задержки, записанную в соответствии с алгоритмом, представленным на рис. П.7.
Подпрограмма П.10
Адрес |
Машинный код |
Метка |
Мнемокод |
Комментарий |
0900 |
41 |
|
MOV B,C |
;записать число из регистра ;С в регистр В |
0901 |
00 |
DLY |
NOP |
;нет операции |
0902 |
05 |
|
DCR B |
;уменьшить число в регистре В на 1 |
0903 |
С2 0109 |
|
JNZ DLY |
;если число, записанное в регистре ;В, не равно нулю, то идти на DLY |
0906 |
С9 |
|
RET |
|
Подпрограмма П.11
Адрес |
Машинный код |
Метка |
Мнемокод |
Комментарий |
0A00 |
AF |
BPP |
XRA A |
;очистить аккумулятор |
0A01 |
D3 04 |
|
OUT BP |
;записать 00 в выходное устройство |
0A03 |
CD 0009 |
|
CALL DLY |
;вызвать подпрограмму задержки |
0A06 |
2F |
|
CMA |
;записать код FF в аккумулятор |
0A07 |
D3 04 |
|
OUT BP |
;записать код FF в выходное ;устройство |
0A09 |
CD 0009 |
|
CALL DLY |
;вызвать подпрограмму задержки |
0A0C |
C9 |
|
RET |
|
|
|
|
|
|
|
|
|
|
|
Рассмотрим пример использования подпрограммы временной задержки при организации звуковых сигналов в микро-ЭВМ. В микро-ЭВМ звуковые сигналы могут формироваться простейшей схемой (рис. 4.8), на вход которой со звуковой частотой записываются по очереди "0" и "1". Будем считать, что устройство формирования звуковых сигналов имеет адрес 04. Схема алгоритма работы подпрограммы генерации звуковых колебаний (подпрограмма П.11) приведена на рис. 4.9.
Программа MAIN (программа П.12) представляет программу генерации сигналов с частотой, задаваемой числом с входного регистра.
Программа П.12
Адрес |
Машинный код |
Метка |
Мнемокод |
Комментарий |
0800 |
DB 05 |
MAIN |
IN 05 |
;записать число из входного регистра ;в аккумулятор |
0802 |
4F |
|
MOV C, A |
;записать число в регистр C |
0803 |
CD 000A |
|
CALL BPP |
;вызвать подпрограмму ВВР |
0806 |
C3 0008 |
|
JMP MAIN |
;продолжать |
|
|
|
|
|
Подпрограмма П.13
Адрес |
Машинный код |
Метка |
Мнемокод |
Комментарий |
0429 |
C5 |
DELA |
PUSH B |
;сохранить содержимое ;регистров В и С в стеке |
042A |
01 0100 |
|
LXI B, 0001 |
;установить |
042D |
C3 3104 |
|
JMP DEL1 |
;длительность 1мс |
0430 |
C5 |
DELB |
PUSH B |
;сохранить содержимое ;регистров В и С в стеке |
0431 |
F5 |
DEL1 |
PUSH PSW |
;сохранить содержимое PSW в стеке |
0432 |
AF |
|
XRA A |
;очистить аккумулятор |
0433 |
D5 |
|
PUSH D |
;сохранить содержимое ;регистров D и E в стеке |
0434 |
16 67 |
DEL2 |
MVI D,TIME |
;загрузить счетчик 1мс задержки |
0436 |
15 |
DEL3 |
DCR D |
;уменьшить содержимое счетчика на 1 |
0437 |
C2 3604 |
|
JNZ DEL3 |
;если не ноль, продолжать |
04A |
0B |
|
DCX B |
;уменьшить содержимое ;счетчика длительности на 1 |
043B |
B8 |
|
CMP B |
; |
043C |
C2 3404 |
|
JNZ DEL2 |
; |
043F |
B9 |
|
CMP C |
; |
0440 |
C2 3404 |
|
JNZ DEL2 |
;если не 0, продолжать |
0443 |
D1 |
|
POP D |
;восстановить содержимое ;регистров D,E |
0444 |
F1 |
|
POP PSW |
;то же, PSW |
0445 |
C1 |
|
POP B |
;то же, B,C |
0446 |
C9 |
|
RET |
|
При использовании подпрограмм за счет изменения входных параметров можно влиять на конечный результат выполнения подпрограмм.
Рассмотрим это на примере подпрограммы регулируемой временной задержки (подпрограмма П.13).
Программа состоит из двух подпрограмм:
DELB (адрес 0430) и DELA (адрес 0429).
Подпрограмма DELB осуществляет регулируемую временную задержку, и входным параметром ее является двухбайтное число, записанное в паре регистров (B,C). Это число и определяет длительность задержки в миллисекундах.
Частным случаем подпрограммы DELB является подпрограмма DELA, осуществляющая фиксированную задержку в 1 мс и не имеющая входных параметров. Таким образом, если необходимо иметь в программе фиксированную задержку в 1 мс, то можно обращаться с помощью команды CALL к подпрограмме DELA. При необходимости получения определенной заданной временной задержки в программе необходимо записать соответствующее число в регистры B,C, а затем вызвать подпрограмму DELB
Задания для домашней подготовки .
Изучите временные диаграммы выполнения микро-ЭВМ команд CALL<A2><A1> и RET.
Ознакомьтесь с командами вызова и возврата из подпрограммы по условию для МП БИС .
Определите, при каких числах, записанных в регистре В, подпрограмма П.9 будет осуществлять минимальное и максимальное время задержки. Определите эти времена, если машинный такт Т=1 мкс.
Разработайте подпрограмму 5- и 10- секундной временной задержки.
Составьте программу, последовательно включающую светодиоды выходного устройства на время соответственно 10 и 5 с. При разработке программы воспользуемся подпрограммами, разработанными в п.4 задания (рис. 4.10).
Определите для подпрограммы П.13, при каких числах в регистрах В и С будет максимальное и минимальное время задержки. Определите эти времена, если машинный такт Т=1 мкс.
Разберите программу П.14, определяющую, какой из восьми переключателей входного устройства (адрес 05) микро-ЭВМ установлен в положение "0":
а) составьте алгоритм работы программы П.14;
б) запишите подпрограмму, используемую в программе П.14;
в) установите, в каком регистре МП БИС содержится информация о номере переключателе входного устройства, установленном в "0";
г) определите, как будет работать программа П.14, если на входном устройстве будут установлены в положение "0" не один, а несколько переключателей.
Программа П.14
Адрес |
Машинный код |
Метка |
Мнемокод |
Комментарий |
0800 |
31 B00B |
|
LXI SP,0BBO |
;запись в указатель стека SP ;адрес 0900 |
0803 |
DB 20 |
WAITC |
IN 20 |
;получить число из входного ;устройства |
0805 |
FE FF |
|
CPI FF |
;содержит ли какой-либо разряд ;число 0 |
0807 |
CA 0308 |
|
JZ WAITC |
;если нет, то ждать |
080A |
CD 1008 |
|
CALL IDSW |
;если да, то вызвать подпрограмму ;определения разряда, ;в котором записан 0 |
080D |
CF |
|
RST 1 |
;окончить выполнения программы |
0810 |
06 FF |
IDSW |
MVI B, FF |
;записать в регистр B число FF |
0812 |
04 |
SRCH |
INR B |
;увеличить содержимое ;регистра В на 1 |
0813 |
0F |
|
RRC |
;сдвинуть число в аккумуляторе ;вправо |
0814 |
DA 1208 |
|
JC SRCH |
;если С=1, то продолжать |
0817 |
C9 |
|
RET |
;возврат из подпрограммы |
|
|
|
|
|
Задание к лабораторной работе
Задание 1. Исследовать процесс выполнения команд вызова и возврата из подпрограммы, а также команд работы со стеком
Порядок выполнения задания:
Ввести в микро-ЭВМ подпрограмму П.15.
Выполнить программу П.15 по командам, используя режим выполнения программы по командам. После каждой команды проверить содержимое всех регистров МП БИС.
Выполнить команды CALL STDY , PUSH PSW , POP , RET по машинным циклам и построить временные диаграммы их выполнения микро-ЭВМ.
Заменить в подпрограмме П.15 команду POP PSW на команду NOP(00) и проследить, как будет выполняться подпрограмма П.15. Объяснить происшедшие изменения.
Подпрограмма П.15
Адрес |
Машинный код |
Метка |
Мнемокод |
Комментарий |
0800 |
31 B00B |
|
LXI SP,0BB0 |
;записать в указатель стека SP адрес 0BB0 |
0803 |
CD 0708 |
|
CALL STDY |
;вызвать подпрограмму STDY |
0806 |
CF |
|
RST 1 |
;остановить выполнение ;подпрограммы |
0807 |
F5 |
STDY |
PUSH PSW |
;записать слово состояние МП БИС ;в стек |
0808 |
C5 |
|
PUSH B |
;записать содержимое регистров ;В,С в стек |
0809 |
D5 |
|
PUSH D |
;записать содержимое регистров ;D,E в стек |
080A |
E5 |
|
PUSH H |
;записать содержимое регистров ;H,L в стек |
080B |
3E 05 |
|
MVI A, 05 |
;записать в регистр А число 05 |
080D |
47 |
|
MOV B, A |
;записать число из регистра А в ;регистр В |
080E |
87 |
|
ADD A |
;удвоить содержимое аккумулятора |
080F |
5F |
|
MOV E, A |
;записать число из регистра А ;в регистр Е |
0810 |
67 |
|
MOV H, A |
;записать число из регистра А ;в регистр Н |
0811 |
E1 |
|
POP H |
;записать числа из стека ;в регистры H, L |
1812 |
D1 |
|
POP D |
;записать числа из стека в ;регистры D, E |
0813 |
C1 |
|
POP B |
;записать числа из стека ;в регистры B, C |
0814 |
F1 |
|
POP PSW |
;записать слово состояния из ;стека в МП БИС |
0815 |
C9 |
|
RET |
;возврат из подпрограммы |
Задание 2. Исследовать программу временной задержки на примере работы программы генерации звуковых колебаний (программа П.12).
Порядок выполнения задания:
Собрать и подключить схему выдачи звуковых сигналов к микро-ЭВМ так , как показано на рис.4.8
Записать полный текст программы П.12 для генерации звуковых сигналов с учетом подпрограмм П.10 и П.11 . Ввести в микро-ЭВМ программу.
Установить на входном устройстве число 00.
Осуществить пуск программы с адреса 0800.
Проследить за изменением тона звука, формируемого микро-ЭВМ в процессе выполнения программы, увеличивая число, записанное во входном устройстве .
Задание 3. Исследовать программу регулируемой временной задержки на примере программы, последовательно включающей и выключающей светодиоды выходного устройства на время соответственно 10 и 5 с .
Порядок выполнения задания:
Ввести в микро-ЭВМ программу, разработанную в п.5 задания для домашней подготовки.
Осуществить пуск программы и проверить ее выполнение микро-ЭВМ.
Изменить числа, записанные в регистрах В, С, в подпрограмме регулированной временной задержки (подпрограмма П.13). Проверить возможность изменения длительности задержки.
Задание 4. Исследовать программу П.14 .
Порядок выполнения задания:
Ввести программу П.14 в микро-ЭВМ.
Установить на входном устройстве переключатели соответственно числу FF. Осуществить пуск программы. Убедиться, что микро-ЭВМ будет находиться в режиме ожидания появления “0” в любом разряде входного устройства.
Установить 0 с помощью переключателей в любом из разрядов входного устройства. Проверить содержимое регистров МП БИС после окончания выполнения программы П.14.
Осуществить повторный запуск программы при наличии нулей в двух разрядах входного устройства. Какое число будет записано в регистре В МП БИС после окончания выполнения программы ?
Работа на учебной ЭВМ
Учебная микро-ЭВМ содержит схему выдачи звуковых сигналов. Адрес внешнего устройства для записи данных в схему выдачи звуковых сигналов - 04.
Ряд подпрограмм записан в ПЗУ микро-ЭВМ. В частности, все записанные в ПЗУ и приведенные в описании лабораторной работы программы, имеют адрес меньше 0800.
Все приведенные в лабораторной работе программы и порядок их выполнения могут быть без каких-либо изменений выполнены на учебной микро-ЭВМ.
Содержание отчета
Отчет должен содержать:
Временные диаграммы выполнения команд CALL<A2><A1>, RET.
Ответы на вопросы пп.4,6 задания для домашней подготовки.
Полный перечень команд вызова и возврата из подпрограмм для МП БИС КР580ВМ80.
Разработанные в процессе домашней подготовки программы 5- и 10-секундной задержки.
Перечень команд работы со стеком для МП БИС КР580ВМ80.
Ответы на вопросы, поставленные в п.7 задания для домашней подготовки .
Задания для самопроверки
Укажите количество машинных тактов выполнения команды CALL<A2><A1> .
В какой последовательности записывается и считывается из стека содержимое аккумулятора и регистра признаков МП БИС при выполнении команд PUSH PSW и POP PSW .
С помощью каких команд можно задать или переобозначить область памяти, отведенную под стек ?
Укажите порядок выполнения микро-ЭВМ команды RET .
Сравните процесс выполнения микро-ЭВМ команд CALL и RST .
Как нужно изменять подпрограмму П.13, чтобы временная задержка, получаемая в результате ее выполнения, определялась числами, записанными по адресам 0В00 и 0В01 ?
В какой последовательности сохраняется и извлекается содержимое регистров МП БИС в подпрограммах ?
Какой минимальный адрес будет записан в указатель стека SP МП БИС при выполнении подпрограммы П.15 ?
Как будет выполняться подпрограмма П.15, если вместо команды РОР в ней будет записана команда NOP ?
Какое максимальное время задержки может обеспечивать подпрограмма П.10, если длительность машинного такта Т=1 мкс ?
Какое максимальное и минимальное время задержки может обеспечивать подпрограмма П.13, если длительность машинного такта Т=1 мкс ?
Как увеличить время задержки с использованием подпрограммы П.13 ?
