前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSAPP第三章(3)

CSAPP第三章(3)

作者头像
HeaiKun
发布2020-07-06 15:08:10
4840
发布2020-07-06 15:08:10
举报
文章被收录于专栏:HeaiKunHeaiKun
第三章总结

前面讲了汇编的基本语法,后面主要讲的就是 相对于C语言这样的高级语言中的一些语法结构进行汇编级别的解析。当然对于再复杂的C语言结构语法,最终都是那些简单的汇编语法组合而成的。

我们要先了解运行时栈等相关的基础知识后,再去理解一个函数调用另一个函数的过程是怎么实现的。

例如函数P调用函数Q,函数Q执行完之后返回到函数P的过程:

  1. 传递控制。简单的来说就是让CPU去不去执行P函数了,跳转的Q函数进行执行。其实汇编的处理就很简单,就是讲程序计数器设置成Q代码的起始位置就行了,接下来就会直接执行Q代码,这里要注意的是,离开P函数的时候,要记录之后P代码继续执行的位置,以便后续Q函数执行完,返回P函数的时候进行一些必要的恢复。
  2. 数据传递。在函数调用的时候,我们还要进行必要的数据传递,包括P函数传递给Q函数的数据和Q函数执行完返回给P函数的数据。
  3. 栈上的局部存储。我们看到的大多数过程都不需要超出寄存器大小的本地存储区域。不过有些时候需要将局部数据放在内存中。如寄存器大小不足、局部变量使用&取地址、局部变量是数组或结构的时候。除了寄存器大小不足,其他都是需要用地址的时候,会放在内存中。

递归:递归就是自己调用自己,每一个函数调用 在栈中都有它自己的私有空间,因此同一个函数的多个未完成的调用的局部变量不会相互影响,此外栈的原则很自然的提供了适当的策略:当过程调用时,分配局部存储,当返回时,释放存储。

第三章主要讲的就是C语言一些基本功能的实现在汇编层次上是怎么做的,这一章能够让我们对机器的运作有一个相对深度的认识。

推荐阅读CSAPP《深入理解计算机系统》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HeaiKun 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第三章总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档