CSAPP第三章(3)

2020-07-06 15:08:10 浏览数 (1)

第三章总结

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

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

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

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

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

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

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

0 人点赞