一、数据传送类
1.1、寄存器间传送
MOV R0, R1 ; R1->R0
MVN R0,R1 ; R1取反->R0
1.2、寄存器和存储之间传送
LDR R0,[R1,#offset] ; 加载R1+offset指向的数据到R0(存储到寄存器)
STR R0,[R1,#offset] ; 存储R0中的数据到R1+offset指向的数据空间
字节,半字,双字传送
LDRB,LDRH,LDRD
STRB,STRH,STRD
1.3、寄存器和存储之间的多字传送
LDMIA R0!,{寄存器列表} ;加载R0指向的数据到寄存器列表,加载后R0自增
STMDB R0!,{寄存器列表} ;把寄存器中的内容依次传送到R0指向的地址, R0先自减再传送
感叹号用于预索引和后索引(省略)
LDR.W R0, [R1, #20]! ;预索引 先自增后传送
STR.W R0, [R1], #-12 ;后索引 先传送后自增
1.4、立即数传送
LDR R0,=imp32 ;
LDR和ADR的区别
二、数据操作指令
2.1、四则运算指令
ADD Rd,Rn,Rm ;Rd = Rn + Rm
ADC Rd,Rn,Rm ;Rd = Rn + Rm + C
SUB Rd,Rn,Rm ;Rd = Rn - Rm
SBC Rd,Rn,Rm ;Rd = Rn - Rm - C
RSB Rd,Rn,Rm ;Rd = Rm - Rn
MUL Rd,Rn,Rm ;Rd = Rn * Rm
MLA Rd,Rn,Rm,Ra ;Rd = Ra + Rn * Rm
MLS Rd,Rn,Rm,Ra ;Rd = Ra - Rn * Rm
UDIV Rd,Rn,Rm ;Rd = Rn/Rm
SDIV Rd,Rn,Rm ;Rd = Rn/Rm
SMULL RL,RH,Rm,Rn ;[RH:RL] = Rm * Rn
SMLAL RL,RH,Rm,Rn ;[RH:RL] += Rm * Rn
UMULL RL,RH,Rm,Rn ;[RH:RL] = Rm * Rn
UMLAL RL,RH,Rm,Rn ;[RH:RL] += Rm * Rn
2.2、逻辑操作指令
AND Rd,Rn,Rm ;Rd = Rn & Rm
ORR Rd,Rn,Rm ;Rd = Rn | Rm
BIC Rd,Rn,Rm ;Rd = Rn & ~Rm
ORN Rd,Rn,Rm ;Rd = Rn | ~Rm
EOR Rd,Rn,Rm ;Rd = Rn ^ Rm
还有都适用的两种形式
AND Rd,Rn
AND Rd,Rn,#imm12
|
|