LEAVE
(LEAVE from procedure)
Выход из процедуры
Схема команды: | leave |
Назначение: удаление из стека области локальных (динамических) переменных, выделенной командой enter.
Алгоритм работы:
команда выполняет обратные команде enter действия:
содержимое ebp/bp копируется в esp/sp, тем самым восстанавливается значение esp/sp, которое было до вызова данной процедуры. С другой стороны, восстановление старого значения esp/sp означает освобождение пространства в стеке, отведенного для завершающейся процедуры (локальные переменные процедуры уничтожаются);
из стека восстанавливается содержимое ebp/bp, которое было до входа в процедуру. После этого действия значение esp/sp также становится таким, каким оно было до входа в процедуру.
В результате этих двух действий также восстанавливается кадр стека, если он был, вызывающей программы.
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги |
Применение:
Команда leave не имеет операндов и выполняет обратные команде enter действия. Эта команда должна находиться непосредственно перед командой ret, которая в зависимости от соглашений конкретного языка по вызову процедур удаляет или не удаляет аргументы из стека (см. урок 14).
.286 proc1 proc enter 16,0 ... leave ret proc1 endp |
См. также: урок 14 и команды ,