Главная страница
Предыдущая страница (десятичная арифметика)

Команды enter и leave

1) Команда enter создаёт стековый кадр заданного размера и уровня вложенности (оба операнда – числа; уровень вложенности может принимать значения только от 0 до 31) с целью вызова процедуры, использующей динамическое распределение памяти в стеке для своих локальных переменных. Например, команда enter 2048, 15 помещает в стек указатели на стековый кадр текущей процедуры и той, из которой вызывалась текущая, затем создаёт стековый кадр размером 2 Кб для вызываемой процедуры (тратит в сумме на всё 4 + 4*15 + 2048 байт), и помещает в ebp адрес начала кадра. Приведём пример. Пусть процедура main имеет уровень вложенности 0, процедура proca запускается из main и имеет уровень вложенности 1; procb – запускается из proca и имеет уровень вложенности 2. Тогда стек при входе в процедуру main выглядит так, как на рисунке 1. На рисунках 2 и 3 показан стек при входе в процедуры proca и procb

2) Команда leave выполняет действия, противоположные команде enter. Фактически leave только копирует ebp в esp, тем самым выбрасывая весь последний кадр, созданный последней выполненной командой enter, и считывает из стека ebp для предыдущей процедуры, что одновременно восстанавливает и значение, которое имел esp до вызова последней команды enter


Следующая страница (пояснения и комментарии)