(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 и команду call