やまものブログ

メモ書きブログです (^_^;A

ARM DEN0013C - Appendix A Instruction Summary

ARM認定エンジニア認定資格 の試験を 1/30(木)に受験する予定で、ARMのアセンブラを弄って勉強しています。しかし、このまま思いつくままのやり方では試験要綱へのカバー範囲が偏るのが心配(汗) 。。。ということで、
Cortex-A Series
Version: 3.0
Programmer’s Guide
ARM DEN0013C (ID071612)

Appendix A Instruction Summary
を一覧表にまとめてみました。
Perlスクリプトを作って抜き出したので写し間違いは無いと思いますが、内容の正確さとか有用性は保証はできませんm(_ _)m

ブログのページ幅の関係で美しくないですが、コピペして Microsoft Excel や Libre Office Calc に張り付けるとちゃんとスプレッドシートになります。


A.1.1ADCAdd with CarryADC{S}{cond} {Rd}, Rn, <Operand2>
A.1.2ADDADD adds together the values in Rn and Operand2 (or Rn and imm12).ADD{S}{cond} {Rd,} Rn, <Operand2>
A.1.3ADRAddressADR{cond} Rd, label
A.1.4ADRLAddressADRL{cond} Rd, label
A.1.5ANDAND does a bitwise AND on the values in Rn and Operand2.AND{S}{cond} {Rd,} Rn, <Operand2>
A.1.6ASRArithmetic Shift RightASR{S}{cond} {Rd,} Rm, Rs
ASR{S}{cond} {Rd,} Rm, imm
A.1.7BBranchB{cond}{.W} label
A.1.8BFCBit Field ClearBFC{cond} Rd, #lsb, #width
A.1.9BFIBit Field InsertBFI{cond} Rd, Rn, #lsb, #width
A.1.10BICbit clearBIC{S}{cond} {Rd}, Rn, <Operand2>
A.1.11BKPTBreakpointBKPT #imm
A.1.12BLBranch with LinkBL{cond} label
A.1.13BLXBranch with Link and eXchangeBLX{cond} label
BLX{cond} Rm
A.1.14BXBranch and eXchangeBX{cond} Rm
A.1.15BXJBranch and eXchange JazelleBXJ{cond} Rm
A.1.16CBNZCompare and Branch if NonzeroCBNZ Rn, label
A.1.17CBZCompare and Branch if ZeroCBZ Rn, label
A.1.18CDPCoprocessor Data Processing operationCDP{cond} coproc, #opcode1, CRd, CRn, CRm{, #opcode2}
A.1.19CDP2Coprocessor Data Processing operationCDP2{cond} coproc, #opcode1, CRd, CRn, CRm{, #opcode2}
A.1.20CHKACheck arrayCHKA Rn, Rm
A.1.21CLREXClear ExclusiveCLREX{cond}
A.1.22CLZCount Leading ZerosCLZ{cond} Rd, Rm
A.1.23CMNCompare NegativeCMN{cond} Rn, <Operand2>
A.1.24CMPCompareCMP{cond} Rn, <Operand2>
A.1.25CPSChange Processor StateCPS #mode
CPSIE iflags{, #mode}
CPSID iflags{, #mode}
A.1.26DBGDebugDBG{cond} {option}
A.1.27DMBData Memory BarrierDMB{cond} {option}
A.1.28DSBData Synchronization BarrierDSB{cond} {option}
A.1.29ENTERXENTERX causes a change from Thumb state to ThumbEE state, or has no effect in ThumbEE state.ENTERX
A.1.30EOREOR performs an Exclusive OR operation on the values in Rn and Operand2.EOR{S}{cond} {Rd,} Rn, <Operand2>
A.1.31ERETException ReturnERET{cond} {q}
A.1.32HBHandler BranchHB{L} #HandlerID
HB{L}P #imm, #HandlerID
A.1.33ISBInstruction Synchronization BarrierISB{cond} {option}
A.1.34ITIf-thenIT{x{y{z}}} {cond}
A.1.35LDCLoad Coprocessor Registers LDC{L}{cond} coproc, CRd, [Rn]
LDC{L}{cond} coproc, CRd, [Rn, #{-}offset]{!}
LDC{L}{cond} coproc, CRd, [Rn], #{-}offset
LDC{L}{cond} coproc, CRd, label
A.1.36LDC2Load Coprocessor RegistersLDC2{L}{cond} coproc, CRd, [Rn]
LDC2{L}{cond} coproc, CRd, [Rn, #{-}offset]{!}
LDC2{L}{cond} coproc, CRd, [Rn], #{-}offset
LDC2{L}{cond} coproc, CRd, label
A.1.37LDMLoad Multiple registersLDM{addr_mode}{cond} Rn{!},reglist{^}
A.1.38LDRLoad RegisterLDR{type}{T}{cond} Rt, [Rn {, #offset}]
LDR{type}{cond} Rt, [Rn, #offset]!
LDR{type}{T}{cond} Rt, [Rn], #offset
LDR{type}{cond} Rt, [Rn, +/-Rm {, shift}]
LDR{type}{cond} Rt, [Rn, +/-Rm {, shift}]!
LDR{type}{T}{cond} Rt, [Rn], +/-Rm {, shift}
A.1.39LDRLoad RegisterLDR{cond}{.W} Rt, =expr
LDR{cond}{.W} Rt, label_expr
A.1.40LDRDLoad Register DualLDRD{cond} Rt, Rt2, [{Rn},+/-{Rm}]{!}
LDRD{cond} Rt, Rt2, [{Rn}],+/-{Rm}
A.1.41LDREXLoad register exclusiveLDREX{cond} Rt, [Rn {, #offset}]
LDREXB{cond} Rt, [Rn]
LDREXH{cond} Rt, [Rn]
LDREXD{cond} Rt, Rt2, [Rn]
A.1.42LEAVEXLEAVEX causes a change from ThumbEE state to Thumb state, or has no effect in Thumb state.LEAVEX
A.1.43LSLLogical Shift LeftLSL{S}{cond} Rd, Rm, Rs
LSL{S}{cond} Rd, Rm, imm
A.1.44LSRLogical Shift RightLSR{S}{cond} Rd, Rm, Rs
LSR{S}{cond} Rd, Rm, imm
A.1.45MCRMove to Coprocessor from RegisterMCR{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
A.1.46MCR2Move to Coprocessor from RegisterMCR2{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
A.1.47MCRRMove to Coprocessor from RegistersMCRR{cond} coproc, #opcode3, Rt, Rt2, CRm
A.1.48MCRR2Move to Coprocessor from RegistersMCRR2{cond} coproc, #opcode3, Rt, Rt2, CRm
A.1.49MLAMultiply AccumulateMLA{S}{cond} Rd, Rn, Rm, Ra
A.1.50MLSMultiply and SubtractMLS{S}{cond} Rd, Rn, Rm, Ra
A.1.51MOVMoveMOV{S}{cond} Rn, <Operand2>
MOV{cond} Rd, #imm16
A.1.52MOVTMove TopMOVT{cond} Rd, #imm16
A.1.53MOV32MOV32 is a pseudo-instruction which loads a register with a 32-bit immediate value or address.MOV32 Rd, expr
A.1.54MRCMove to Register from CoprocessorMRC{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
A.1.55MRC2Move to Register from CoprocessorMRC2{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}
A.1.56MRRCMove to Registers from CoprocessorMRRC{cond} coproc, #opcode3, Rt, Rt2, CRm
A.1.57MRRC2Move to Registers from CoprocessorMRRC2{cond} coproc, #opcode3, Rt, Rt2, CRm
A.1.58MRSMove Status register or Coprocessor Register to General purpose registerMRS{cond} Rd, psr
MRS{cond} Rn, coproc_register
MRS{cond} APSR_nzcv, DBGDSCRint
MRS{cond} APSR_nzcv, FPSCR
A.1.59MSRMove Status Register or Coprocessor Register from General Purpose RegisterMSR{cond} APSR_flags, Rm
MSR{cond} coproc_register
MSR{cond} APSR_flags, #constant
MSR{cond} psr_fields, #constant
MSR{cond} psr_fields, Rm
A.1.60MULMultiplyMUL{S}{cond} {Rd,} Rn, Rm
A.1.61MVNMove NotMVN{S}{cond} Rn, <Operand2>
A.1.62NOPNo OperationNOP{cond}
A.1.63ORNOR NOTORN{S}{cond} {Rd,} Rn, <Operand2>
A.1.64ORRPerforms an OR operation on the bits in Rn with the corresponding bits in the value of Operand2.ORR{S}{cond} {Rd,} Rn, <Operand2>
A.1.65PKHBTPack Halfword Bottom TopPKHBT{cond} {Rd,} Rn, Rm{, LSL #leftshift}
A.1.66PKHTBPack Halfword Top BottomPKHTB{cond} {Rd,} Rn, Rm {, ASR #rightshift}
A.1.67PLDPreload DataPLD{cond} [Rn {, #offset}]
PLD{cond} [Rn, +/-Rm {, shift}]
PLD{cond} label
A.1.68PLDWPreload data with intent to writePLDW{cond} [Rn {, #offset}]
PLDW{cond} [Rn, +/-Rm {, shift}]
A.1.69PLIPreload instructionsPLI{cond} [Rn {, #offset}]
PLI{cond} [Rn, +/-Rm {, shift}]
PLI{cond} label
A.1.70POPPOP is used to pop registers off a full descending stack.POP{cond} reglist
A.1.71PUSHPUSH is used to push registers on to a full descending stack.PUSH{cond} reglist
A.1.72QADDSaturating signed AddQADD{cond} {Rd,} Rm, Rn
A.1.73QADD8Saturating signed bytewise AddQADD8{cond} {Rd,} Rn, Rm
A.1.74QADD16Saturating signed bytewise AddQADD16{cond} {Rd,} Rn, Rm
A.1.75QASXSaturating signed Add Subtract eXchangeQASX{cond} {Rd,} Rn, Rm
A.1.76QDADDSaturating signed AddQDADD{cond} {Rd,} Rm, Rn
A.1.77QDSUBSaturating signed Doubling SubtractionQDSUB{cond} {Rd,} Rm, Rn
A.1.78QSAXSaturating signed Subtract Add ExchangeQSAX{cond} {Rd,} Rn, Rm
A.1.79QSUBSaturating signed SubtractionQSUB{cond} {Rd,} Rm, Rn
A.1.80QSUB8Saturating signed bytewise SubtractQSUB8{cond} {Rd,} Rn, Rm
A.1.81QSUB16Saturating signed halfword SubtractQSUB16{cond} {Rd,} Rn, Rm
A.1.82RBITReverse bitsRBIT{cond} Rd, Rn
A.1.83REVReverseREV{cond} {Rd}, Rn
A.1.84REV16Reverse byte order halfwordsREV16{cond} {Rd}, Rn
A.1.85REVSHReverse byte order halfword, with sign extensionREVSH{cond} Rd, Rn
A.1.86RFEReturn from ExceptionRFE{addr_mode}{cond} Rn{!}
A.1.87RORRotate right RegisterROR{S}{cond} {Rd,} Rm, Rs
ROR{S}{cond} {Rd,} Rm, imm
A.1.88RRXRotate Right with extendRRX{S}{cond} {Rd,} Rm
A.1.89RSBReverse SubtractRSB{S}{cond} {Rd,} Rn, <Operand2>
A.1.90RSCReverse Subtract with CarryRSC{S}{cond} {Rd,} Rn, <Operand2>
A.1.91SADD8Signed bytewise AddSADD8{cond} {Rd,} Rn, Rm
A.1.92SADD16Signed bytewise AddSADD16{cond} {Rd,} Rn, Rm
A.1.93SASXSigned Add Subtract ExchangeSASX{cond} {Rd,} Rn, Rm
A.1.94SBCSubtract with CarrySBC{S}{cond} {Rd,} Rn, <Operand2>
A.1.95SBFXSigned Bit Field ExtractSBFX{cond} Rd, Rn, #lsb, #width
A.1.96SDIVSigned DivideSDIV{cond}{q} {Rd,} Rn, Rm
A.1.97SELSelectSEL{cond} {Rd,} Rn, Rm
A.1.98SETENDSet endiannessSETEND LE
SETEND BE
A.1.99SEVSend EventSEV{cond}
A.1.100SHADD8Signed halving bytewise AddSHADD8{cond} {Rd,} Rn, Rm
A.1.101SHADD16Signed halving bytewise AddSHADD16{cond} {Rd,} Rn, Rm
A.1.102SHASXSigned Halving Add Subtract ExchangeSHASX{cond} {Rd,} Rn, Rm
A.1.103SHSAXSigned Halving Subtract Add ExchangeSHSAX{cond} {Rd,} Rn, Rm
A.1.104SHSUB8Signed halving bytewise subtractionSHSUB8{cond} {Rd,} Rn, Rm
A.1.105SHSUB16Signed Halving halfword-wise SubtractSHSUB16{cond} {Rd,} Rn, Rm
A.1.106SMCSecure Monitor CallSMC{cond} #imm4
A.1.107SMLAxySigned Multiply Accumulate; 32 <= 32 + 16 * 16SMLA<x><y>{cond} Rd, Rn, Rm, Ra
A.1.108SMLADDual Signed Multiply Accumulate; 32 <= 32 + 16 * 16 + 16 * 16SMLAD{X}{cond} Rd, Rn, Rm, Ra
A.1.109SMLALSigned Multiply Accumulate 64 <= 64 + 32 * 32SMLAL{S}{cond} RdLo, RdHi, Rn, Rm
A.1.110SMLALxySigned Multiply Accumulate; 64 <= 64 + 16 * 16SMLAL<x><y>{cond} RdLo, RdHi, Rn, Rm
A.1.111SMLALDDual Signed Multiply Accumulate Long; 64 <= 64 + 16 * 16 + 16 * 16SMLALD{X}{cond} RdLo, RdHi Rn, Rm
A.1.112SMLAWySigned Multiply with Accumulate Wide; 32 <= 32 * 16 + 32SMLAW<y>{cond} Rd, Rn, Rm, Ra
A.1.113SMLSLDDual Signed Multiply Subtract Accumulate Long; 64 <= 64 + 16 * 16 - 16 * 16SMLSLD{X}{cond} RdLo, RdHi Rn, Rm
A.1.114SMMLASigned top word Multiply with Accumulate; 32 <= top word SMMLA{R}{cond} Rd, Rn, Rm, Ra
A.1.115SMMLSSigned top word Multiply with Subtract; 32 <= top word SMMLS{R}{cond} Rd, Rn, Rm, Ra
A.1.116SMMULSigned top word Multiply; 32 <= top word SMMUL{R}{cond} Rd, Rn, Rm
A.1.117SMUADDual Signed Multiply and Add productsSMUAD{X}{cond} Rd, Rn, Rm
A.1.118SMUSDDual Signed Multiply and Subtract productsSMUSD{X}{cond} Rd, Rn, Rm
A.1.119SMULxySigned Multiply; 32 <= 16 * 16SMUL<x><y>{cond} {Rd}, Rn, Rm
A.1.120SMULLsigned multiply long; 64 <= 32 * 32SMULL{S}{cond} RdLo, RdHi, Rn, Rm
A.1.121SMULWySigned Multiply Wide; 32 <= 32 * 16SMULW<y>{cond} {Rd}, Rn, Rm
A.1.122SRSStore Return StateSRS{addr_mode}{cond} sp{!}, #modenum
A.1.123SSATSigned SaturateSSAT{cond} Rd, #sat, Rm{, shift}
A.1.124SSAT16Signed Saturate, parallel halfwordsSSAT16{cond} Rd, #sat, Rn
A.1.125SSAXSigned Subtract Add ExchangeSSAX{cond} {Rd,} Rn, Rm
A.1.126SSUB8Signed halving bytewise SubtractionSSUB8{cond} {Rd,} Rn, Rm
A.1.127SSUB16Signed halfword-wise SubtractSSUB16{cond} {Rd}, Rn, Rm
A.1.128STCStore Coprocessor RegistersSTC{L}{cond} coproc, CRd, [Rn]
STC{L}{cond} coproc, CRd, [Rn, #{-}offset]{!}
STC{L}{cond} coproc, CRd, [Rn], #{-}offset
STC{L}{cond} coproc, CRd, label
A.1.129STC2Store Coprocessor registersSTC2{L}{cond} coproc, CRd, [Rn]
STC2{L}{cond} coproc, CRd, [Rn, #{-}offset]{!}
STC2{L}{cond} coproc, CRd, [Rn], #{-}offset
STC2{L}{cond} coproc, CRd, label
A.1.130STMStore Multiple registersSTM{addr_mode}{cond} Rn{!},reglist{^}
A.1.131STRStore RegisterSTR{type}{T}{cond} Rt, [Rn {, #offset}]
STR{type}{cond} Rt, [Rn, #offset]!
STR{type}{T}{cond} Rt, [Rn], #offset
STR{type}{cond} Rt, [Rn, +/-Rm {, shift}]
STR{type}{cond} Rt, [Rn, +/-Rm {, shift}]!
STR{type}{T}{cond} Rt, [Rn], +/-Rm {, shift}
A.1.132STRDStore Register DualSTRD{cond} Rt, Rt2, [Rn {,#+/-<imm>}]
STRD{cond} Rt, Rt2, [<Rn>, #+/-<imm>
STRD{cond} Rt, Rt2, [<Rn>, #+/-<imm>]!
STRD{cond} Rt, Rt2, [{Rn},+/-{Rm}]{!}
STRD{cond} Rt, Rt2, [{Rn}],+/-{Rm}
A.1.133STREXStore register exclusiveSTREX{cond} Rd, Rt, [Rn {, #offset}]
STREXB{cond} Rd, Rt, [Rn]
STREXH{cond} Rd, Rt, [Rn]
STREXD{cond} Rd, Rt, Rt2, [Rn]
A.1.134SUBSubtractSUB{S}{cond} {Rd,} Rn, <Operand2>
A.1.135SVCSuperVisor CallSVC{cond} #imm
A.1.136SWPSwap registers and memorySWP{B}{cond} Rt, Rt2, [Rn]
A.1.137SXTSigned ExtendSXT<extend>{cond} {Rd,} Rm {,rotation}
A.1.138SXTASigned Extend and AddSXTA<extend>{cond} {Rd,} Rn, Rm {,rotation}
A.1.139SYSSystem coprocessor instructionSYS{cond} instruction {,Rn}
A.1.140TBBTable Branch ByteTBB [Rn, Rm]
A.1.141TBHTable Branch HalfwordTBH [Rn, Rm, LSL #1]
A.1.142TEQTest EquivalenceTEQ{cond} Rn, <Operand2>
A.1.143TSTTestTST{cond} Rn, <Operand2>
A.1.144UADD8Unsigned bytewise AddUADD8{cond} {Rd,} Rn, Rm
A.1.145UADD16Unsigned halfword-wise AddUADD16{cond} {Rd,} Rn, Rm
A.1.146UASXUnsigned Add Subtract ExchangeUASX{cond} {Rd,} Rn, Rm
A.1.147UBFXUnsigned Bit Field ExtractUBFX{cond} Rd, Rn, #lsb, #width
A.1.148UDIVUnsigned DivideUDIV{cond}{q} {Rd,} Rn, Rm
A.1.149UHADD8Unigned Halving bytewise AddUHADD8{cond} {Rd,} Rn, Rm
A.1.150UHADD16Unsigned Halving halfword-wise AddUHADD16{cond} {Rd,} Rn, Rm
A.1.151UHASXUnsigned Halving Add Subtract ExchangeUHASX{cond} {Rd,} Rn, Rm
A.1.152UHSAXUnsigned Halving Subtract Add ExchangeUHSAX{cond} {Rd}, Rn, Rm
A.1.153UHSUB8Unsigned Halving bytewise SubtractionUHSUB8{cond} {Rd,} Rn, Rm
A.1.154UHSUB16Unsigned Halving halfword-wise SubtractUHSUB16{cond} {Rd}, Rn, Rm
A.1.155UMAALUnsigned Multiply Accumulate Long; 64 <= 32 + 32 + 32 x 32UMAAL{cond} RdLo, RdHi, Rn, Rm
A.1.156UMLALUnsigned Multiply Accumulate 64 <= 64 + 32 x 32UMLAL{S}{cond} RdLo, RdHi, Rn, Rm
A.1.157UMULLUnsigned Multiply; 64 <= 32 x 32UMULL{S}{cond} RdLo, RdHi, Rn, Rm
A.1.158UQADD8Saturating Unsigned bytewise AddUQADD8{cond} {Rd,} Rn, Rm
A.1.159UQADD16Saturating Unsigned halfword-wise AddUQADD16{cond} {Rd,} Rn, Rm
A.1.160UQASXSaturating Unsigned Add Subtract ExchangeUQASX{cond} {Rd,} Rn, Rm
A.1.161UQSAXSaturating Unsigned Subtract Add ExchangeUQSAX{cond} {Rd,} Rn, Rm
A.1.162UQSUB8Saturating Unsigned bytewise SubtractUQSUB8{cond} {Rd,} Rn, Rm
A.1.163UQSUB16Saturating Unsigned halfword SubtractUQSUB16{cond} {Rd,} Rn, Rm
A.1.164USAD8Unsigned Sum of Absolute DifferencesUSAD8{cond} Rd, Rn, Rm
A.1.165USADA8Unsigned Sum of Absolute Differences AccumulateUSADA8{cond} Rd, Rn, Rm, Ra
A.1.166USATUnsigned SaturateUSAT{cond} Rd, #sat, Rm{, shift}
A.1.167USAT16Unigned Saturate, parallel halfwordsUSAT16{cond} Rd, #sat, Rn
A.1.168USAXUnsigned Subtract Add ExchangeUSAX{cond} {Rd,} Rn, Rm
A.1.169USUB8Unsigned bytewise SubtractionUSUB8{cond} {Rd,} Rn, Rm
A.1.170USUB16Unsigned halfword-wise SubtractUSUB16{cond} {Rd,} Rn, Rm
A.1.171UXTUnsigned ExtendUXT<extend>{cond} {Rd,} Rm {,rotation}
A.1.172UXTAUnsigned Extend and AddUXTA<extend>{cond} {Rd,} Rn, Rm {,rotation}
A.1.173WFEWait for EventWFE{cond}
A.1.174WFIWait For InterruptWFI{cond}
A.1.175YIELDYIELDYIELD{cond}