据说该leave指令与以下内容相同:
mov esp,ebp
pop ebp
Run Code Online (Sandbox Code Playgroud)
但这是mov esp,ebp为了什么?这对我来说似乎没有用......
我发现ESP寄存器是当前的堆栈指针,而EBP是当前堆栈帧的基本指针.但是,我不明白这些定义(我刚开始学习如何在汇编程序中编写代码).
据我所知,ESP指向堆栈本身,EBP指向堆栈顶部的任何东西.但这些只是我的猜测而且很可能是不正确的.否则,如下所述的声明是什么意思?
MOV EBP, ESP
Run Code Online (Sandbox Code Playgroud)
编辑:我认为上面的陈述是我书的错字.我认为它应该是EBX而不是EBP
我没有清楚地理解LEAVE函数,它是这两条指令的缩写:
MOV ESP, EBP
POP EBP
Run Code Online (Sandbox Code Playgroud)
因此MOV ESP, EBP将ESP向下移动到EBP(堆栈的开始)的水平.
然后POP EBP,移动ESP指向的值并将其影响到EBP,并将ESP向下移动一步.
但我真的没有看到,这两个操作如何与离开函数的事实相关联(这是目的LEAVE).
你能帮我澄清一下吗?