Иллюстрированный самоучитель по Assembler

       

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



Содержание раздела