在软考做题过程中,总是难以区分汇编、编译和解释程序这三种机制,这里总结一下,希望能帮助自己,也是帮助读者理清他们之间的关系。
首先,他们都是语言处理程序的基本类型,而语言处理程序的作用是将高级语言或汇编语言编写的程序翻译成某种机器语言,使程序可以在计算机上运行。
我们都知道,计算机所能识别的语言只有机器语言,即由0和1构成的代码。但通常人们编程时,不采用机器语言,因为它非常难于记忆和识别。因此,目前通用的编程语言有两种形式:汇编语言和高级语言。
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,如SUB、ADD等,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。
由于汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
汇编程序的基本工作包括两条:1、将每一条可执行汇编语句转换成对应的机器指令;2、处理源程序中出现的伪指令。
高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:
1.解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,也就是不能产生源程序的目标程序。应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序,典型的解释型的高级语言有QBASIC。
2.编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器或汇编语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.obj)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的,例如Visual C++、Visual Foxpro、Delphi等。
编译程序的功能是把某高级语言的源程序翻译成与之等价的目标程序,其工作过程可分为7个阶段:源程序-词法分析-语法分析-语义分析-中间代码生成-代码优化-目标代码生成。
二者比较:对于高级语言的编译和解释两种工作方式来说,他们主要有以下区别:
1、效率。编译比解释方式可能取得更高的效率。因为解释程序可能需要反复扫描源程序,而源程序只要被编译程序翻译一次就可以多次运行。
2、灵活性。解释方式比编译方式更加灵活,因为解释程序需要反复检查源程序,使得“运行中”修改程序成为可能。
3、可移植性。解释器一般也是用某种程序设计语言编写的,因此只要对解释器进行重新编译就能使解释器运行在不同的环境中。
总之,编译程序和解释程序他们最大的区别就是,解释程序不产成源程序的目标程序。分清汇编语言和高级语言、高级语言中的解释和编译方式,是我们理解这几类问题的重点。问题其实并不难,只要去学习和总结就可以了。