赞
踩
在函数调用发生的时候,需要在栈中做一系列的压栈工作,确保调用方的信息能够安全的保存,被调用函数的参数能够正确地传入。这里,需要做的工作如下:
1 压入被调用方的函数参数。
2 压栈返回地址,确保函数调用结束后能够正确的执行剩余代码。
3 保存栈底,更改占栈底和栈顶。 esp寄存器是栈顶,ebp寄存器是栈底。
具体操作: push ebp 将esp寄存器压栈,保存上个函数的栈底。
mov ebp esp 将栈顶内容存入栈底,发生一次新的调用时 原来的栈顶变成了栈顶。
sub esp x 将栈顶向上移动。
4 压栈寄存器内内容 保存寄存器。
其中 第3 4 步是在被调函数的函数头进行执行的。
具体参考: 《程序员的自我修养》第10.2.1节 p288。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。