[拼音]:huibian chengxu
[外文]:assembler
把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。汇编执行指令是机器指令的符号化表示,其操作码用记忆符表示,地址码直接用标号、变量名字、常数等表示。汇编执行指令经汇编程序翻译为机器指令,二者之间基本上保持一一对应的关系。汇编伪指令又称作汇编指示,用于向汇编程序提供用户自定义的符号、数据的类型、数据空间的长度,以及目标程序的格式、存放位置等提示性信息,其作用是指示汇编程序如何进行汇编。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。
发展过程汇编程序的雏型是在电子离散时序自动计算机 EDSAC上研制成功的。这种系统的特征是用户程序中的指令由单字母指令码、十进制地址和终结字母组成。第一个汇编程序是符号优化汇编程序(SOAP)系统,它是50年代中期为IBM650计算机研制的。这种计算机用磁鼓作存储器,每条指令指出后继指令在磁鼓中的位置。当初研制SOAP系统的动机不是引入汇编语言的符号化特色,而是为了集中解决指令在磁鼓中合理分布的问题,以提高程序的运行效率。IBM704计算机的符号汇编程序(SAP)是汇编程序发展中的一个重要里程碑。此后的汇编程序大都以这一系统为模型,其主要特征至今未发生本质的变化。随着计算机软件的高速发展和广泛应用,汇编程序又吸收了宏加工程序、高级语言翻译程序等系统的一些优点,相继研制出宏汇编程序、高级汇编程序。
分类汇编程序分为简单汇编程序、模块汇编程序、条件汇编程序、宏汇编程序和高级汇编程序等。
简单汇编程序又称“装入并执行”式汇编程序。由于简便而得到广泛使用。这种汇编程序的特点是汇编后的机器语言程序直接放在内存之中准备执行。目标程序所占据的存储位置是在汇编时固定的,并且以后不能改变,所以这种工作方式不能将多个独立汇编的子程序合并为一个完整的程序,而且只能调用位置与目标程序不冲突的程序库中的子程序。
模块汇编程序为适应模块程序设计方法而研制的。它除了克服简单汇编程序的缺点之外,还提供并行设计、编码和调试不同程序模块的能力,而且更改程序时只更改有关的模块即可。每个汇编后的程序模块称为目标模块,多个目标模块经连接装配程序组合成一个完整的可执行的程序。
条件汇编程序主要特点是具有选择汇编某些程序段的能力。它适用于编写选择性较大的程序或程序包,以便根据用户的需要和设备的配置情况剪裁、编制适当的软件。这种汇编语言通常要引入“条件转移”、“转移”等汇编指示,以便根据用户指定的汇编条件有选择地汇编某些程序段或控制汇编程序的加工路径。
宏汇编程序主要特点是在汇编程序中增加宏加工功能。它允许用户方便地定义和使用宏指令,适用于程序中多处出现、具有一定格式、可以通过少数参数调节改变的程序段落的场合。采用这种方法不仅减少程序的长度,增加可读性,而且程序段落的格式需要改变时,只须改动定义处,而不必改动每一使用处。
高级汇编程序采用高级程序设计语言的控制语句结构的汇编程序。它不仅保持汇编语言表达能力强、程序运行效率高的优点,而且能充分吸收高级语言书写简单和易读的长处。这是由于高级汇编程序允许用户使用高级程序设计语言的控制语句(如条件语句、循环语句、函数和过程)编写程序中的控制部分,而且还允许用户直接利用汇编语言直接控制存储分配、存取寄存器硬件,描述高级语言难于表达的算法。第一个高级汇编程序是N.沃思为IBM360系统研制的PL/360语言汇编程序,其特点是程序的控制部分采用高级语言的控制语句编写,而数据加工部分采用IBM360汇编指令编写。自此以后,又相继出现了类似ALGOL的汇编程序,类似FORTRAN的汇编程序FAT。
结构与实现由于汇编语言的指令与机器语言的指令大体上保持一一对应的关系,汇编算法采用的基本策略是简单的。通常采用两遍扫描源程序的算法。第一遍扫描源程序根据符号的定义和使用,收集符号的有关信息到符号表中;第二遍利用第一遍收集的符号信息,将源程序中的符号化指令逐条翻译为相应的机器指令。具体的翻译工作可归纳为如下几项:
(1)用机器操作码代替符号操作;
(2)用数值地址代替符号地址;
(3)将常数翻译为机器的内部表示;
(4)分配指令和数据所需的存储单元。除了上述的翻译工作外,汇编程序还要考虑:
(1)处理伪指令,收集程序中提供的汇编指示信息,并执行相应的功能。
(2)为用户提供信息和源程序清单。
(3)汇编的善后处理工作,随目标语言的类型不同而有所不同。有的直接启动执行,有的先进行连接装配。
(4)如果具有条件汇编、宏汇编或高级汇编功能时,也应进行相应的翻译处理。
假定汇编语言中规定符号的应用一定出现在定义之后,则两遍算法可容易地合并成一遍算法加以实现。
汇编程序的工作过程是:
(1)输入汇编语言源程序。
(2)检查语法的正确性,如果正确,则将源程序翻译成等价的二进制或浮动二进制的机器语言程序,并根据用户的需要输出源程序和目标程序的对照清单;如果语法有错,则输出错误信息,指明错误的部位、类型和编号。
(3)最后,对已汇编出的目标程序进行善后处理。
- 参考书目
- D. W. Barron, Assemblers and Loaders,American-Elsevier,New York,1972.