天天看點

1.14.ARM彙編指令集2資料傳輸和算術指令詳解

常用的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位數值的負數