簡體   English   中英

將r0,r1,#0與MOV r0,r1相加?

[英]ADD r0, r1, #0 vs MOV r0, r1?

我認為他們都達到同樣的效果,但MOV會更容易閱讀,因此,應用較多(不是機器在乎了吧?)但是,在看一些反匯編代碼的時候,我經常發現add r-something, r-something, #0代替。

這是有原因的,還是對於那些希望閱讀匯編代碼的人來說,只是編譯器使工作變得艱難?

編輯:

我正在拆卸ARM Thumb。 具體來說,它是movs r7, r1並加上r7, r1, #0 之后不使用條件標志。 這兩個的十六進制分別為000f1c0f 我想我應該指定我正在談論的指令集= x

將(部分地)取決於您在說什么處理器。 例如,在某些處理器上,實際上沒有MOV指令。 匯編程序將其轉換為您描述的add-0,這樣,在您進行反匯編時,您將無法得知該指令是如何在原始匯編代碼中指定的。

編譯代碼要考慮的另一點是指令調度-出於性能原因,編譯器可以根據周圍的代碼選擇不同的指令來執行“相同”的操作。 假設您有以下內容:

MOV r0, r1
MOV r2, r3

一個具有相當有限的流水線的簡單CPU可能一次只能執行一個MOV ,但是可以雙重發出某些算術指令,因此可以這樣做:

MOV r0, r1
ADD r2, r3, #0

兩條指令可以在同一周期內執行,並且代碼的執行速度是其兩倍。

在ARM 1上, MOV rd,rm實際上是LSL rd, rm, #0 ,因此,對MOVADD進行交織的通用優化可能會在任何可以並行處理移位器和加法器的事物上獲得純收益,而對a嚴格的標量順序核心不能做到。


[1]至少從概念上講,對於ARM和Thumb中的“基本”編碼-為簡單起見,我省略了標志設置以及IT塊和高regs與低regs並發症存在的其他Thumb編碼。

暫無
暫無

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

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