ldr載入指令,ldr偽指令
阿新 • • 發佈:2019-02-15
一、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有關。