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 指令 將記憶體內容加載入通...