4.1. 指令汇总

Table 4.1 汇总了 ARM、Thumb 和 ThumbEE 指令集中可用的指令。 您可在该表中查找本章剩余部分中所介绍的各个指令和伪指令。

Note

除非另有说明,否则 ThumbEE 指令与 Thumb 指令完全相同。

Table 4.1. 指令位置

助记符简单说明页码体系结构 [1]
ADCADD带进位加法,加法ADD、SUB、RSB、ADC、SBC 和 RSC全部
ADR加载相对程序或相对寄存器地址(短范围)ADR全部
ADRL 伪指令加载相对程序或相对寄存器地址(中等范围)ADRL 伪指令x6M
AND逻辑“与”AND、ORR、EOR、BIC 和 ORN全部
ASR算术右移ASR、LSL、LSR、ROR 和 RRX全部
B跳转B、BL、BX、BLX 和 BXJ全部
BFCBFI位域清零和插入BFC 和 BFIT2
BIC位清零AND、ORR、EOR、BIC 和 ORN全部
BKPT断点BKPT5
BL带链接的跳转B、BL、BX、BLX 和 BXJ全部
BLX带链接的跳转,更改指令集B、BL、BX、BLX 和 BXJT
BX跳转,更改指令集B、BL、BX、BLX 和 BXJT
BXJ跳转,更改为 JazelleB、BL、BX、BLX 和 BXJJ,x7M
CBZ, CBNZ比较,如果为(非)零,则跳转CBZ 和 CBNZT2
CDP协处理器数据处理操作CDP 和 CDP2x6M
CDP2协处理器数据处理操作CDP 和 CDP25,x6M
CHKA检查数组CHKAEE
CLREX清除独占CLREXK,x6M
CLZ计算前导零数目CLZ5,x6M
CMNCMP与负值比较,比较CMP 和 CMN全部
CPS更改处理器状态CPS6
DBG调试DBG、DMB、DSB 和 ISB7
DMBDSB数据内存屏障,数据同步屏障DBG、DMB、DSB 和 ISB7,6M
ENTERXLEAVEX将状态更改为 ThumbEE 或更改状态 ThumbEEENTERX 和 LEAVEXEE
EOR异或AND、ORR、EOR、BIC 和 ORN全部
HBHBLHBLPHBP处理程序跳转,跳转到指定处理程序HB、HBL、HBLP 和 HBPEE
ISB指令同步屏障DBG、DMB、DSB 和 ISB7,6M
IT条件判断ITT2
LDC加载协处理器LDC、LDC2、STC 和 STC2x6M
LDC2加载协处理器LDC、LDC2、STC 和 STC25,x6M
LDM加载多个寄存器LDM 和 STM全部
LDR加载寄存器指令内存访问指令全部
LDR 伪指令加载寄存器伪指令LDR 伪指令全部
LDREX独占加载寄存器LDREX 和 STREX6,x6M
LDREXBLDREXH独占加载寄存器,半字LDREX 和 STREXK,x6M
LDREXD独占加载寄存器,双字LDREX 和 STREXK,x7M
LSLLSR逻辑左移,逻辑右移ASR、LSL、LSR、ROR 和 RRX全部
MAR从寄存器移动到 40 位累加器MAR 和 MRAXScale
MCR从寄存器移动到协处理器MCR、MCR2、MCRR 和 MCRR2x6M
MCR2从寄存器移动到协处理器MCR、MCR2、MCRR 和 MCRR25,x6M
MCRR从寄存器移动到协处理器MCR、MCR2、MCRR 和 MCRR25E,x6M
MCRR2从寄存器移动到协处理器MCR、MCR2、MCRR 和 MCRR26,x6M
MIAMIAPHMIAxy带内部 40 位累加的乘法MIA、MIAPH 和 MIAxyXScale
MLA乘加MUL、MLA 和 MLSx6M
MLS乘减MUL、MLA 和 MLST2
MOV移动MOV 和 MVN全部
MOVT移动到顶部MOVTT2
MOV32 伪指令移动 32 位常数到寄存器MOV32 伪指令T2
MRA从 40 位累加器移动到寄存器MAR 和 MRAXScale
MRC从协处理器移动到寄存器MRC、MRC2、MRRC 和 MRRC2全部
MRC2从协处理器移动到寄存器MRC、MRC2、MRRC 和 MRRC25,x6M
MRS从 PSR 移动到寄存器MRS全部
MSR从寄存器移动到 PSRMSR全部
MUL乘法MUL、MLA 和 MLS全部
MVN取反移动MOV 和 MVN全部
NOP无操作NOP、SEV、WFE、WFI 和 YIELD全部
ORN逻辑“或非”AND、ORR、EOR、BIC 和 ORNT2
ORR逻辑“或”AND、ORR、EOR、BIC 和 ORN全部
PKHBTPKHTB组合半字PKHBT 和 PKHTB6,x7M
PLD预载数据PLD、PLDW 和 PLI5E,x6M
PLDW预载要写入的数据PLD、PLDW 和 PLI7MP
PLI预载指令PLD、PLDW 和 PLI7
PUSHPOP将寄存器推入 (PUSH) 堆栈,从堆栈弹出 (POP) 寄存器PUSH 和 POP全部
QADDQDADDQDSUBQSUB饱和算法QADD、QSUB、QDADD 和 QDSUB5E,x7M
QADD8QADD16QASXQSUB8QSUB16QSAX并行有符号饱和算法并行加法和减法6,x7M
RBIT反转位REV、REV16、REVSH 和 RBITT2
REVREV16REVSH反转字节顺序REV、REV16、REVSH 和 RBIT6
RFE从异常中返回RFET2,x7M
ROR向右循环移寄存器ASR、LSL、LSR、ROR 和 RRX全部
RSB反向减法ADD、SUB、RSB、ADC、SBC 和 RSC全部
RSC带进位反向减法ADD、SUB、RSB、ADC、SBC 和 RSCx6M
SADD8SADD16SASX并行有符号算法并行加法和减法6,x7M
SBC带进位的减法ADD、SUB、RSB、ADC、SBC 和 RSC全部
SBFXUBFX有符号、无符号位域提取SBFX 和 UBFXT2
SDIV有符号除法SDIV 和 UDIV7M,7R
SEL根据 APSR GE 标记选择字节SEL6,x7M
SETEND设置内存访问的端标记SETEND6,x7M
SEV设置事件NOP、SEV、WFE、WFI 和 YIELDK,6M
SHADD8SHADD16SHASXSHSUB8SHSUB16SHSAX并行有符号均分算法并行加法和减法6,x7M
SMC安全监控调用SMCZ
SMLAD两次有符号乘加 SMLAD 和 SMLSD6,x7M
 (32 <= 32 + 16 x 16 + 16 x 16)  
SMLAL有符号乘加 (64 <= 64 +32 x 32)UMULL、UMLAL、SMULL 和 SMLALx6M
SMLALxy有符号乘加 (64 <= 64 +16 x 16) SMLALxy5E,x7M
SMLALD两次有符号长整数乘加SMLALD 和 SMLSLD6,x7M
 (64 <= 64 + 16 x 16 + 16 x 16)  
SMLSD两次有符号乘减累加SMLAD 和 SMLSD6,x7M
 (32 <= 32 + 16 x 16 – 16 x 16)  
SMLSLD两次有符号长整数乘减累加SMLALD 和 SMLSLD6,x7M
 (64 <= 64 + 16 x 16 – 16 x 16)  
SMMUL有符号高位字乘法 (32 <= TopWord(32 x 32))SMMUL、SMMLA 和 SMMLS6,x7M
SMUADSMUSD有符号双乘法,并将乘积相加或相减SMUAD{X} 和 SMUSD{X}6,x7M
SMULxy有符号乘法 (32 <= 16 x 16)SMULxy 和 SMLAxy5E,x7M
SMULL有符号乘法 (64 <= 32 x 32)UMULL、UMLAL、SMULL 和 SMLALx6M
SMULWy有符号乘法 (32 <= 32 x 16)SMULWy 和 SMLAWy5E,x7M
SRS存储返回状态SRST2,x7M
SSAT有符号饱和SSAT 和 USAT6,x6M
SSAT16有符号饱和,并行半字SSAT16 和 USAT166,x7M
SSUB8SSUB16SSAX并行有符号算法并行加法和减法6,x7M
STC存储协处理器LDC、LDC2、STC 和 STC2x6M
STC2存储协处理器LDC、LDC2、STC 和 STC25,x6M
STM存储多个寄存器LDM 和 STM全部
STR存储寄存器指令内存访问指令全部
STREX独占存储寄存器LDREX 和 STREX6,x6M
STREXBSTREXH独占存储寄存器,字节或半字LDREX 和 STREXK,x6M
STREXD独占存储寄存器,双字LDREX 和 STREXK,x7M
SUB减法ADD、SUB、RSB、ADC、SBC 和 RSC全部
SUBS pc, lr从异常中返回,无出栈SUBS pc, lrT2,x7M
SVC(以前为 SWI超级用户调用SVC全部
SWPSWPB交换寄存器和内存(仅 ARM)SWP 和 SWPB所有,x7M
SXTB, SXTB16, SXTH有符号扩展SXT、SXTA、UXT 和 UXTA6
SXTAB, SXTAB16, SXTAH有符号扩展,带加法SXT、SXTA、UXT 和 UXTA6,x7M
TBBTBH表跳转字节、半字TBB 和 TBHT2
TEQTST相等测试、测试TST 和 TEQ全部
UADD8UADD16UASX并行无符号算法并行加法和减法6,x7M
UDIV无符号除法SDIV 和 UDIV7M,7R
UHADD8UHADD16UHASXUHSUB8UHSUB16UHSAX并行无符号均分算法并行加法和减法6,x7M
UMAAL无符号长整型乘加累加UMAAL6,x7M
 (64 <= 32 + 32 + 32 x 32)  
UMLALUMULL无符号乘加,乘法UMULL、UMLAL、SMULL 和 SMLALx6M
 (64 <= 32 x 32 + 64), (64 <= 32 x 32)  
UQADD8UQADD16UQASXUQSUB8UQSUB16UQSAX并行无符号饱和算法并行加法和减法6,x7M
USAD8差值的绝对值无符号求和USAD8 和 USADA86,x7M
USADA8差值的绝对值无符号求和再累加USAD8 和 USADA86,x7M
USAT无符号饱和SSAT 和 USAT6,x6M
USAT16无符号饱和,并行半字SSAT16 和 USAT166,x7M
USUB8USUB16USAX并行无符号算法并行加法和减法6,x7M
UXTB, UXTB16, UXTH无符号扩展SXT、SXTA、UXT 和 UXTA6
UXTAB, UXTAB16, UXTAH无符号扩展,带加法SXT、SXTA、UXT 和 UXTA6,x7M
V*请参阅Chapter 5 NEON 和 VFP 编程  
WFEWFIYIELD等待事件,等待中断,通知NOP、SEV、WFE、WFI 和 YIELDT2,6M

[1] “体系结构”列中的条目的含义如下:

全部

这些指令可用于所有版本的 ARM 体系结构。

5

这些指令可用于 ARMv5T*、ARMv6* 和 ARMv7 体系结构。

5E

这些指令可用于 ARMv5TE、ARMv6* 和 ARMv7 体系结构。

6

这些指令可用于 ARMv6* 和 ARMv7 体系结构。

6M

这些指令可用于 ARMv6-M 和 ARMv7 体系结构。

x6M

这些指令不可用于 ARMv6-M 体系结构。

7

这些指令可用于 ARMv7 体系结构。

7M

这些指令可用于 ARMv7-M 架构。

x7M

这些指令不可用于 ARMv6-M 和 ARMv7-M 架构。

7R

这些指令可用于 ARMv7-R 架构。

7MP

这些指令可用于实现了多重处理扩展的 ARMv7 体系结构。

EE

这些指令可用于 ARM 体系结构的 ThumbEE 变体。

J

此指令可用于 ARMv5TEJ、ARMv6* 和 ARMv7 体系结构。

K

这些指令可用于 ARMv6K 和 ARMv7 体系结构。

T

这些指令可用于 ARMv4T、ARMv5T*、ARMv6* 和 ARMv7 体系结构。

T2

这些指令可用于 ARMv6T2 及更高版本的体系结构。

XScale

这些指令可用于 ARM 体系结构的 XScale 版本。

Z

此指令仅当执行安全扩展后才可用。


Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential