資料傳送指令
mov指令
mov ,
rd目標暫存器,operand 常數/可用暫存器
例子 mov r0, #10 ;r0 = 10;對應c語言形式
mov r0, r1 ;r0 = r1
mvn指令
按位取反指令
mvn r0, #0 ;r0 = ~0
mvn r1,r2 ;r1=~r2
算術指令
add指令
add , ,
rn通用暫存器
例子 add r0, r1, r2 ;r0 = r1+r2
add r0, r0, #5 ;r0=r0+5
sub指令
sub , ,
例子 sub r0,r1,r2 ;r0 = r1-r2
sub r0,r0,#5 ;r0=r0-5
sub r1,r1,r1 ;r1=0
mul 乘法指令
mul r0,r1,r2 ;r1和r2相乘的結果傳送到r0 //r0 =r1*r2
muls r0,r1,r2 ;r1和r2相乘的結果傳送到r0,同時設定cpsr的相關條件標誌位
移位指令
lsl指令
lsl #2 邏輯左移
mov r0,r1,lsl #2 ;r0=r1*2^2 ,即r0=r1*4 常用於陣列定址,r1作下標
int a[5]; ;*(a+下標*4)
lsr 指令
lsr #2 邏輯右移
mov r0,r1,lsr #2 ;r0=r1/4
其他不常用移位指令
asr 指令 算術右移(考慮符號位)
movs r0,r1,asr #1 ;算術右移,第一位符號位不變
rol/ror 迴圈左移迴圈右移指令
mov r0,r1,ror #1 ; 暫存器r1迴圈右移一位後傳送到r0
比較指令
cmp指令
cmp r1 , #10 ; 將暫存器r1的值與10相減,並設定cpsr標誌位 //if(r1==10)
cmn r0,r1; r0 - (-r1),反值比較,影響cpsr標誌位
cmn r0,#10; r0 - (-10),反值比較,影響cpsr標誌位
跳轉指令
b next
b是跳轉指令
資料儲存載入指令
ldr 從記憶體載入資料到暫存器
ldr rd, label
ldrd rd,rd2 ,label (一次載入64位)
是否將定址結果寫入暫存器
type取值 b無符號位元組 sb有符號位元組 h無符號半字 sh有符號半字
label 位記憶體位址
暫存器間接定址
ldr r0, [r1] ; r0 <--[r1] *r1 = [r1] 把以r1的 r0 = * r1 ;以r1暫存器中的數值為記憶體位址,並把這個記憶體位址的內容取出都r0暫存器
基址變址定址
ldr r0, [r1, #4] ; r0<--[r1+4] r0=*(r1+4) #把暫存器的內容和指令中的位址偏移量相加,從而得到乙個運算元的有效位址。
ldr r0, [r1, #4]!;r0<--[r1+4],r1<--r1+4
ldr r0,[r1], #4 ;r0<--r1 , r1<--r1+4
ldr r0,[r1,r2] ; r0<--[r1+r2] r0 = *(r1+r2)
str 將暫存器的值寫入記憶體
str r0,[r1} //將暫存器r0的值寫入記憶體r1
其他類似指令
位元組資料載入/儲存指令:ldrb/strb
半字資料載入/儲存指令:ldrh/strh
有符號數字節/半字載入指令:ldrsb / ldrsh
多暫存器載入和儲存指令:
ldm / stm 批量從記憶體載入資料到暫存器列表/批量從暫存器載入資料都記憶體
ldmia r0!, ;r6 <- [r0],r7 <- [r0+4],r8 <- [r0+8],r0 <- r0+12 ia 是每載入一次r0的值加一
ldmib r0!, ;r6 <- [r0],r7 <- [r0+4],r8 <- [r0+8],r0 <- r
0+8邏輯運算指令
and指令 邏輯與指令
and r0,r0,#1 ;r0的值與1相位與後的值傳送到r0 // r0 = r0&1
orr指令 邏輯或指令
orr r0,r0,#9 ;r0的值與9相位與後的值傳送到r0 //r0 = r0||9
堆疊操作指令
stmfd sp!, ;把r4,r3,r2的值依次壓棧
ldmfd sp!, ;從sp中依此取值到r6,r7,r8
通常用來儲存子程式現場
格式stmfd sp!,
...函式**
ldmfd sp!,
ARM彙編中的LDR指令總結
ldr只能在當前pc的4kb範圍內跳轉 b只能在當前pc的32m範圍內跳轉 label標號實際上就是個位址 eg 合法 ldr r1,r2 ldr r1,r2,0x4 不能超過0xfff,否側編譯不能通過或者linker時有錯 ldr r1,r2,label 所以這個經常是編譯不能通過,因為labe...
ARM常用彙編指令
1 gbll 偽指令用於定義乙個全域性的邏輯變數,並初始化為。gbll bootloader bootloader setl 2 get 或 include get 偽指令用於將乙個原始檔包含到當前的原始檔中,並將被包含的原始檔在當前位置進行彙編處理。可以使用 include 代替 get。incl...
基礎常用arm彙編指令
ldr 目的暫存器 儲存器位址 作用 指令從記憶體中讀出資料到暫存器中 比如 ldr r1,r2,4 將位址r2 4的記憶體單元的資料讀取到r1中 ldr r1,r2 將位址r2的記憶體單元的資料讀取到r1中。r1 r2 注意 ldr中的第二個引數為 時,表示偽指令,或者表示記憶體訪問指令 比如 l...