📜  汇编程序简介

📅  最后修改于: 2021-06-28 07:18:00             🧑  作者: Mango

汇编程序是一种程序,用于将以低级汇编代码编写的指令转换为可重定位的机器代码,并为加载程序生成信息。

它通过评估操作字段中的助记符(符号)来生成指令,并找到符号和字面量的值以生成机器代码。现在,如果汇编程序在一次扫描中完成所有这些工作,则称为单遍汇编程序,否则,如果它在多次扫描中进行,则称为多遍汇编程序。在这里,汇编程序将这些任务分为两步:

  • 第1遍:
    1. 定义符号和字面量,并分别在符号表和字面量表中记住它们。
    2. 跟踪位置计数器
    3. 处理伪操作
  • 第2遍:
    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

让我们来看看这个程序是如何工作的:

  1. START:该指令从位置200开始执行程序,带有START的标签为程序提供名称(JOHN是程序的名称)。
  2. MOVER:将字面量(=’3’)的内容移动到寄存器操作数R1中。
  3. MOVEM:将寄存器的内容移动到内存操作数(X)中。
  4. MOVER:它将字面量(=’2’)的内容再次移入寄存器操作数R2,其标签指定为L1。
  5. LTORG:它将地址分配给字面量(当前LC值)。
  6. DS(Data Space):它为符号X分配1的数据空间。
  7. 结束:完成程序执行。

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)

查看流程图以了解:

整个汇编程序的工作原理是: