這些說明有什麼區別?以ARM9處理器爲例,它不應該是:裝配? LD&MOV
ASM: mov r0, 0
C: r0 = 0;
ASM: ld r0, 0
C: r0 = 0;
?
我不知道爲什麼要使用一個或其它:S
這些說明有什麼區別?以ARM9處理器爲例,它不應該是:裝配? LD&MOV
ASM: mov r0, 0
C: r0 = 0;
ASM: ld r0, 0
C: r0 = 0;
?
我不知道爲什麼要使用一個或其它:S
嘗試這個指南:ARM Assembler Guide
一般負載指令被用來從存儲器(直接或間接)的數據加載到寄存器中,而移動指令「動作」(拷貝)數據從一個操作數的寄存器。在ARM情況下,源操作數是一個值(常量)或寄存器(在複製到目標寄存器之前,兩者都可以移位/旋轉)。
所以第一個(mov r0, #0
?),設置爲0的寄存器r0;第二個(ldr
的僞操作)應該加載PC指向的數據(r15)加上偏移量0,所以相當於r0 = *(pc + 0)
)
謝謝。我會更新我的答案。 – 2010-07-10 14:47:19
它是否被稱爲MOV或LD取決於特定的彙編語言。例如,Z80彙編語言對所有內容都使用LD,包括在寄存器之間進行賦值以及將立即值賦值給寄存器。
一般而言,您應該始終使用您正在使用的特定彙編語言來查找記憶法的含義。
那麼,實際上與ARM有兩個指令,他們是非常不同的。 MOV將立即值(來自另一個寄存器,或者操作碼中編碼的值)加載到寄存器中 - 無內存訪問。使用LDR時,寄存器將從內存中加載。我同意你最後一句話100%。 – Dan 2010-07-11 15:21:02
我同意。裝配的細節是它依賴於結構。每個架構可能擁有/擁有自己的機器代碼命令/細節的原因。 – 2010-07-14 17:04:22
哦所以用ld我得到了一個內存地址的內容......謝謝! – Puyover 2010-07-10 14:35:18