
【計】 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)。
【别人正在浏覽】