SPARC彙編有一個cmp
指令,它比較兩個數字(如果我理解正確,使用減法)。它也有subcc
,addcc
,andcc
等。執行計算後使用cmp
與設置條件代碼比較兩個數字有什麼區別?我無法理解這個概念。cmp和subcc /其他彙編
1
A
回答
2
執行計算後,使用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
。這減去了兩個寄存器,並且通過將結果存儲在寄存器%g0
中來有效地丟棄結果。 %g0
是一個在讀取時總是返回0
的寄存器,寫入時不會改變。因此,在指令級別上,cmp
和subcc
(換句話說,SPARC沒有單獨的cmp
指令,但使用subcc
和特殊目標寄存器進行比較)之間沒有任何差異。
相關問題
- 1. CMP彙編語言
- 2. 彙編:jmpf,TESTB和其他指令
- 3. x86彙編程序:shl和其他指令
- 4. 在彙編中,我是否缺少cmp命令?
- 5. 一個奇怪的彙編代碼:cmp ebp,ds:dword_84B8844
- 6. gcc彙編和彙編
- 7. cmp和ja問題
- 8. 彙編器延遲?
- 9. System.Management.Automation和System.Runtime.Remoting彙編
- 10. 從cmp 0x4(%esi),%ebx彙編指令表示的0x4是什麼意思?
- 11. 檢查彙編代碼MOV 0x8中(%EBX),%EAX MOV(%eax中),%EAX CMP%EAX(%EBX)
- 12. x86彙編錯誤
- 13. 使用Paypal php匯款錢其他SDK
- 14. JNZ和CMP組裝說明
- 15. ARM彙編迴路
- 16. CMP和進位標誌
- 17. 「彙編」與「彙編程序」
- 18. 彙編程序
- 19. NASM彙編程序
- 20. 彙編轉換str到int
- 21. 彙編語言MASM跳躍
- 22. 不明白彙編程序
- 23. 與彙編語言拼搏
- 24. 如何編譯64位彙編代碼
- 25. 彙編8086程序
- 26. 彙編
- 27. 8086彙編,INT 16,2
- 28. Doxygen和彙編語言
- 29. GAC和彙編版本
- 30. 彙編和寄存器
我希望cmp是subcc與g0作爲目標寄存器,所以結果不會覆蓋任何值只註冊硬連線的零寄存器。我懷疑它可以節省任何週期,除非實施很不尋常。 – cb88 2013-03-21 12:39:08
這不是我在SPARC('cmp'轉換爲'subcc')的情況下基本上所說的嗎? – 2013-03-21 13:01:21
是的,但你只有什麼發生,而不是如何發生。雖然鏈接的文字確實覆蓋了它,但需要一段時間才能達到該部分。理解g0的使用是有幫助的,以及如何構建綜合指令。當你考慮如何實現cmp時,它可能不會保存指令週期,而是通過簡化指令集使它們更快。 – cb88 2013-03-21 14:13:39