
【计】 two-pass assembler
twice
【医】 bis-
scan; scanning
【计】 fineness; scanning
【医】 scanning
【计】 AP; ASLR; ASM; assemble program; assembler; assembler program
assembler routine; assembly program; assembly routine; ASSM
在计算机编程领域中,"两次扫描的汇编程序"(Two-pass Assembler)是指需要经过两个处理阶段才能完成源代码翻译的汇编器系统。该术语由汉语直译为英语时,"两次扫描"对应"two-pass","汇编程序"即"assembler"。
第一次扫描(First Pass)主要完成符号表构建:
第二次扫描(Second Pass)执行代码生成:
该设计可有效解决单遍汇编器无法处理前向引用的问题,根据《计算机系统要素》(Nisan & Schocken,2005)的论述,两次扫描机制通过分离符号解析与代码生成阶段,既保证了汇编过程的完整性,又提高了编译效率。在IBM System/360等经典计算机架构中,这种汇编器设计被广泛采用。
汇编程序采用两次扫描的方式完成对源程序的翻译,主要原因是处理汇编语言中符号的前向引用问题(即符号可能在后续代码中定义,导致首次扫描时无法确定其地址)。以下是两次扫描的详细解释:
核心任务:建立符号表(ST)并处理与存储分配相关的伪指令。
LOOP
对应的地址为0x100
。DB
、RESW
),LC增加对应指令长度。MOV
占2字节)。ORG
、END
)。核心任务:生成目标程序的机器码。
MOV AX, BX
对应8B C3
)。JMP LOOP
中的LOOP
根据ST表转换为具体地址值。假设源程序片段:
ORG 100H
LOOP: MOV AX, [VAR]
JNZ LOOP
VAR DW 0
ORG 100H
:设置LC=100H。LOOP
:记录ST表,LOOP: 100H
。MOV
:LC += 指令长度(假设3字节→LC=103H)。VAR
:记录ST表,VAR: 103H
(假设DW
占2字节→LC=105H)。MOV AX, [VAR]
→操作码8B 06
+ 地址03 01
(小端模式)。JNZ LOOP
→操作码75
+ 偏移量FD
(-3的补码)。通过两次扫描,汇编程序有效解决了符号依赖和存储分配问题,最终生成可执行的机器码程序。如需完整技术细节,可参考权威教材或汇编程序规范(来源:、2、8、9、14)。
阿-希二氏综合征饱和铁心磁强计编辑程序生成程序电子资料处理机器缔约国名单对流传质对生分担债券隔焰焙烧炉鬼祟灰霉胺净计价法静液封绝对有利卡片分类机克腊斯克氏卧位历史文化遗迹弥散菌落蜜亚胺脓硫烯普鲁卡因声音联想诗韵水包油乳状液税损贷项私心跳脚拖动土生土长位带控制