|
知识路径: > 计算机系统基础知识 > 计算机软件基础知识 > 程序设计语言和语言处理程序知识 > 汇编、编译、解释系统的基本知识和基本工作原理 > 程序语言翻译基础 >
|
被考次数:1次
被考频率:低频率
总体答错率:51%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
相关知识点:30个
|
|
|
|
|
汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的翻译程序——汇编程序进行翻译。用汇编语言编写程序要遵循所用语言的规范和约定。
|
|
|
汇编语言源程序由若干条语句组成,一个程序中可以有三类语句:指令语句、伪指令语句和宏指令语句。
|
|
|
(1)指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。常见的基本指令如ADD、SUB和AND等,书写指令语句时必须遵循指令的格式要求。
|
|
|
指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型。
|
|
|
(2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作,例如给变量分配存储单元地址,给某个符号赋值等。伪指令语句与指令语句的区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句对应的操作必须在程序运行时完成。
|
|
|
(3)宏指令语句。在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,即相当于使用了这段程序。因此,宏指令语句就是宏的引用。
|
|
|
|
汇编程序的功能是将汇编语言所编写的源程序翻译成机器指令程序。汇编程序的基本工作包括将每一条可执行汇编语句转换成对应的机器指令;处理源程序中出现的伪指令。由于汇编指令中,形成操作数地址的部分可能出现后面才会定义的符号,所以汇编程序一般需要两次扫描源程序才能完成翻译过程。
|
|
|
第一次扫描的主要工作是定义符号的值并创建一个符号表ST,ST记录了汇编时所遇到的符号的值。另外,有一个固定的机器指令表MOT1,其中记录了每条机器指令的记忆码和指令的长度。在汇编程序翻译源程序的过程中,为了计算各汇编语句标号的地址,需要设立一个位置计数器或单元地址计数器LC(Location Counter),其初值一般为0。在扫描源程序时,每处理完一条机器指令或与存储分配有关的伪指令(如定义常数语句、定义储存语句),LC的值就增加相应的长度。这样,在汇编过程中,LC的内容就是下一条被汇编的指令的偏移地址。若正在汇编的语句是有标号的,则该标号的值就取LC的当前值。
|
|
|
此外,在第一次扫描中,还需要对与定义符号值有关的伪指令进行处理。为了叙述方便,不妨设立伪指令表POT1。POT1表的每一个元素只有两个域:伪指令助记符和相应的子程序入口。下面的步骤(1)~(5)描述了汇编程序第一次扫描源程序的过程。
|
|
|
|
|
|
|
if(当前语句有标号)则将标号和单元计数器LC的当前值填入符号表ST;
|
|
|
if(当前语句是可执行的汇编指令语句)则查找MOT1表获得当前指令的长度K,并令LC=LC+K;
|
|
|
if(当前指令是伪指令)则查找POT1表并调用相应的子程序;
|
|
|
if(当前指令的操作码是非法记忆码)则调用出错处理子程序;
|
|
|
|
|
|
第二次扫描的任务是产生目标程序。除了使用前一次扫描所生成的符号表ST外,还要使用机器指令表MOT2,该表中有机器指令助记符、机器指令的二进制操作码(binary-code)、格式(type)和长度(length)等。此外,还要设立一个伪指令表POT2,供第二次扫描时使用。POT2的每一元素仍有两个域:伪指令记忆码和相应的子程序入口。与第一次扫描的不同之处是:在第二次扫描中,伪指令有着完全不同的处理。
|
|
|
在第二次扫描中,可执行汇编语句应被翻译成对应的二进制代码机器指令。这一过程涉及两个方面的工作:一是把机器指令助记符转换成二进制机器指令操作码,这可通过查找MOT2表来实现;二是求出操作数区各操作数的值(用二进制表示)。在此基础上,就可以装配出用二进制代码表示的机器指令。从求值的角度看,第二部分工作并不复杂。由于形成操作数地址的各个部分都以表达式的形式出现,只要定义一个过程eval-expr(index,value),其功能是通过index给定一个表达式在汇编语句缓冲区S的开始位置,该过程就用value返回此表达式的值。例如,虚拟计算机COMET的机器指令可归属于X型指令,其汇编语句为:
|
|
|
|
可以写出下面处理X型指令的程序段(假定index已指向操作数在缓冲区S的首地址):
|
|
|
|
类似地,可以写出其他类型指令处理操作数的程序段。设当前可执行汇编语句的操作助记符在MOT2表的索引值为i,则整个可执行汇编语句的处理可以描述如下:
|
|
|
|
在第二次扫描中,根据伪指令助记符,调用POT2表相应元素所规定的子程序。例如,DS伪指令的主要目的是预留存储空间。不妨设一个工作单元K(初值为0),用于累计以字节为单位的存储空间大小。从DS伪指令的操作数区求出K的大小后,就向输出区送K个空格以达到保留所规定存储单元的目的。DC伪指令处理的结果是向输出区送出转换得到的常量。开始伪指令工作是输出目标程序开始的标准信息,而结束伪指令则是输出目标程序结束的标准信息,这些信息都是为装配程序提供的。
|
|
|