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

Этих команд две, и они приведены в табл. 3.7.

Таблица 3.7 Состав команд операций вызова подпрограмм

Операция

Адресация

Мнемоника

КОП

Байты

Формат

команды

Символика

Вызов

подпрограммы

Возврат

из подпрограммы

непосредственная,

косвенная

регистровая

косвенная

регистровая

CALL

RET

CD

C9

3

1

КОП

Мл. адрес

Ст. адрес

КОП

((SP)-1)         (PCH)  

((SP)-2)         (PCL)

(SP)           (SP)-2

(PC)           (address)

Команды вызова CALL и возврата RET всегда используются парами. При их выполнении индикаторы не изменяются.

Трехбайтовая команда CALL используется основной программой для перехода МП (или ветвления) к подпрограмме. В примере на рис. 3.11 подпрограмма является короткой последовательностью команд, целью которой является создание интервалов времени в течение 1 с.

Когда МП передает первую команду CALL по адресу 1000, он находит адрес перехода в двух следующих байтах программы. Адрес следующей команды за CALL отправляется в стек, не показанный на рисунке, и МП переходит тогда по адресу 1000. Команды, которые составляют эту программу счета времени, выполняются, пока МП не передаст команду возврата RET.

Сохраняющийся в стеке адрес (2010) отыскивается счетчиком команд, и МП продолжает выполнение основной программы, принимая ее там, где МП ее покинул. Это нормальное выполнение продолжается до тех пор, пока МП не встретит другую команду вызова по адресу 2020.

Микропроцессор сохраняет адрес следующей команды (2023) в стеке и переходит на подпрограмму, начинающуюся адресом 1000. После завершения выполнения этой подпрограммы команда возврата извлекает из стека адрес следующей команды основной программы и загружает его в счетчик команд.

Данная подпрограмма может быть использована много раз в ходе выполнения одной и той же основной программы. Подпрограмма может быть расположена в ОЗУ или ПЗУ. Команда вызова сочетает функции операций загрузки в стек и перехода.