码迷,mamicode.com
首页 > 其他好文 > 详细

为什么有函数调用栈?

时间:2020-03-07 23:46:18      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:理解   入栈   使用   mic   ret   技术   返回   调用   http   

为什么引入栈

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

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

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

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

为什么有函数调用栈?

标签:理解   入栈   使用   mic   ret   技术   返回   调用   http   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!