簡體   English   中英

cmp和subcc /其他組裝

[英]cmp and subcc/others in assembly

SPARC程序集具有cmp指令,該指令將兩個數字進行比較(如果我理解正確,請使用減法)。 它也有subccaddccandcc ,等等。 計算后使用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 ,而在寫入時不改變。 因此,在指令級別上, cmpsubcc之間根本沒有區別(換句話說,SPARC沒有單獨的cmp指令,而是使用帶有特殊目標寄存器的subcc進行比較)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM