(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
ESP的维护是系统自我保持,故调用函数只用维护EBP即可
e.g 在main()函数中调用函数:(下图中 rbp就是ebp)
首先确保调用后可以返回main()函数的正确位置,则压入原本的的rbp地址便于最后的返回
将rbp移动到rsp的位置,则确定了该函数的栈帧的底部即rbp
为临时变量分配位置,如例子中分配了32位空间,其上为压入栈内的参数,其下为临时变量
因为rsp是一直更新的,故所有数据的寻址和地位都是依靠rbp。
在函数运行完成后(即大括号内内容结束)
(补充 :eax为存储返回值的寄存器)
首先将原本的rbp的位置弹出,即回到原本的位置,rsp随之维护,从而达到退出该函数(从栈的角度,是退出了该函数的栈帧)
从而实现了函数的调用。
这就是函数调用部分中的栈的维护。