LDR指令總結

2021-05-22 12:13:59 字數 1873 閱讀 1056

ldr指令總結

arm是risc結構,資料從記憶體到cpu之間的移動只能通過l/s指令來完成,也就是ldr/str指令。

一.ldr指令格式

ldr/str字和無符號位元組載入/儲存,其中ldr的指令格式為

1.ldr rd,[rn]  

2.ldr rd,[rn,flexoffset]

3.ldr rd,[rn],flexoffset

4.ldr rd,label

注意:ldr只能在當前pc的4kb範圍內跳轉;b只能在當前pc的32m範圍內跳轉;label標號實際上就是個位址

例子:合法ldr語句:

ldr r1,

[r2];

ldr r1,

[r2,

#0x4]

;不能超過0xfff,否側編譯不能通過或者linker時有錯

ldr r1,

[r2,

#label

];所以這個經常是編譯不能通過,因為label的值一般都大於0xfff

ldr r1,

[r2]

,#0x4;

ldr r1,

label ;把label這個位址裡面的內容賦給r1

ldr偽指令

ldr r1,

=0x2000014

ldr r1,

=label ;把label這個位址值賦給r1

不合法:

ldr r1,

#0x14

ldr r1,

[#0x14]

ldr r1,

[0x14]

ldr r1,

#label

ldr r1,=#

label

ldr r1,

[label

]ldr r1,[#

label

]ldr r1,[=

label

]ldr r1,

[r2,

label

]ldr r1,

[r2,

=label

]

二.ldr和mov區別

1.把資料從記憶體中某處讀取到暫存器中,只能使用ldr;

比如:

ldr r0, 0x12345678就是把0x12345678這個位址中的值存放到r0中。

2.mov不能幹這個活,mov只能在暫存器之間移動資料,或者把立即數移動到暫存器中,這個和x86這種cisc架構的晶元區別最大的地方。x86中沒有ldr這種指令,因為x86的mov指令可以將資料從記憶體中移動到暫存器中。

三.ldr偽指令和ldr指令區別

雖然ldr偽指令和arm的ldr指令很像,但是作用不太一樣。ldr偽指令可以在立即數前加上=,以表示把乙個位址寫到某暫存器中,比如:

ldr r0, =0x12345678

這樣,就把0x12345678這個位址寫到r0中了。所以,ldr偽指令和mov是比較相似的。只不過mov指令限制了立即數的長度為8位,也就是不能超過512。而ldr偽指令沒有這個限制。如果使用ldr偽指令時,後面跟的立即數沒有超過8位,那麼在實際彙編的時候該ldr偽指令是被轉換為mov指令的。

LDR指令和LDR偽指令

arm指令集中,ldr通常都是作載入指令,但是它也可以作偽指令。初學者一般不會注意到它們的區別,其實在嵌入式開發過程中,這兩條指令時非常常用的!我們應該了解他們的區別。ldr偽指令的形式是 ldr rn,expr 作用是裝在乙個32bit常數和乙個位址到暫存器。下面舉乙個例子來說明它的用法。coun...

LDR偽指令與LDR載入指令

arm指令集中,ldr通常都是作載入指令的,但是它也可以作偽指令。ldr偽指令的形式是 ldr rn,expr 下面舉乙個例子來說明它的用法。count equ 0x40003100 ldr r1,count mov r0,0 str r0,r1 count是我們定義的乙個變數,位址為0x40003...

arm指令 ldr指令

ldr指令ldr作為指令 偽指令在arm彙編中。ldr指令格式 ldr 目的暫存器,儲存器位址 ldr r0,r1 將儲存器位址為r1的字資料讀入暫存器r0。ldr r0,r1,r2 將儲存器位址為r1 r2的字資料讀入暫存器r0。ldr r0,r1,8 將儲存器位址為r1 8的字資料讀入暫存器r0...