Команда "возврат из подпрограммы" последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая указателья стека на 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
| |