| 一、数据传送类 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
 
 
 
 |