arm彙編 str,mov等指令

2021-07-24 13:03:45 字數 2146 閱讀 7410

str指令的格式為:

str  源暫存器,《儲存器位址》

str指令用亍從源暫存器中將乙個32位的字資料傳送到儲存器中。該指令在程式設計中比較常

用,定址方式靈活多樣,使用方式可參考指令ldr。

指令示例:

str r0,[r1],#8             ;將r0中的字資料寫入以r1為位址的儲存器中,並將新位址r1+8寫入r1。

str r0,[r1,#8]             ;將r0中的字資料寫入以r1+8為位址的儲存器中。」

str     r1, [r0]                       ;將r1暫存器的值,傳送到位址值為r0的(儲存器)記憶體中

mov 指令的基本格式如下:

movx source, destination

source 和 destination 的值可以是記憶體位址,儲存在記憶體中的資料值,指令語句中定義的資料值,或者暫存器。

ldr:

當第二個運算元前面沒有「=」時,表示記憶體訪問指令,從記憶體中讀取4byte資料到暫存器,語法格式如下:

ldr 目的暫存器, 儲存器位址

如果第二個運算元前面有「=」,表示大範圍位址讀取偽指令,用於載入32位的立即數或乙個位址到指定暫存器,語法格式如下:

ldr 目的暫存器, =32位立即數/位址

adrl r2, mem_cfg_val

adrl

是中等範圍位址讀取偽指令,

將基於pc相對偏移的位址值或基於暫存器相對偏移的位址值讀取到暫存器中,在彙編編譯器編譯源程式時,adrl偽指令被編譯器替換成兩條合適的指令。若不能用兩條指令實現,則產生錯誤,編譯失敗。這條**會替換為:

30000050: e28f2018  add r2, pc, #24 ; 0x18

30000054: e1a00000  nop (mov r0,r0)

adrl偽指令格式:

adrl   register, expr

位址表示式

expr

的取值範圍:

當位址值是位元組對齊時,其取指範圍為

: -64k

~64k

;當位址值是字對齊時,其取指範圍為

: -256k

~256k

nop

空操作偽指令,在彙編是替換成

arm中的空操作,例如

mov r0, r0

cmp

比較指令,格式如下:

cmp 

運算元1

, 運算元

2用與將乙個暫存器的內容和另一暫存器的內容或立即數進行比較,然後更新

cpsr

中條件標誌位的值,標誌位表示運算元

1和運算元

2的關係(大於、小於、相等)。

bne 1b

b

(跳轉指令)

+ne(條件:不相等),如果

cpsr的z

位為0(不相等),就跳轉到後面的

1標號處。

b表示向後搜尋,已經執行過的**為『後』;

f表示向前搜尋,還未執行的**為『前』。

mov  pc

lr

從子程式返回。

lr為子程式鏈結暫存器(

r14),當執行

bl子程式呼叫指令時,

lr會備份

pc(程式計數器

r15)。

.align

指定對齊方式,

gnu彙編命令都以乙個點開頭。

.equ

賦值命令,格式如下:

.equ symbol, expression

設定symbol

的值為expression

.long

定義乙個

4byte

的資料。

arm彙編 str,mov等指令

str指令的格式為 str 源暫存器,儲存器位址 str指令用亍從源暫存器中將乙個32位的字資料傳送到儲存器中。該指令在程式設計中比較常 用,定址方式靈活多樣,使用方式可參考指令ldr。指令示例 str r0,r1 8 將r0中的字資料寫入以r1為位址的儲存器中,並將新位址r1 8寫入r1。str ...

ARM彙編指令

b或bl指令引起處理器轉移到 子程式名 也就是位址 處開始執行,這兩個指令都是相對跳轉指令。兩者的不同之處在於bl指令在轉移到子程式執行之前,將其下一條指令的位址拷貝到r14 lr,鏈結暫存器 由於bl指令儲存了下條指令的位址,因此使用指令 mov pc lr 即可實現子程式的返回。而b指令則無法實...

arm彙編指令

一般arm官方風格彙編指令為大寫,windows ads mdk 實際運用一般用gnu風格,為小寫,linux 1 arm採用risc架構,cpu本身不能直接讀取內 存,而需要先將記憶體中內容加載入cpu中通用寄 存器中才能被 cpu處理 ldr loadregister 指令 將記憶體內容加載入通...