2010-07-10 84 views
4

這些說明有什麼區別?以ARM9處理器爲例,它不應該是:裝配? LD&MOV

ASM: mov r0, 0 
C: r0 = 0; 

ASM: ld r0, 0 
C: r0 = 0; 

我不知道爲什麼要使用一個或其它:S

回答

8

它必須是:

ASM: mov r0, 0 
C: r0 = 0; 

ASM: ld r0, 0 
C: r0 = *(pc + 0); 

退房this參考卡,如果你正在爲ARM上ASM發展必須具備的。

+0

哦所以用ld我得到了一個內存地址的內容......謝謝! – Puyover 2010-07-10 14:35:18

4

一般負載指令被用來從存儲器(直接或間接)的數據加載到寄存器中,而移動指令「動作」(拷貝)數據從一個操作數的寄存器。在ARM情況下,源操作數是一個值(常量)或寄存器(在複製到目標寄存器之前,兩者都可以移位/旋轉)。

所以第一個(mov r0, #0?),設置爲0的寄存器r0;第二個(ldr的僞操作)應該加載PC指向的數據(r15)加上偏移量0,所以相當於r0 = *(pc + 0)

+1

謝謝。我會更新我的答案。 – 2010-07-10 14:47:19

1

它是否被稱爲MOV或LD取決於特定的彙編語言。例如,Z80彙編語言對所有內容都使用LD,包括在寄存器之間進行賦值以及將立即值賦值給寄存器。

一般而言,您應該始終使用您正在使用的特定彙編語言來查找記憶法的含義。

+1

那麼,實際上與ARM有兩個指令,他們是非常不同的。 MOV將立即值(來自另一個寄存器,或者操作碼中編碼的值)加載到寄存器中 - 無內存訪問。使用LDR時,寄存器將從內存中加載。我同意你最後一句話100%。 – Dan 2010-07-11 15:21:02

+0

我同意。裝配的細節是它依賴於結構。每個架構可能擁有/擁有自己的機器代碼命令/細節的原因。 – 2010-07-14 17:04:22