自己动手构造编译系统:编译、汇编与链接导读

Preface前  言 本书适合谁读 本书是一本描述编译系统实现的书籍。这里使用“编译系统”一词,主要是为了与市面上描述编译器实现的书籍进行区分。本书描述的编译系统不仅包含编译器的实现,还包括汇编器、链接器的实现,以及机器指令与可执行文件格式的知识。因此,本书使用“编译系统”一词作为编译器、汇编器和...

自己动手构造编译系统:编译、汇编与链接2.5.3 重定位 

2.5.3  重定位              重定位从本质上来说就是地址修正。由于目标文件在链接之前不能获取自己所使用符号的虚拟地址信息,因此导致依赖于这些符号的数据定义或者指令信息缺失。汇编器在生成目标文件的时候就记...

自己动手构造编译系统:编译、汇编与链接2.5.1 地址空间分配

2.5.1  地址空间分配      在汇编器生成的目标文件内,是无法确定数据段和代码段的虚拟地址的,因此将它们的段地址都设置为0。链接器是这些代码和数据加载到内存执行之前的最后一道处理,因此要为它们分配段的基址。   链接器按照目标文件的输入顺序扫描文件信息,从每个文件的段表中...

自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析

2.1.4  语义分析          编译原理教材中,将语言的文法分为4种:0型、1型、2型、3型,并且这几类文法对语言的描述能力依次减弱。其中,3型文法也称为正规文法,词法分析器中有限自动机能处理的语言文法正是3型文法。2型文法也称为上下文无关文法,也是...

自己动手构造编译系统:编译、汇编与链接1.5 本章小结

1.5  本章小结   本章从编程最基本的话题聊起,描述了初学者接触程序时可能遇到的疑惑,并从编程实践经验中探索代码背 后的处理机制。然后,使用最简单的“Hello World !”程序展现主流编译器GCC对代码的处理流程。最后, 我们在工业化编译系统的基础上做了一定的限制,提出...

自己动手构造编译系统:编译、汇编与链接1.3.2 编译

1.3.2  编译         接下来GCC对hello.i进行编译,命令如下: $gcc –S hello.i –o hello.s   编译后产生的汇编文件hello.s内容如下:      .file ...

自己动手构造编译系统:编译、汇编与链接1.3.1 预编译

1.3.1  预编译           GCC对源文件的第一阶段的处理是预编译,主要是处理宏定义和文件包含等信息。命令格式如下: $gcc –E hello.c –o hello.i   预编译器将hello.c处理后输出到文件hello.i,he...

自己动手构造编译系统:编译、汇编与链接1.3 GCC的工作流程

1.3  GCC的工作流程          在着手构造编译系统之前,需要先介绍编译系统应该做的事情,而最具参考价值的资料就是主流编译器的实现。GNU的GCC编译器是工业化编译器的代表,因此我们先了解GCC都在做什么。   我们写一个最简单的“HelloWor...

自己动手构造编译系统:编译、汇编与链接1.2 历史渊源

1.2  历史渊源       历史上很多新鲜事物的出现都不是偶然的,计算机学科的技术和知识如此,编译系统也不例外,它的产生来源于编程工作的需求。编程本质上是人与计算机交流,人们使用计算机解决问题,必须把问题转化为计算机所能理解的方式。当问题规模逐渐增大时,编程的劳动量...

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。