ARM
®
Thumb
®
-2
Rm {, <opsh>}
<Operand2> <reglist>
<fields> <reglist-PC>
<PSR> <reglist+PC>
C*, V* +/-
<Rs|sh> §
<iflags>
x,y <p_mode>
<imm8m> SPm
<lsb>
<width>
<prefix>
Prefixes for Parallel instructions
{X}
{IA|IB|DA|DB} {!}
{S}
<size> {T}
{R}
Add
Add ADD{S} Rd, Rn, <Operand2> N Z C V Rd := Rn + Operand2 N
ADC{S} Rd, Rn, <Operand2> Rd := Rn + Operand2 + C
ADD Rd, Rn, #<imm12>
QADD Rd, Rm, Rn Rd := SAT(Rm + Rn) Q
QDADD Rd, Rm, Rn Rd := SAT(Rm + SAT(Rn * 2)) Q
Subtract Subtract SUB{S} Rd, Rn, <Operand2> N Z C V Rd := Rn – Operand2 N
SBC{S} Rd, Rn, <Operand2>
Rd := Rn + Operand2 - C
SUB Rd, Rn, #<imm12> Rd := Rn – imm12,
RSB{S} Rd, Rn, <Operand2> N Z C V Rd := Operand2 – Rn N
RSC{S} Rd, Rn, <Operand2> Rd := Operand2 – Rn – C
QSUB Rd, Rm, Rn Rd := SAT(Rm – Rn) Q
QDSUB Rd, Rm, Rn Rd := SAT(Rm – SAT(Rn * 2)) Q
SUBS PC, LR, #<imm8> PC = LR – imm8, CPSR = SPSR
Parallel
arithmetic
<prefix>ADD16 Rd, Rn, Rm Rd[31:16] := Rn[31:16] + Rm[31:16], Rd[15:0] := Rn[15:0] + Rm[15:0] G
<prefix>SUB16 Rd, Rn, Rm Rd[31:16] := Rn[31:16] – Rm[31:16], Rd[15:0] := Rn[15:0] – Rm[15:0] G
<prefix>ADD8 Rd, Rn, Rm Rd[31:24] := Rn[31:24] + Rm[31:24], Rd[23:16] := Rn[23:16] + Rm[23:16],
Rd[15:8] := Rn[15:8] + Rm[15:8], Rd[7:0] := Rn[7:0] + Rm[7:0]
G
<prefix>SUB8 Rd, Rn, Rm Rd[31:24] := Rn[31:24] – Rm[31:24], Rd[23:16] := Rn[23:16] – Rm[23:16],
Rd[15:8] := Rn[15:8] – Rm[15:8], Rd[7:0] := Rn[7:0] – Rm[7:0]
G
<prefix>ASX Rd, Rn, Rm Rd[31:16] := Rn[31:16] + Rm[15:0], Rd[15:0] := Rn[15:0] – Rm[31:16] G
<prefix>SAX Rd, Rn, Rm Rd[31:16] := Rn[31:16] – Rm[15:0], Rd[15:0] := Rn[15:0] + Rm[31:16] G
USAD8 Rd, Rm, Rs Rd := Abs(Rm[31:24] – Rs[31:24]) + Abs(Rm[23:16] – Rs[23:16])
+ Abs(Rm[15:8] – Rs[15:8]) + Abs(Rm[7:0] – Rs[7:0])
USADA8 Rd, Rm, Rs, Rn Rd := Rn + Abs(Rm[31:24] – Rs[31:24]) + Abs(Rm[23:16] – Rs[23:16])
+ Abs(Rm[15:8] – Rs[15:8]) + Abs(Rm[7:0] – Rs[7:0])
Saturate
SSAT Rd, #<sat>, Rm{, ASR <sh>} Rd := SignedSat((Rm ASR sh), sat).
SSAT Rd, #<sat>, Rm{, LSL <sh>} Rd := SignedSat((Rm LSL sh), sat). <sat> <sh>
SSAT16 Rd, #<sat>, Rm Rd[31:16] := SignedSat(Rm[31:16], sat),
Rd[15:0] := SignedSat(Rm[15:0], sat). <sat>
Q
USAT Rd, #<sat>, Rm{, ASR <sh>} Rd := UnsignedSat((Rm ASR sh), sat). <sat> <sh>
USAT Rd, #<sat>, Rm{, LSL <sh>} Rd := UnsignedSat((Rm LSL sh), sat). <sat> <sh>
USAT16 Rd, #<sat>, Rm Rd[31:16] := UnsignedSat(Rm[31:16], sat),
Rd[15:0] := UnsignedSat(Rm[15:0], sat). <sat>
Q
与
指令系统
快速参考卡片
Edited by HeFanghua.
Register, optionally shifted by constant
灵活的第二操作数
第二操作数
程序状态寄存器PSR部分
www.ICDEV.com.cn
寄存器,可选常数移位
表格关键词
处理器模式
ARM结构版本
Register, optionally shifted by constant
指令格式
备注作用
加法
S更新位
操作符(指令助记符)
饱和
并行计算
减法
§
5E
T2
5E
5E
5E
T2
6
6
6
6
6
6
6
6
6
6
6
6
6
6
N
N
Z
C
V
T,
P
N
Z
C
V
Rd := Rn + imm12,
T,
P
T
Q
Q
Q
Q
<sat>
<sh>
N
N
Z
C
V
A
N
Z
C
V