匯編語言中 BCD(Binary-Coded Decimal)碼運算後需用 DAA(十進制加法調整)或 DAS(十進制減法調整)修正 AL 寄存器值。針對題目 73H - 27H = 4CH 經 DAS 變為 46H 的疑惑,核心在於 運算數被視為壓縮 BCD 碼而非純十六進制。
DAA/DAS 專用於壓縮 BCD,根據 AL 低 4 位、AF/CF 標誌自動加 6/減 6 修正。; 假設 AL = 73H (壓縮 BCD 代表十進制 73)
; BL = 27H (壓縮 BCD 代表十進制 27)
SUB AL, BL ; AL = 4CH, AF=1 (低半字節借位), CF=0
DAS ; 十進制減法調整
; DAS 邏輯:低 4 位 > 9 或 AF=1 → AL = AL - 06H
; 高 4 位 > 9 或 CF=1 → AL = AL - 60H
; 此處 AF=1 → AL = 4CH - 06H = 46H
; 結果 46H 即壓縮 BCD 表示十進制 46 (73 - 27 = 46)
4CH 是二進制減法結果(十進制 76),但壓縮 BCD 中 C (1100) 非法(十進制位只能 0-9)。DAS 檢測到低半字節借位 (AF=1),自動減 6 修正為合法 BCD 碼 46H。
理解 BCD 調整指令需建立「壓縮 BCD 表示十進制」的心智模型,而非按十六進制思維推導。