ENTER 指令为被调用过程自动创建堆栈帧。它为局部变量保留堆栈空间,把 EBP 入栈。具体来说,它执行三个操作:
ENTER 有两个操作数:第一个是常数,定义为局部变量保存的堆栈空间字节数;第二个定义了过程的词法嵌套级。
ENTER numbytes, nestinglevel
这两个操作数都是立即数。Numbytes 总是向上舍入为 4 的倍数,以便 ESP 对齐双字边界。Nestinglevel 确定了从主调过程堆栈帧复制到当前帧的堆栈帧指针的个数。在示例程序中,nestinglevel 总是为 0。
【示例 1】下面的例子声明了一个没有局部变量的过程:
MySub PROC
enter 0,0
它与如下指令等效:
MySub PROC
push ebp
mov ebp, esp
【示例 2】ENTER 指令为局部变量保留了 8 个字节的堆栈空间:
MySub PROC
enter 8,0
它与如下指令等效:
MySub PROC
push ebp
mov ebp,esp
sub esp,8
下图为执行 ENTER 指令前后的堆栈示意图。