Справочник по языку Ассемблера IBM PC

       

RET/RETF


(RETurn/RETurn Far from procedure)

Возврат ближний (дальний) из процедуры

 

Схема команды:  ret 
ret число

Назначение: возврат управления из процедуры вызывающей программе.


Алгоритм работы:


Работа команды зависит от типа процедуры:

    для процедур ближнего типа — восстановить из стека содержимое eip/ip;

    для процедур дальнего типа — последовательно восстановить из стека содержимое eip/ip и сегментного регистра cs.



    если команда ret имеет операнд, то увеличить содержимое esp/sp на величину операнда число; при этом учитывается атрибут режима адресации — use16 или use32:

если use16, то sp=(sp+число), то есть указатель стека сдвигается на число байт, равное значению число;

если use32, то sp=(sp+2*число), то есть указатель стека сдвигается на число слов, равное значению число.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:


Команду ret необходимо применять для возврата управления вызывающей программе из процедуры, управление которой было передано по команде call. На самом деле микропроцессор имеет три варианта команды возврата ret - это ret, ее синоним retn, а также команда retf. Они отличаются типами процедур, в которых используются. Команды ret и retn служат для возврата из процедур ближнего типа. Команда retf — команда возврата для процедур дальнего типа. Какая конкретно команда будет использоваться, определяется компилятором; программисту лучше использовать команду ret и доверить транслятору самому сгенерировать ее ближний или дальний вариант. Количество команд ret в процедуре должно соответствовать количеству точек выхода из нее.
Некоторые языки высокого уровня, к примеру Pascal, требуют, чтобы вызываемая процедура очищала стек от переданных ей параметров. Для этого команда ret содержит необязательный параметр число, который, в зависимости от установленного атрибута размера адреса, означает количество байт или слов, удаляемых из стека по окончании работы процедуры.

my_proc proc ...         ret     6         endp         

См. также: уроки 10, 14 и команду



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