首页 > 其他 > 详细

为什么有函数调用栈?

时间:2020-03-08 00:42:43      阅读:77      评论:0      收藏:0      [点我收藏+]

为什么引入栈

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

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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!