汇编语言中的数据处理指令----算数指令

汇编语言的算术指令

    • 1.指令的格式
    • 2.算数指令
      • 2.1 ADD指令
      • 2.2 ADC指令
      • 2.3 SUB指令
      • 2.4 SBC指令
      • 2.5 RSB指令
      • 2.6 RSC指令

1.指令的格式

<指令>{}{S} Rd,Rn,Operand2

  • 任何指令后都可以跟条件码,(第一个{})
  • 任何指令后都可以跟s,以此来将本来不影响cpsr的操作,改为影响cpsr的操作
  • 注:比较指令一定影响cpsr

汇编语言中的数据处理指令----算数指令_第1张图片
汇编语言中的数据处理指令----算数指令_第2张图片

2.算数指令

ADD ADC SUB SBC RSB RSC

2.1 ADD指令

基本使用格式:ADD R0,R1,R2 得到: R0=R1+R2
R0与R1都只能为寄存器。
R2可为立即数或寄存器。
例:
汇编语言中的数据处理指令----算数指令_第3张图片

立即数:常量数字,例#1
寄存器:r0-r15

汇编语言中的数据处理指令----算数指令_第4张图片

2.2 ADC指令

带进位的加运算指令

ADC R0,R1,R2 带进位的加法 R0=R1+R2+C位(进的位)
R0与R1都只能为寄存器。
R2可为立即数或寄存器。
汇编语言中的数据处理指令----算数指令_第5张图片

2.3 SUB指令

不带进位的减法运算

SUB R0,R1,R2 -------》 R0=R1+(-R2)的补码

补码=源码取反+1

R0与R1都只能为寄存器。
R2可为立即数或寄存器。
汇编语言中的数据处理指令----算数指令_第6张图片

2.4 SBC指令

带借位的减法运算

SBC R0,R1,R2 ----》 R0=R1+(-R2)的补码 - ~C(借位)
R0与R1都只能为寄存器。
R2可为立即数或寄存器。
汇编语言中的数据处理指令----算数指令_第7张图片
为何要减非C?
因为当一个数加上一个比自己绝对值大的负数时不会出现进位,但是当一个数加上一个比自己绝对值小的负数时会出现进位。但实际上出现进位的C置为了1,而出现的借位的C为0。所以需要减去~C。

2.5 RSB指令

逆向减法运算

RSB R0,R1,#100 -----》R0=100-R1
汇编语言中的数据处理指令----算数指令_第8张图片

2.6 RSC指令

带借位的逆减法

RSC R0,R1,R2 ---->R0=R2+(-R1)-!C

你可能感兴趣的:(arm,arm,嵌入式硬件)