栈:一种在计算机内部模拟“先进后出”的数据结构。
栈指针寄存器:ESP寄存器,指向栈的顶部。
帧指针寄存器:EBP寄存器,指向栈的底部。
栈帧:每条语句,或每个过程都有自己的栈区。所以栈帧在栈指针和帧指针之间。
例如: void function(int x,int y,int z){ // 先Z入栈,再y,再z
}
- 栈的存储区域为:从高地址向低地址存放,高地址在栈底,低地址趋向栈顶。
z的地址 高于 y的地址 高于 x的地址
PUSH POP MOV 分别用于元素的入栈、出栈、入栈操作。
CALL 调用函数指令,在跳转到被调用的函数前,先把返回地址压栈。
RET 函数结果返回指令,在返回调用过程之前从栈中取回返回地址。
总结:调用指令CALL和返回指令RET。都属于无条件转移指令,会改变程序的执行过程。
- 调用者寄存器与被调用者寄存器:用于函数调用过程中变量和结果的临时存储。
调用者保存寄存器:EAX寄存器、ECX寄存器、EDX寄存器
被调用者保存寄存器:EBX寄存器、ESI寄存器、EDI寄存器
函数的形参在函数执行的时候是一个局部变量。
局部变量被保存在栈中间或者栈的寄存器中。
全局变量通常被保存在静态存储区。