专栏首页HeaiKunCSAPP第三章(3)

CSAPP第三章(3)

第三章总结

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

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

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

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

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

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

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

本文分享自微信公众号 - HeaiKun(hhk-develop),作者:hehk

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++ Primer ---函数(读书笔记)

    一个函数是由 返回类型 函数名称 0个或多个形参以及函数体构成。 函数调用时 使用函数名称加小括号,小括号里面是实参。 函数调用时,完成部分的工作:

    HeaiKun
  • CSAPP之信息(上)

    许多操作系统使用8位的块作为最小可寻址内存单元,我们把内存看做一个很大的数组,最小可寻址单元的大小就是一个数组成员的大小。

    HeaiKun
  • C++ Primer ---类(读书笔记)

    使用struct 或者class可以创建一个类,类里面包含成员变量,成员函数。如下:

    HeaiKun
  • 【笔记】《C++Primer》—— 第6章:函数

    函数这一节内容又多又杂,但是相当有用,尤其是其中关于引用的应用和最后的调试部分。可能会比较长,等下一节写完就来做个小总结。

    ZifengHuang
  • 学会使用函数式编程的程序员(第1部分)

    在这篇由多部分组成的文章中,接下来将介绍函数式编程的一些概念,这些概念对你学习函数式编程有所帮助。如果你已经懂了什么是函数式编程,这可以加深你的理解。

    前端小智@大迁世界
  • python高阶函数

    高阶函数定义: 1.函数接收的参数是一个函数名; 2.函数返回的是一个函数名; 只要满足上述条件中的任意一个条件的函数均属于高阶函数

    py3study
  • 0基础学习C语言第六章:函数

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

    诸葛青云
  • 码如其人,同学你能写一手漂亮的Python函数吗

    在机器学习中,我们经常需要使用类和函数定义模型的各个部分,例如定义读取数据的函数、预处理数据的函数、模型架构和训练过程的函数等等。那么什么样的函数才是漂亮的、赏...

    用户2769421
  • Python之函数编程(2)

    在上面的命令中,我们定义一个return_sum()的函数,这个函数返回一个sum的函数,sum函数的作用是求一个可迭代对象的所有元素的和,当我们直接调...

    AsiaYe
  • 复习python第五天

    内置函数是python自己写好的,或者是一些模块的函数,可以给你直接调用,方便我们去更好的编程。关于函数的要说的就只有几点,首先是它的内置函数,例如input(...

    sjw1998

扫码关注云+社区

领取腾讯云代金券