RET/RETN/RETF

Синтаксис RET число
Машинный
код
СЗ — ret (близкий возврат)
СВ — ret (дальний возврат)
С2 i16 — ret i16 (близкий возврат с выталкиванием i16 байт из стека)
СА i16 — ret i16 (дальний возврат с выталкиванием i16 байт из стека)
Описание Возврат из процедуры.
Действие Передача управления по адресу, расположенному на вершине стека. Этот адрес обычно помещается в стек командой CALL, его значение соответствует команде, следующей за командой CALL. Необязательный операнд число определяет количество байтов стека, которые будут вытолкнуты после выталкивания адреса возврата. Команда RET используется для выполнения трех вариантов возврата управления:

  • Близкий возврат — возврат управления вызывающей процедуре в пределах текущего сегмента кода (внутрисегментный возврат). При этом из вершины стека выталкивается значение в регистр EIP/IP. Регистр CS не изменяется. Процессор продолжает выполнение кода в том же сегменте, но по другому смещению.
  • Дальний возврат — возврат управления вызывающей процедуре, расположенной в отличном от текущего сегменте кода (межсегментный возврат). При этом из вершины стека последовательно выталкиваются значения в регистры EIP/IP и CS. Процессор продолжает выполнение кода
    в другом сегменте.
  • Дальний возврат между уровнями привилегий — дальний возврат управления коду на уровне привилегий, отличном от текущего. Этот вид возврата может быть выполнен только в защищенном режиме. Его механизм подобен механизму дальнего возврата за исключением того, что процессор следит за уровнями привилегий и правами доступа к сегментам кода и стека, которым возвращается управление для определения возможности подобной передачи. Команда RET очищает регистры DS, ES, FS и GS, если они ссылаются на соответствующие сегменты, недоступные на новом уровне привилегий. Так как при межуровневом возврате управления производится переключение стека, то команда RET также производит загрузку этих регистров из стека.
Флаги Изменяются только при переключении задачи.

К списку команд