为什么有函数调用栈?

为什么引入栈

完成函数调用的过程,需要有个地方存放函数调用返回后要执行的指令地址(简称返回地址)

极客时间-深入计算机组成原理

函数调用过程中,栈的使用

A1
call B
A3

B1
B2
retq
  • rip寄存器: 存放下一条要执行的指令地址
  • callq指令做两件事
  1. 把rip的地址A3压栈(也就是被调用函数返回后,调用者本来接下来会执行的那条指令的地址) // 本来这个指令地址都被放在rip了,正常情况就要执行了,但是被call指令弄走了.
  2. 把被调用函数的第一条指令地址放入rip,使得cpu下一个就开始执行子函数。
  • retq指令做1件事
  1. 把栈的A3弹出,放入rip。使得cpu加下来继续执行A函数。

深入理解计算机系统-3.7

原文地址:https://www.cnblogs.com/yudidi/p/12439271.html