常用的ARM指令:資料處理指令和算術指令
* 資料傳輸指令:mov & mvn
- mov
(片内RAM)傳送指令mov(MOVE)把一個位元組/字/雙字的操作數從源位置傳送到目的位置,源操作數的内容不變。
指令格式:
MOV{條件}{S} 目的寄存器,源操作數
S:即上節說的是否影響CPSR寄存器的标志位。
- mvn
用法與mov都類似,差別就是 mvn 是先把源操作數按位取反後再傳送到目的寄存器。
* 算術指令:add & sub & rsb & adc & sbc & rsc
- add
加法運算指令。将操作數operand2資料與Rn的值相加,結果儲存到Rd寄存器。
指令格式:
add {cond}{S} Rd,Rn,operand2
eg:
add r1,r1,#0x1 ; r1=r1+0x1
add r1,r1,r2 ; r1=r1+r2
adds r3,r1,r2,lsl #2 ; r3=r1+r2<<2
-sub
減法運算指令。将寄存器Rn的值減去operand2的值,結果儲存到Rd寄存器中。
指令格式:
sub {cond}{S} Rd,Rn,operand2
eg:
subs r0,,r0,#1 ; r0=r0-1
sub r2,r1,r0 ; r2=r1-r0
subs r7,r6,#0xf0 ; r7=r6-0xf0
-rsb
逆向減法指令。用operand2減去Rn的值,結果放到Rd寄存器裡。
指令格式:
rsb {cond}{S} Rd,Rn,operand2
eg:
rsb r3,r1,#0xff00 ; r3=0xff00-r1
rsbs r1,r2,r2,lsl #2 ; r1=r2<<2 - r2
rsb r0,r1,#0 ; r0=-r1
-adc
帶進位加法指令。将operand2的值與Rn的值相加,再加上cpsr寄存器的c标志位,結果儲存在Rd寄存器中。
指令格式:
adc {cond}{S} Rd,Rn,operand2
eg:
adds r0,r0,r2
adc r1,r1,r3 ; 使用adc實作64位加法:(r1,r0) = (r1,r0) +(r3,r2)
-sbc
帶進位減法指令。用Rn寄存器的值減去operand2的值,再減去cpsr寄存器的c标志位的非,結果儲存在Rd寄存器中。
指令格式:
sbc {cond}{S} Rd,Rn,operand2
eg:
subs r0,r0,r2
sbc r1,r1,r3 ; 使用sbc實作64位減法:(r1,r0)-(r3,r2)
-rsc
帶進位逆向減法指令,将operand2的值減去Rn的值,再減去cpsr标志位c的值,結果存儲在Rd寄存器中。
指令格式:
rsc{cond}{S} Rd,Rn,operand2
eg:
rsbs r2,r0,#0
rsc r3,r1,#0 ; 實作64位數值的負數