Chapter 4. ARM Instruction Reference

This chapter describes the ARM® instructions that are supported by the ARM assembler. It contains the following sections:

See to Table 4.1 to locate individual instructions and pseudo-instructions.

Table 4.1. Location of ARM instructions

MnemonicBrief descriptionPageArchitecture[1]
ADC, ADDAdd with carry, AddADD, SUB, RSB, ADC, SBC, and RSCAll
ADR pseudo-instructionLoad program-relative or register-relative address (short range)ADR ARM pseudo-instructionAll
ADRL pseudo-instructionLoad program-relative or register-relative address into a register (medium range)ADRL ARM pseudo-instructionAll
ANDLogical ANDAND, ORR, EOR, and BICAll
BBranchB and BLAll
BICBit clearAND, ORR, EOR, and BICAll
BKPTBreakpointBKPT5
BLBranch with linkB and BLAll
BLXBranch, link and exchangeBLX5T[2]
BXBranch and exchangeBX4Tb
CDP, CDP2Coprocessor data operationCDP, CDP22, 5
CLZCount leading zeroesCLZ5
CMN, CMPCompare negative, CompareCMP and CMNAll
CPSChange processor stateCPS6
CPYCopyMOV, CPY and MVN6
EORExclusive ORAND, ORR, EOR, and BICAll
LDC, LDC2Load coprocessorLDC, STC2, 5
LDMLoad multiple registersLDM and STMAll
LDRLoad registerARM Memory access instructionsAll
LDR pseudo-instructionLoad register pseudo-instructionARM pseudo-instructionsAll
LDREXLoad register exclusiveLDREX and STREX6
MARMove from registers to 40-bit accumulatorMAR, MRAXScale[3]
MCR, MCR2, MCRR, MCRR2Move from register(s) to coprocessorMCR, MCR2, MCRR, and MCRR22, 5, 5E[4], 6
MIA, MIAPH, MIAxyMultiply with internal 40-bit accumulateMIA, MIAPH, and MIAxyXScale
MLAMultiply accumulateMUL and MLA2
MOVMoveMOV, CPY and MVNAll
MRAMove from 40-bit accumulator to registersMAR, MRAXScale
MRC, MRC2Move from coprocessor to registerMRC, MRC22, 5
MRRC, MRRC2Move from coprocessor to 2 registersMRRC and MRRC25Ed, 6
MRSMove from PSR to registerMRS3
MSRMove from register to PSR MSR3
MULMultiplyMUL and MLA2
MVNMove notMOV, CPY and MVNAll
NOP pseudo-instructionGenerates the preferred no-operation code.NOP ARM pseudo-instructionAll
ORRLogical ORAND, ORR, EOR, and BICAll
PKHBT, PKHTBPack halfwordsPKHBT and PKHTB6
PLDCache preloadPLD5Ed
QADD, QDADD, QDSUB, QSUBSaturating arithmeticQADD, QSUB, QDADD, and QDSUB5ExP[5]
QADD8, QADD16, QADDSUBX, QSUB8, QSUB16, QSUBADDXByte-wise and halfword-wise parallel signed saturating arithmeticParallel add and subtract6
REV, REV16, REVSHReverse byte orderREV, REV16, and REVSH6
RFEReturn from exceptionRFE6
RSB, RSC, SBCReverse sub, Reverse sub with carry, Sub with carryADD, SUB, RSB, ADC, SBC, and RSCAll
SADD8, SADD16, SADDSUBXByte-wise and halfword-wise parallel signed arithmeticParallel add and subtract6
SADD8TO16, SADD8TO32, SADD16TO32Sign extend and addSADD_TO_ and UADD_TO_6
SELSelect bytes according to CPSR GE flagsSEL6
SETENDSet endianness for memory accessesSETEND6
SHADD8, SHADD16, SHADDSUBX, SHSUB8, SHSUB16, SHSUBADDXByte-wise and halfword-wise parallel signed halving arithmeticParallel add and subtract6
SMLADDual signed multiply-accumulate (32 <= 32 + 16 x 16 + 16 x 16)SMLAD and SMLSD6
SMLALSigned multiply-accumulate (64 <= 64 + 32 x 32)UMULL, UMLAL, SMULL and SMLALM[6]
SMLALDDual signed multiply-accumulate long (64 <= 64 + 16 x 16 + 16 x 16)SMLALD and SMLSLD6
SMLALxySigned multiply-accumulate (64 <= 64 + 16 x 16)SMLALxy5ExPe
SMLAWySigned multiply-accumulate (32 <= 32 + 32 x 16)SMLAWy5ExPe
SMLAxySigned multiply-accumulate (32 <= 32 + 16 x 16)SMLAxy5ExPe
SMLSDDual signed multiply-subtract-accumulate (32 <= 32 + 16 x 16 – 16 x 16)SMLAD and SMLSD6
SMLSLDDual signed multiply-subtract-accumulate long (64 <= 64 + 16 x 16 – 16 x 16)SMLALD and SMLSLD6
SMULLSigned multiply (64 <= 32 x 32)UMULL, UMLAL, SMULL and SMLALMf
SMULWySigned multiply (32 <= 32 x 16)SMULWy5ExPe
SMULxySigned multiply (32 <= 16 x 16)SMULxy5ExPe
SMMLASigned top word multiply-accumulate (32 <= 32 + TopWord(32 x 32))SMMLA and SMMLS6
SMMLSSigned top word multiply-subtract (32 <= 32 – TopWord(32 x 32))SMMLA and SMMLS6
SMMULSigned top word multiply (32 <= TopWord(32 x 32))SMMUL6
SMUAD, SMUSDDual signed multiply, and add or subtract productsSMUAD and SMUSD6
SRSStore return stateSRS6
SSATSigned saturateSSAT and USAT6
SSAT16Signed saturate, parallel halfwordsSSAT16 and USAT166
SSUB8, SSUB16, SSUBADDXByte-wise and halfword-wise parallel signed arithmeticParallel add and subtract6
STC, STC2Store coprocessorLDC, STC2, 5ExPe
STMStore multiple registersLDM and STMAll
STRStore registerARM Memory access instructionsAll
STREXStore register exclusiveLDREX and STREX6
SUBSubtractADD, SUB, RSB, ADC, SBC, and RSCAll
SUNPKSigned unpackSUNPK and UUNPK6
SWISoftware interruptSWIAll
SWPSwap registers and memorySWP and SWPB3
TEQ, TSTTest equivalence, TestTST and TEQAll
UADD8, UADD16, UADDSUBXByte-wise and halfword-wise parallel unsigned arithmeticParallel add and subtract6
UADD8TO16, UADD8TO32, UADD16TO32Zero extend and addSADD_TO_ and UADD_TO_6
UHADD8, UHADD16, UHADDSUBX, UHSUB8, UHSUB16, UHSUBADDXByte-wise and halfword-wise parallel unsigned halving arithmeticParallel add and subtract6
UMAALUnsigned multiply accumulate accumulate long (64 <= 32 + 32 + 32 x 32)UMAAL6
UMLAL, UMULLUnsigned multiply-accumulate, multiply (64 <= 32 x 32 + 64), (64 <= 32 x 32)UMULL, UMLAL, SMULL and SMLALMf
UQADD8, UQADD16, UQADDSUBX, UQSUB8, UQSUB16, UQSUBADDXByte-wise and halfword-wise parallel unsigned saturating arithmeticParallel add and subtract6
USAD8Unsigned sum of absolute differencesUSAD8 and USADA86
USADA8Accumulate unsigned sum of absolute differencesUSAD8 and USADA86
USATUnsigned saturateSSAT and USAT6
USAT16Unsigned saturate, parallel halfwordsSSAT16 and USAT166
USUB8, USUB16, USUBADDXByte-wise and halfword-wise parallel unsigned arithmeticParallel add and subtract6
UUNPKUnsigned unpackSUNPK and UUNPK6

[1] n : available in architecture version n and above

[2] nT : available in T variants of architecture version n and above

[3] XScale: XScale coprocessor instructions

[4] 5E : available in ARMv5E, except ExP variants, and ARMv6 and above

[5] 5ExP : available in ARMv5E, including ExP variants, and ARMv6 and above

[6] M : available in ARMv3M, and ARMv4 and above, except xM versions

Copyright © 2003, 2004 ARM Limited. All rights reserved.ARM DUI 0231B
Non-Confidential