栈帧:一个函数执行的环境,一个栈帧代表一个函数
栈帧结构:
一组栈帧 | |
---|---|
寄存器 | -->SP |
局部变量 | |
bp以前的值 | -->BP |
返回地址 | |
参数 |
SP:指向栈顶
BP:指向上一个函数返回值的位置
函数调用流程(内存):
- push 参数
- push 函数的返回地址
- push bp (保留bp的旧值,方便后面恢复)
- mov bp , sp (保留sp之前的值,方便后面恢复)
- sub sp , 空间大小 (给局部变量分配空间)
- 保护可能要用的寄存器
-----执行业务逻辑------
- 恢复寄存器的值
- mov sp , bp (恢复sp到旧值)
- pop bp (恢复bp到旧值)
- ret (pop返回地址,执行下一条指令)
- 恢复栈平衡
网友评论