Особенности использования команд 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.