3.3. Instruction set summary

The processor implements the ARMv6-M Thumb instruction set, including a number of 32-bit instructions that use Thumb-2 technology. The ARMv6-M instruction set comprises:

Table 3.1 shows the Cortex-M0 instructions and their cycle counts. The cycle counts are based on a system with zero wait-states.

Table 3.1. Cortex-M0 instruction summary

Operation DescriptionAssembler Cycles
Move8-bit immediateMOVS Rd, #<imm>1
Lo to LoMOVS Rd, Rm1
Any to AnyMOV Rd, Rm1
Any to PCMOV PC, Rm3
Add3-bit immediateADDS Rd, Rn, #<imm>1
All registers LoADDS Rd, Rn, Rm1
Any to AnyADD Rd, Rd, Rm1
Any to PCADD PC, PC, Rm3
8-bit immediateADDS Rd, Rd, #<imm>1
With carryADCS Rd, Rd, Rm1
Immediate to SPADD SP, SP, #<imm>1
Form address from SPADD Rd, SP, #<imm>1
Form address from PCADR Rd, <label>1
SubtractLo and LoSUBS Rd, Rn, Rm1
3-bit immediateSUBS Rd, Rn, #<imm>1
8-bit immediateSUBS Rd, Rd, #<imm>1
With carrySBCS Rd, Rd, Rm1
Immediate from SPSUB SP, SP, #<imm>1
SubtractNegateRSBS Rd, Rn, #01
MultiplyMultiplyMULS Rd, Rm, Rd1 or 32[a]
CompareCompareCMP Rn, Rm1
NegativeCMN Rn, Rm1
ImmediateCMP Rn, #<imm>1
LogicalANDANDS Rd, Rd, Rm1
Exclusive OREORS Rd, Rd, Rm1
ORORRS Rd, Rd, Rm1
Bit clearBICS Rd, Rd, Rm1
Move NOTMVNS Rd, Rm1
AND testTST Rn, Rm1
Shift Logical shift left by immediateLSLS Rd, Rm, #<shift>1
Logical shift left by registerLSLS Rd, Rd, Rs1
Logical shift right by immediateLSRS Rd, Rm, #<shift>1
Logical shift right by registerLSRS Rd, Rd, Rs1
Arithmetic shift rightASRS Rd, Rm, #<shift>1
Arithmetic shift right by registerASRS Rd, Rd, Rs1
RotateRotate right by registerRORS Rd, Rd, Rs1
LoadWord, immediate offsetLDR Rd, [Rn, #<imm>]2
Halfword, immediate offset

LDRH Rd, [Rn, #<imm>]

2
Byte, immediate offset

LDRB Rd, [Rn, #<imm>]

2
Word, register offsetLDR Rd, [Rn, Rm]2
Halfword, register offsetLDRH Rd, [Rn, Rm]2
Signed halfword, register offsetLDRSH Rd, [Rn, Rm]2
Byte, register offsetLDRB Rd, [Rn, Rm]2
LoadSigned byte, register offsetLDRSB Rd, [Rn, Rm]2
PC-relativeLDR Rd, <label>2
SP-relativeLDR Rd, [SP, #<imm>]2
Multiple, excluding baseLDM Rn!, {<loreglist>}1+N[b]
Multiple, including baseLDM Rn, {<loreglist>}1+N[b]
StoreWord, immediate offsetSTR Rd, [Rn, #<imm>]2
Halfword, immediate offsetSTRH Rd, [Rn, #<imm>]2
Byte, immediate offsetSTRB Rd, [Rn, #<imm>]2
Word, register offsetSTR Rd, [Rn, Rm]2
Halfword, register offsetSTRH Rd, [Rn, Rm]2
Byte, register offsetSTRB Rd, [Rn, Rm]2
SP-relativeSTR Rd, [SP, #<imm>]2
MultipleSTM Rn!, {<loreglist>}1+N[b]
PushPushPUSH {<loreglist>}1+N[b]
Push with link registerPUSH {<loreglist>, LR}1+N[b]
PopPopPOP {<loreglist>}1+N[b]
Pop and returnPOP {<loreglist>, PC}4+N[c]
BranchConditionalB<cc> <label>1 or 3[d]
UnconditionalB <label>3
With linkBL <label>4
With exchangeBX Rm3
With link and exchangeBLX Rm3
ExtendSigned halfword to wordSXTH Rd, Rm1
Signed byte to wordSXTB Rd, Rm1
Unsigned halfwordUXTH Rd, Rm1
ExtendUnsigned byteUXTB Rd, Rm1
ReverseBytes in wordREV Rd, Rm1
Bytes in both halfwordsREV16 Rd, Rm1
Signed bottom half wordREVSH Rd, Rm1
State changeSupervisor CallSVC #<imm>- [e]
Disable interruptsCPSID i1
Enable interruptsCPSIE i1
Read special registerMRS Rd, <specreg>4
Write special registerMSR <specreg>, Rn4
BreakpointBKPT #<imm>- [e]
HintSend eventSEV1
Wait for eventWFE2[f]
Wait for interruptWFI2[f]
YieldYIELD[g]1
No operationNOP1
BarriersInstruction synchronizationISB4
Data memoryDMB4
Data synchronizationDSB4

[a] Depends on multiplier implementation.

[b] N is the number of elements.

[c] N is the number of elements in the stack-pop list including PC and assumes load or store does not generate a HardFault exception.

[d] 3 if taken, 1 if not-taken.

[e] Cycle count depends on core and debug configuration.

[f] Excludes time spent waiting for an interrupt or event.

[g] Executes as NOP.


See the ARMv6-M ARM for more information about the ARMv6-M Thumb instructions

Copyright © 2009 ARM Limited. All rights reserved.ARM DDI 0432C
Non-Confidential