組合語言源程式除機器指令外,大量使用偽操作(Pseudo-operations,舊稱偽指令)。關鍵差異在於:指令由 CPU 在執行期執行;偽操作由組譯器在組譯期處理,不產生機器碼,完成數據定義、記憶體配置、程式結構控制、符號管理等輔助功能。熟練掌握偽操作是編寫可維護、可移植組合程式的基礎。
[Variable] Mnemonic Operand,...,Operand [;Comments]
Variable:可選符號名稱,代表首字節偏移,不加冒號。Mnemonic:資料類型關鍵字。Operand:常數、運算式、字串或 DUP 重複計數。| 偽操作 | 定義單位 | 佔用位元組 | 典型用途 |
|---|---|---|---|
DB | Byte | 1 | 位元組陣列、ASCII 字串、位元組常數 |
DW | Word | 2 | 16 位整數、位移、選擇子 |
DD | Double Word | 4 | 32 位指標、線性地址、雙字整數 |
DQ | Quad Word | 8 | 64 整數、雙精度浮點 |
DT | Ten Bytes | 10 | 80 位擴展精度浮點、壓縮 BCD |
ARRAY DB 20 DUP (0,1,2,?) 產生 80 位元組模式。MOV AX, WORD PTR OPER1 強制視為字操作。BYTE_ARRAY LABEL BYTE / WORD_ARRAY DW 50 DUP(?) 同一地址雙重類型視圖。EQU 與 =CONST EQU 256 DATA EQU HEIGHT+12 B EQU [BP+8] ; 記憶體運算式 P8 EQU DS:[BP+8] ; 含段暫存器 EMP = 7 EMP = EMP+1 ; = 允許重複定義,EQU 不允許
EQU 為靜態常數等價,= 為組譯期可變符號,適合計數器、版本號等需遞增場景。
segname SEGMENT [align_type] [combine_type] ['class']
...
segname ENDS
PARA(16B)、BYTE(任意)、WORD(2B)、PAGE(256B)。PUBLIC(連接器串接同名段)、COMMON(覆蓋同名段、取最長)、STACK(堆疊段)、MEMORY(高位址優先)、AT expr(固定段基址)。'CODE'、'DATA')。ASSUME 指令與段暫存器載入ASSUME CS:CODE_SEG, DS:DATA_SEG, ES:DATA_SEG, SS:STACK_SEG ; 程式碼中仍需顯式載入: MOV AX, DATA_SEG MOV DS, AX MOV ES, AX MOV SS, AX MOV SP, OFFSET STACK_TOP
ASSUME 僅告知組譯器預設段暫存器關聯,用於計算位移與生成段超越前綴;不會自動載入暫存器。CS 初始化由載入器完成。
NAME module_name:指定目標模組名(連接器使用)。TITLE "text":列表標題;無 NAME 時前 6 字元作模組名。END [start_label]:結束組譯;主模組需指定起始標號,子模組僅 END。EVEN:下一位址對齊至偶數(字存取效能)。ORG expr:設定位置計數器 $ 為 expr。ORG $+8 跳過 8 位元組;JMP $+2 產生 2 位元組 NOP 延遲。| 基數 | 後綴 | 範例 | 備註 |
|---|---|---|---|
| 二進制 | B | 00101100B | |
| 十進制 | D 或無 | 178D | 預設 |
| 十六進制 | H | 0FFH | 首字必為 0~9 |
| 八進制 | O/Q | 1777Q |