为什么有函数调用栈?
为什么引入栈
完成函数调用的过程,需要有个地方存放函数调用返回后要执行的指令地址(简称返回地址)
极客时间-深入计算机组成原理
函数调用过程中,栈的使用
A1
call B
A3
B1
B2
retq
- rip寄存器: 存放下一条要执行的指令地址
- callq指令做两件事
- 把rip的地址A3压栈(也就是被调用函数返回后,调用者本来接下来会执行的那条指令的地址) // 本来这个指令地址都被放在rip了,正常情况就要执行了,但是被call指令弄走了.
- 把被调用函数的第一条指令地址放入rip,使得cpu下一个就开始执行子函数。
- retq指令做1件事
- 把栈的A3弹出,放入rip。使得cpu加下来继续执行A函数。
深入理解计算机系统-3.7