Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 4 - V-пр+.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
415.74 Кб
Скачать

4.7. Команды операций вызова подпрограмм и возврата в основную программу

Этих команд две, это команды вызова (CALL) и возврата (RET), всегда используемые парами. При их выполнении в регистре F изменений нет.

Трехбайтовая команда CALL (см. табл. 4.1) используется основной про­граммой для перехода MП (или ветвления) к подпрограмме. В примере на рис. 4.9 подпрограмма является короткой последовательностью команд, целью кото­рой является создание интервалов времени. Когда МП передает первую команду CALL по адресу 1000 Н, он находит адрес перехода в двух следующих байтах программы. Адрес, следующей за САLL команды (2010Н), отправляется в стек (на рис. 4.9 не показан) и МП переходит в начало подпрограммы по ад­ресу 1000 Н для выполнения подпрограммы, например подпрограммы задержки на 1 с.

После выполнения подпрограммы МП получит команду RЕТ, после чего счет­чиком команд отыскивается сохраняющийся в стеке адрес 2010 Н и MП продолжает выполнение основной программы, принимая ее там, где он ее оста­новил. Это нормальное выполнение основной программы будет идти до тех пор, пока МП не встретит другую команду вызова, например по адресу 2020 Н, при этом может вызываться та же самая подпрограмма задержки времени на 1 с. Подпрограммы могут быть расположены в ОЗУ или ПЗУ. В ПЗУ располагают подпрограммы, позволяющие выполнять функции МП: умножить, сложить и другие.

Рис. 4.9. Пример программы создания интервалов времени

4.8. Команда загрузки в стек и возврата в основную программу

Микропроцессор К580ВМ80 содержит указатель стека – специализиро- ванный 16-разряданый регистр – счетчик, содержимым которого всегда явля- ется адрес. Этот адрес указывает на группу ячеек памяти данных, содержащихся в ОЗУ, которая называется стеком. Указатель стека SР загружается старшим адресом ячеек памяти ОЗУ с данными, представляющими собой вершину стека, но обычно адрес в SР на единицу старше адреса первой ячейки памяти стека.

Данные можно заносить в стек, используя команды (см. табл. 4.1 и 4.3) PUSH (поместить) или CALL (вызвать), и считать из стека по командам POP (извлечь) или REТ (возврат). Стек функционирует как память с последовательным доступом по типу: данные, поступившие последними, извлекаются первыми (тип LIFO от Last In - First Out - последний входит - первый выходит). Команда загрузки в стек PUSH HL приводит к результату, показанному на рис. 4.10, a. Содержимое пары регистров HL помещается в стек в две ячейки памяти в последовательности:

1) указатель стека SР декрементируется от 220А Н до 2209 H;

2) SР по адресной шине показывает на ячейку памяти 2209 и в нее помещается старший байт регистра HL (0000 00002);

3) указатель стека снова декрементируется от 2209 Н до 2208 Н;

4) SР по адресной шине показывает на ячейку памяти 2208 и в нее помещается младший байт регистра HL (0000 1111). Стек по команде PUS H РSW загружается содержимым аккумулятора и регистра F. PSW соответствует слову состояния программы (Рrogram Status Word ), которое является содержимым аккумулятора и регистра F. Команда PUSН РSW однобайтовая, содержимое А (0101 0101) помещается первым рис. 4.10, б в ячейку памяти по адресу 2207. Указатель стека после этого вновь декрементируется от 2207 до 2206 и теперь указывает на ячейку стека 2206, в которую загружается содержимое регистра F (1111 11112). Стек может продолжать расти пока длится процесс загрузки в него.

Обычно каждой команде РUSН соответствует команда извлечения из стека (POP), по которой данные берутся из вершины стека в порядке, обратном загрузке, т. е. адрес 2206 H, и по команде на адрес 2207 стека, данные (0101 0101) из этой ячейки извлекаются и пересылаются через АЛУ в аккумулятор.

Рассмотрим команду POP на рис. 4.10, в. Аккумулятор и регистр F свободны до операции извлечения из стека. Последовательность выполнения команды POP:

1. Содержимое ячейки стека (1111 11112) переслано в АЛУ и далее помещено в регистр F.

2. Указатель стека SР инкрементирован с 2206 до 2207. SР теперь указывает на адрес 2207 стека.

3. SР вновь инкрементируется c 2207 до 2208 и указывает на следующий адрес извлечения из стека.

Примерно аналогично командам PUSH H и РОР Н загружаются в стек данные программы при выполнении команд CALL и RЕT .

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