RET Возврат из процедуры
RETN Возврат из ближней процедуры
RETF Возврат из дальней процедуры
Команда ret извлекает из стека адрес возврата и передает управление назад в
программу, первоначально вызвавшую процедуру. Если командой ret завершается
ближняя процедура, объявленная с атрибутом near, или используется модификация
команды retn, со стека снимается одно слово- относительный адрес точки возврата.
Передача управления в этом случае осуществляется в пределах одного программного
сегмента. Если командой ret завершается дальняя процедура, объявленная с атрибутом
far, или используется модификация команды retf, со стека снимаются два слова:
смещение и сегментный адрес точки возврата. В этом случае передача управления
может быть межсегментной.
В команду ret может быть включен необязательный операнд (кратный 2), который
указывает, на сколько байтов дополнительно смещается указатель стека после возврата
в вызывающую программу. Прибавляя эту константу к новому значению SP, команда
ret обходит аргументы, помещенные в стек вызывающей программой (для передачи
процедуре) перед выполнением команды call. Обе разновидности команды не воздействуют
на флаги процессора.
Пример 1
…
call subr ;Вызов подпрограммы
subr proc near
. . . ;Тело процедуры-подпрограммы
ret subr endp
Пример 2
push AX ;Параметр 1, передаваемый в
;подпрограмму
push SI ;Параметр 2, передаваемый в
;подпрограмму
call subr ;Вызов подпрограммы
…
subr proc near
…
;Извлечение из стека параметров
; (без изменения содержимого SP)
ret 4 ;Возврат в вызывающую
;программу и снятие со стека
;двух слов с параметрами
subr endp