Программирование на Ассемблере


Особенности использования команд ENTER и LEAVE


Анализ функций, составленных ранее, показывает, что в функции требуется:

·        Сохранить и сформироваить значение регистра EBP;

·        Выделить локальную память.

Для обеспечения этих операций можно использовать команду ENTER (вход), а для автоматического освобождения локальной области и восстановления регистра EBP – команду LEAVE (выход).

Общий вид команды ENTER:

ENTER оп1, оп2

Оп1- определяет размер локальной области в байтах (константное выражение);

Оп2 – уровень вложенности функций (Константное выражение 0 .. 31). Для каждого уровня вложенности копируется фрейм стека при создании нового фрейма. Это делается для обеспечения возможности доступа к параметрам и локальной области внешних функций.

Команда ENTER , если она используется, является первой командой функции, а команда LEAVE – непосредственно перед командой RET.

Если уровень вложенности равен 0, то вставляются команды:

PUSH  EBP

MOV   EBP, ESP

SUB     ESP, оп1.

Для уровня вложенности один или больше, процессор сохраняет указатели на фреймы стеков для предыдущих уровней (содержимое регистра EBP для всех предыдущих уровней).

Команда LEAVE выполняет действия, обратные действиям ENTER, в том числе восстановление регистра EBP.



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