結論
CPU 內部直接執行減法邏輯,不會由編譯器轉換為 ADD 指令。 但現代 CPU 微架構中,加法器與減法器可能共用部分電路(如透過補碼轉換在同一 ALU 單元完成)。
詳細解析
指令集層面
- x86 提供
SUB、SBB(帶借位減法)等專用指令。
- 編譯器生成機器碼時,減法表達式直接對應
SUB,不會優化為 ADD + 取反。
微架構層面
- ALU 內部通常含有全加器陣列。減法
A - B 可透過 A + (~B + 1) 在同一加法器完成(即補碼加法)。
- 控制單元根據指令解碼,啟動「取反 B、進位輸入 1」的路徑,最終仍由加法器產生結果。
- 因此「是否轉成加法」取決於觀察層級:指令集無轉換,電路實現常複用加法器。
標誌位影響
以 SUB AL, BL (AL=80H, BL=80H) 為例:
- 結果
00H,ZF=1(結果為零)。
- CF=0(無借位/無符號下溢)。
- OF=0(有符號溢出:-128 - (-128) = 0,在範圍內)。
- SF=0(結果正數)。
教學建議
- 學習匯編時,按指令語義理解:
SUB 就是減法,旗標按減法規則變化。
- 進階計算機組成原理課程再深入 ALU 電路實現。