欢迎光临
我们一直在努力

汇编语言ENTER和LEAVE指令:创建和结束堆栈帧

ENTER 指令为被调用过程自动创建堆栈帧。它为局部变量保留堆栈空间,把 EBP 入栈。具体来说,它执行三个操作:

  • 把 EBP 入栈 (push ebp)
  • 把 EBP 设置为堆栈帧的基址 (mov ebp, esp)
  • 为局部变量保留空间 (sub esp, numbytes)

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 指令前后的堆栈示意图。

执行ENTER指令后的堆栈

赞(0) 打赏
未经允许不得转载:hosteons中文网 » 汇编语言ENTER和LEAVE指令:创建和结束堆栈帧

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册