ldr加載指令,ldr僞指令

轉載於https://blog.csdn.net/oqqhutu12345678/article/details/71542258

 

一、ldr作爲加載指令

(1)格式爲:LDR{條件}  目的寄存器,<存儲器地址>

(2)LDR指令用於從存儲器中將一個32位的字數據傳送到目的寄存器中。

(3)指令示例:

LDR R0,[R1]         ;將存儲器地址爲R1的字數據讀入寄存器R0。

LDR R0,[R1,R2]  ;將存儲器地址爲R1+R2的字數據讀入寄存器R0。

LDR R0,[R1,#8]   ;將存儲器地址爲R1+8的字數據讀入寄存器R0。

LDR R0,[R1,R2]!;將存儲器地址爲R1+R2的字數據讀入寄存器R0,並將新地址R1+R2寫入R1。

LDR R0,[R1,#8]!  ;將存儲器地址爲R1+8的字數據讀入寄存器R0,並將新地址R1+8寫入R1。 

LDR R0,[R1],R2  ;將存儲器地址爲R1的字數據讀入寄存器R0,並將新地址R1+R2寫入R1。

LDR R0,[R1,R2,LSL#2]!  ;將存儲器地址爲R1+R2×4的字數據讀入寄存器R0,並將新地址R1+R2×4寫入R1。

LDR R0,[R1],R2,LSL#2  ;將存儲器地址爲R1的字數據讀入寄存器R0,並將新地址R1+R2×4寫入R1。

(4)ARM是RISC結構,數據從內存到CPU之間的移動需要通過ldr/str指令。

  • 比如想把數據從內存中某處讀取到寄存器中,只能使用ldr 。
  • 比如ldr r0, 0x12345678 ,就是把0x12345678這個地址中的值存放到r0中?

 

二、ldr僞指令

(1)ARM指令集中,LDR通常都是作加載指令的,但是它也可以作僞指令。

LDR僞指令的形式是“LDR Rn,=expr”。

(2)例子:

COUNT EQU       0x40003100

LDR       R1,=COUNT

MOV      R0,#0

STR       R0,[R1]

 

  • COUNT是我們定義的一個變量,地址爲0x40003100。
  • LDR       R1,=COUNT是將COUNT這個變量的地址,也就是0x40003100放到R1中。
  • MOV      R0,#0是將立即數0放到R0中。
  • 最後一句STR      R0,[R1]是一個典型的存儲指令,將R0中的值放到以R1中的值爲地址的存儲單元去。實際就是將0放到地址爲0x40003100的存儲單元中去。
  • 這三條指令是爲了完成對變量COUNT賦值。用三條指令來完成對一個變量的賦值,跟ARM的採用RISC有關。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章