[英]cmp and subcc/others in assembly
SPARC程序集具有cmp
指令,該指令將兩個數字進行比較(如果我理解正確,請使用減法)。 它也有subcc
, addcc
, andcc
,等等。 計算后使用cmp
比較兩個數字與設置條件代碼之間有什么區別? 我在圍繞這個概念整理思路時遇到了麻煩。
計算后使用cmp比較兩個數字與設置條件代碼之間有什么區別?
通常(例如,在x86或68000型處理器上) , cmp
僅設置狀態標志,而無需修改操作數或將結果存儲在任何地方。
sub
等也在更改目標操作數(它們需要將結果存儲在),這在進行比較操作時不是必需的。
本質上, cmp
是一個sub
操作,其中結果被簡單地丟棄(可能節省了指令周期)。 在進行比較時,您不需要結果,只需要知道結果是否為零,以及結果是否為負。
特別是在SPARC上, cmp
是一種“綜合指令”,旨在提高可讀性,最終由匯編程序轉換為subcc
指令。 請參見http://moss.csc.ncsu.edu/~mueller/codeopt/codeopt00/notes/sparc.html上的 “綜合說明”。
因此, cmp %reg1,%reg2
subcc %reg1,%reg2,%g0
被匯編程序轉換為subcc %reg1,%reg2,%g0
。 這將兩個寄存器相減,並通過將結果存儲到寄存器%g0
有效地丟棄結果。 %g0
是一個寄存器,在讀取時始終返回0
,而在寫入時不改變。 因此,在指令級別上, cmp
和subcc
之間根本沒有區別(換句話說,SPARC沒有單獨的cmp
指令,而是使用帶有特殊目標寄存器的subcc
進行比較)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.