首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

匯編 SUB 指令:機器內部是減法還是補碼加法?

     編輯:程式設計綜合問答

結論

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 電路實現。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved