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位数值的负数


你可能感兴趣的:(ARM汇编,mov,mvn,add,sub,ARM指令集)