Команда "возврат из подпрограммы" последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая указателья стека на 2. Выполнение основной программы обычно продолжается по адресу команды, следующей за ACALL или LCALL. На флаги эта команда не влияет.
Ассемблер:
| RET
| Код:
| | | Время:
| 2 циклa
| Алгоритм:
| (PC)[15-8]:=((SP)), (SP):=(SP)-1, (PC)[7-0]:=((SP)), (SP):-(SP)-1
| Пример:
| ;(SP)=0DH, (ОЗУ[0C])=93H, (ОЗУ[0D])=02H
RET ;(SP)=0BH, (PC)=0293H
| |
Команда RETI
Команда "возврат из прерывания" выгружает старший и младший байты счетчика команд из стека и устанавливает "логику прерываний", разрешая прием других прерываний с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. Указатель стека уменьшается на 2. Слово состояния программы (PSW) не восстанавливается автоматически. Выполнение основной программы продолжается с команды, следующей за командой, на которой произошел переход к обнаружению запроса на прерывание. Если при выполнении команды RETI обраружено прерывание с таким же или меньшим уровнем приоьритета, то одна команда основной программы успевает выполниться до обработки такого прерывания.
Ассемблер:
| RETI
| Код:
| | | Время:
| 2 циклa
| Алгоритм:
| (PC)[15-8]:=((SP)), (SP):=(SP)-1, (PC)[7-0]:=((SP)), (SP):-(SP)-1
| Пример:
| ;(SP)=0BH, (ОЗУ[0A])=2AH, (ОЗУ[0B])=03H,
;(PC)=УУУУH, где У=0-FH
RETI ;(SP)=09H, (PC)=032AH
| |