XOR (Exclusive OR) 是組合語言中最基礎也最強大的邏輯指令之一。其核心特性 —— 對同一數值執行兩次 XOR 可還原原值,廣泛應用於數值交換、簡易加密、校驗和、旗標操作等場合。
A ^ B ^ B = A
; 證明: (A ^ B) ^ B = A ^ (B ^ B) = A ^ 0 = A
mov eax, 200 ; EAX = 200 (0xC8)
xor eax, 100 ; EAX = 200 ^ 100 = 172 (0xAC)
xor eax, 100 ; EAX = 172 ^ 100 = 200 (0xC8) → 還原
xor eax, ebx
xor ebx, eax
xor eax, ebx
; EAX, EBX 完成交換,無需第三暫存器
; 加密
mov esi, offset PlainText
mov edi, offset CipherText
mov ecx, Length
mov al, KeyByte
.encrypt_loop:
lodsb
xor al, KeyByte
stosb
loop .encrypt_loop
; 解密 (相同程式碼,輸入 CipherText 輸出 PlainText)
xor eax, eax ; 比 MOV EAX, 0 更短 (2 bytes vs 5 bytes)、更快
xor eax, eax ; 設定 ZF=1, CF=0, OF=0, SF=0, PF=1
xor al, 1 ; 翻轉 AL bit 0,影響 ZF/SF/PF
xor al, [esi] ; 累積 XOR 校驗和
inc esi
loop .checksum_loop
; 若 CF=1 則 EAX ^= EBX
jnc @f
xor eax, ebx
@@:
; 或使用 CMOV (P6+)
cmovc eax, ebx ; 不直接支援 XOR,需配合暫存器
XOR 會更新 ZF, SF, PF, CF=0, OF=0,後續條件跳轉需注意。XOR AL, BL 僅影響低 8 位,高位保留。XOR [mem], reg 讀取-修改-寫回,非原子操作,多執行緒需鎖定。XOR 的「雙重還原」特性 (A ^ B ^ B = A) 是其成為加密、交換、校驗核心的數學基石。熟練運用 XOR 進行清零、交換、翻轉、加密、校驗,能顯著縮減程式碼體積、提升執行效率,是組合語言程式設計師的基本功與進階利器。