首页 理论教育 编译原理与实践:编译过程与机器代码

编译原理与实践:编译过程与机器代码

时间:2023-11-17 理论教育 版权反馈
【摘要】:预处理结束后,源程序经过编译过程生成目标程序,对于图1-1所示的汇编语言目标程序,需要经过汇编过程转换为可装配的机器代码,再经装配连接过程才能得到真正可执行的绝对机器代码。图1-1高级语言程序的处理过程高级语言除了可以“编译”执行外,也可以“解释”执行。编译程序和解释程序的主要区别如下:编译VS解释编译程序将整个源程序翻译为目标程序之后再执行,而且目标程序可以反复执行。若需再次执行,则必须重新解释源程序。

编译原理与实践:编译过程与机器代码

程序设计语言分类

计算机系统中的语言可以分为3个层次:机器语言(Machine Language),汇编语言(Assembly Language)以及高级语言(High-level Language)。计算机刚出现时,人们编写程序使用的是机器语言。用机器语言编程费时、费力、难度大,因此,很快就被汇编语言取而代之。汇编语言以助记符的形式表示指令和地址,与机器语言相比尽管程序开发的难度有所降低,但仍与人类的思维方式相差甚远,不易阅读和理解,并且严格依赖于机器,在一种机器上编写的代码应用于另一种机器时必须完全重写。高级语言的出现拉近了人类思维和计算机语言间的距离,使得编写高级语言程序就如同书写自然语言一般,并且与机器无关。

然而,只有机器语言程序才能直接在计算机上执行,因此,必须寻找一种方法,能够将高级语言和汇编语言程序转换为对应的机器语言程序,这种方法就是翻译。通常所说的翻译程序(Translator)是指能够把某一种语言(称为源语言,Source Language)书写的程序转换成另一种语言(称为目标语言,Target Language)书写的程序,而后者与前者在逻辑上是等价的。如果源语言是诸如FORTRAN、Pascal、C或Java这样的“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,则称这样的翻译程序为编译程序(Compiler)或编译器。

编译器的作用

根据用途和功能上的不同,编译程序可以分为以下几种类别。专门用于帮助程序开发和调试的编译程序称为诊断编译程序(Diagnosic Compiler)。着重于提高目标代码运行效率的编译程序叫作优化编译程序(Optimizing Compiler)。运行编译程序的计算机称为宿主机,而运行编译程序所产生目标代码的计算机则称为目标机。如果—个编译程序产生不同于其宿主机的目标代码,则称其为交叉编译程序(Cross Compiler)。如果不需要重写编译程序中与机器无关的部分就能改变目标机,则称该编译程序为可变目标编译程序(Retargetable Compiler)。目前,很多编译程序具备多种功能,往往是上述不同类型编译程序的集合体,用户只需简单地通过选项设置即可实现不同功能。

动画:编译程序的作用

高级语言易编程、易调试、效率高的特点使得程序员开发程序成为一件相对轻松的事情,然而高级语言源程序要想在计算机上最终被执行,除了需要编译程序的处理外,还需要预处理程序、汇编程序以及装配连接程序等的相互配合才能达到目的。一个典型的高级语言程序的处理过程如图1-1所示。

高级语言程序的处理过程

其中,预处理程序(Preprocessor)是指既能够将位于不同文件中的源程序模块汇集在一起,又能够将源程序中的宏语句展开为原始语句并加入源程序中的程序。汇编程序(Assembler)是把汇编语言程序转换为机器语言程序的程序。装配连接程序(Loader-linker)是指将可装配的机器代码进行装配连接得到绝对机器代码的程序。预处理结束后,源程序经过编译过程生成目标程序,对于图1-1所示的汇编语言目标程序,需要经过汇编过程转换为可装配的机器代码,再经装配连接过程才能得到真正可执行的绝对机器代码。

(www.xing528.com)

图1-1 高级语言程序的处理过程

高级语言除了可以“编译”执行外,也可以“解释”执行。解释程序(Interpreter)是指按高级语言程序的语句执行顺序边翻译边执行相应功能的程序。编译程序和解释程序的主要区别如下:

编译VS解释

(1)编译程序将整个源程序翻译为目标程序之后再执行,而且目标程序可以反复执行。

(2)解释程序对源程序逐句地翻译执行,不产生目标程序。若需再次执行,则必须重新解释源程序。

本书重点介绍编译程序的基本原理、方法和技术,至于解释程序则不做专门探讨。但是,书中有关编译程序的构造与实现技术同样也适用于解释程序。

编译型语言执行流程

混合型语言执行流程

解释性语言执行流程

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈