Команды безусловных вызовов и возврата

Команда CALL adr безусловного вызова подпрограммы, расположенной по адресу adr, выполняется по следующей схеме:

stack(PC)

(PC)adr

На момент завершения дешифрации данной команды в счётчике команд процессора (PC) сформируется адрес команды стоящей в программе вслед за данной командой. Выполнением данной команды сначала запишется в стек этот адрес из (PC), а затем загрузкой в счётчик команд двухбайтного адреса adr из состава выполняемой команды управление процессором будет передано первой команде подпрограммы. Команда занимает в памяти 3 байта, состоит из 5 машинных циклов и требует на выполнение 17 тактов, то есть это одна из наиболее длительных по времени команд.

Команды вызова подпрограмм типа RST N, где N – номер команды (0..7), также обеспечивают безусловный вызов подпрограммы. Но при этом адрес подпрограммы фиксирован и определяется номером команды adr=N*8. Например, для команды RST 0 адрес подпрограммы будет 0000h, для RST 1 адрес подпрограммы будет 0008h, для RST 2 адрес подпрограммы будет 0010h и т.д. По формату команда однобайтная, требует на выполнение 11 тактов. Выполняются по той же схеме, что и команда CALL adr.

Команда безусловного возврата из подпрограммы RET обеспечивает возврат в подпрограмму простым образом. При выполнении команды читается двухбайтное число из вершины стека и принимается в счётчик команд. При корректной работе со стеком это число должно оказаться адресом команды следующей за вызовом подпрограммы, которая была сохранена в стеке командой вызова этой подпрограммы. Чтобы команда привела к нужному результату, программисту следует обратить внимание на корректное использование стековых операций на этапе действий подпрограммы. Пример организации взаимодействия вызывающей программы и подпрограммы с применением команд безусловных вызовов и возвратов представлен на рис. 1.1.

Рис. 1.1. Пример организации вызовов подпрограмм


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: