1.14.ARM汇编指令集2数据传输和算术指令详解
2017-08-04 15:30
253 查看
常用的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位数值的负数
* 数据传输指令: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位数值的负数
相关文章推荐
- 1.2.17、ARM汇编指令集:数据传输和跳转指令详解
- 详解DataXceiver读数据的流程和零拷贝数据传输
- arm汇编指令之数据块传输(LDM,STM)详解
- Android传输数据时MD5加密解密详解
- vue动态组件 互相之间传输数据 和指令的定义
- TCP/IP第四层--传输层TCP数据报文详解
- 特殊的算术操作指令详解
- TCP/IP第四层--传输层TCP数据报文详解
- 详解ABP框架中的数据过滤器与数据传输对象的使用
- TCP详解----可靠数据传输原理(二)
- Android传输数据时加密详解
- 汇编速查手册数据传输指令集
- TCP/IP第四层--传输层TCP数据报文详解
- ajax数据传输方式实例详解
- Android传输数据时Aes加密解密详解
- 数据传送指令详解
- (十四)Core Java 网络编程(网络模型详解,UDP聊天,TCP数据传输)-01 (110)
- TCP/IP第四层--传输层TCP数据报文详解
- TCP/IP第四层--传输层TCP数据报文详解