汇编程序是一种程序,用于将以低级汇编代码编写的指令转换为可重定位的机器代码,并为加载程序生成信息。
它通过评估操作字段中的助记符(符号)来生成指令,并找到符号和字面量的值以生成机器代码。现在,如果汇编程序在一次扫描中完成所有这些工作,则称为单遍汇编程序,否则,如果它在多次扫描中进行,则称为多遍汇编程序。在这里,汇编程序将这些任务分为两步:
- 第1遍:
- 定义符号和字面量,并分别在符号表和字面量表中记住它们。
- 跟踪位置计数器
- 处理伪操作
- 第2遍:
- 通过将符号操作码转换为相应的数字操作码来生成目标代码
- 生成字面量数据并查找符号值
首先,我们将使用一个小型汇编语言程序来了解它们各自过程中的工作。汇编语言声明格式:
[Label] [Opcode] [operand]
Example: M ADD R1, ='3'
where, M - Label; ADD - symbolic opcode;
R1 - symbolic register operand; (='3') - Literal
Assembly Program:
Label Op-code operand LC value(Location counter)
JOHN START 200
MOVER R1, ='3' 200
MOVEM R1, X 201
L1 MOVER R2, ='2' 202
LTORG 203
X DS 1 204
END 205
让我们来看看这个程序是如何工作的:
- START:该指令从位置200开始执行程序,带有START的标签为程序提供名称(JOHN是程序的名称)。
- MOVER:将字面量(=’3’)的内容移动到寄存器操作数R1中。
- MOVEM:将寄存器的内容移动到内存操作数(X)中。
- MOVER:它将字面量(=’2’)的内容再次移入寄存器操作数R2,其标签指定为L1。
- LTORG:它将地址分配给字面量(当前LC值)。
- DS(Data Space):它为符号X分配1的数据空间。
- 结束:完成程序执行。
Pass-1的工作:定义符号和字面量表及其地址。
注意:字面量地址由LTORG或END指定。
步骤1:START 200 (此处未找到符号或字面量,因此两个表都为空)
步骤2:MOVER R1,=’3’200 (=’3’是一个字面量,因此制作了字面量表)
Literal | Address |
---|---|
=’3′ | – – – |
步骤3:MOVEM R1,X 201
X是在其声明之前引用的符号,因此它存储在符号表中并带有空白地址字段。
Symbol | Address |
---|---|
X | – – – |
步骤4:L1 MOVER R2,=’2’202
L1是标签,=’2’是字面量,因此将它们存储在相应的表中
Symbol | Address |
---|---|
X | – – – |
L1 | 202 |
Literal | Address |
---|---|
=’3′ | – – – |
=’2′ | – – – |
步骤5:LTORG 203
将地址分配给由LC值指定的第一个字面量,即203
Literal | Address |
---|---|
=’3′ | 203 |
=’2′ | – – – |
步骤6:X DS 1204
它是一个数据声明语句,即X分配了1的数据空间。但是X是在步骤3之前引用并在步骤6中定义的符号。这种情况称为前向引用问题,其中变量在声明之前被引用,并且可以通过回补丁解决。因此,现在汇编器将为X分配由当前步骤的LC值指定的地址。
Symbol | Address |
---|---|
X | 204 |
L1 | 202 |
步骤7:END 205
程序完成执行,其余字面量将获得由END指令的LC值指定的地址。这是由汇编器的第1遍制作的完整符号和字面量表。
Symbol | Address |
---|---|
X | 204 |
L1 | 202 |
Literal | Address |
---|---|
=’3′ | 203 |
=’2′ | 205 |
现在,由传递1生成的表及其LC值将进入汇编器的传递2,以进一步处理伪操作码和机器操作码。
Pass-2的工作:
汇编器的Pass-2通过将符号机器操作码转换为它们各自的位配置(机器可理解的形式)来生成机器代码。它将所有机器操作码与符号代码,其长度和位配置一起存储在MOT表(操作码表)中。它还将处理伪操作并将它们存储在POT表(伪操作表)中。
pass-2要求的各种数据库:
1. MOT table(machine opcode table)
2. POT table(pseudo opcode table)
3. Base table(storing value of base register)
4. LC ( location counter)
查看流程图以了解:
整个汇编程序的工作原理是: