Technical Support
On-Line Manuals
Assembler Reference
Conventions and feedback
Assembler command line options
ARM and Thumb Instructions
Instruction summary
Instruction width specifiers
Memory access instructions
General data processing instructions
Flexible second operand (Operand2)
Operand2 as a constant
Operand2 as a register with optional shift
Shift operations
Multiply instructions
Saturating instructions
Parallel instructions
Parallel add and subtract
Packing and unpacking instructions
Branch and control instructions
Coprocessor instructions
Miscellaneous instructions
ThumbEE instructions
Pseudo-instructions
Condition codes
ADD, SUB, RSB, ADC, SBC, and RSC
ADR (PC-relative)
ADR (register-relative)
ADRL pseudo-instruction
AND, ORR, EOR, BIC, and ORN
ASR, LSL, LSR, ROR, and RRX
B, BL, BX, BLX, and BXJ
BFC and BFI
BKPT
CBZ and CBNZ
CDP and CDP2
CHKA
CLREX
CLZ
CMP and CMN
CPS
CPY pseudo-instruction
DBG
DMB, DSB, and ISB
ENTERX and LEAVEX
ERET
HB, HBL, HBLP, and HBP
IT
LDC, LDC2, STC, and STC2
LDM and STM
LDR and STR (immediate offset)
LDR and STR (register offset)
LDR and STR, unprivileged
LDR (PC-relative)
LDR (register-relative)
LDR pseudo-instruction
LDREX and STREX
MAR and MRA
MCR, MCR2, MCRR, and MCRR2
MIA, MIAPH, and MIAxy
MOV and MVN
MOV32 pseudo--instruction
MOVT
MRC, MRC2, MRRC and MRRC2
MRS (system coprocessor register to ARM register)
MRS (PSR to general-purpose register)
MSR (ARM register to system coprocessor register)
MSR (general-purpose register to PSR)
MUL, MLA, and MLS
NEG pseudo-instruction
PKHBT and PKHTB
PLD, PLDW, and PLI
PUSH and POP
QADD, QSUB, QDADD, and QDSUB
REV, REV16, REVSH, and RBIT
RFE
SBFX and UBFX
SDIV and UDIV
SEL
SETEND
SEV, WFE, WFI, and YIELD
SMC
NOP
SMLAD and SMLSD
SMLALxy
SMLALD and SMLSLD
SMMUL, SMMLA, and SMMLS
SMUAD{X} and SMUSD{X}
SMULxy and SMLAxy
SMULWy and SMLAWy
SRS
SSAT and USAT
SSAT16 and USAT16
SUBS pc, lr
SVC
SWP and SWPB
SXT, SXTA, UXT, and UXTA
SYS
TBB and TBH
TST and TEQ
UMULL, UMLAL, SMULL, and SMLAL
UMAAL
UND pseudo-instruction
USAD8 and USADA8
VFP Programming
Directives Reference
|
Assembler Reference
LDR (register-relative)
Load register. The address is an offset from a base register. Syntax
LDR{type}{cond}{.W} Rt, label
LDRD{cond} Rt, Rt2, label ; Doubleword
where: typecan be any one of: Bunsigned
Byte (Zero extend to 32 bits on loads.) SBsigned
Byte (LDR only. Sign extend to 32 bits.) Hunsigned
Halfword (Zero extend to 32 bits on loads.) SHsigned
Halfword (LDR only. Sign extend to 32 bits.) -
condis an optional condition code. .Wis
an optional instruction width specifier. Rtis the register to load or store. Rt2is the second register to load or store. labelis a symbol defined by the FIELD directive. label specifies
an offset from the base register which is defined using the MAP directive. label must
be within a limited distance of the value in the base register.
Offset range and architectures
The assembler calculates the offset from the base register
for you. The assembler generates an error if label is
out of range. Table 13 shows
the possible offsets between the label and the current instruction. Table 13. register-relative offsets | Instruction | Offset range | Architectures[] |
|---|
ARM LDR, LDRB[] | +/- 4095 | All | ARM LDRSB, LDRH, LDRSH | +/- 255 | All | ARM LDRD | +/- 255 | 5E | 32-bit Thumb LDR, LDRB, LDRSB, LDRH, LDRSH [] | -255 to 4095 | T2 | 32-bit Thumb LDRD | +/- 1020 [] | T2 | 16-bit Thumb LDR [] | 0 to 124 [] | T | 16-bit Thumb LDRH [] | 0 to 62 [] | T | 16-bit Thumb LDRB [] | 0 to 31 | T | 16-bit Thumb LDR, base register
is SP[] | 0 to 1020 [] | T | 16-bit ThumbEE LDR [] | -28 to 124 [] | EE | 16-bit Thumb LDR, base register
is R9 [] | 0 to 252 [] | EE | 16-bit ThumbEE LDR, base register
is R10 [] | 0 to 124 [] | EE |
LDR (register-relative) in 32-bit
Thumb
You can use the .W width specifier to force LDR to
generate a 32-bit instruction in Thumb code. LDR.W always
generates a 32-bit instruction, even if the target could be reached
using a 16-bit LDR. For forward references, LDR without .W always
generates a 16-bit instruction in Thumb code, even if that results
in failure for a target that could be reached using a 32-bit Thumb LDR instruction. Doubleword register restrictions
For 32-bit Thumb instructions, you must not specify SP or
PC for either Rt or Rt2. For ARM instructions: Use of PC
You can use PC for Rt in
word instructions. Other uses of PC are not permitted in these instructions. Use of SP
In ARM, you can use SP for Rt in
word instructions. You can use SP for Rt in
non-word ARM instructions but this is deprecated in ARMv6T2 and
above. In Thumb, you can use SP for Rt in
word instructions only. All other use of SP for Rt in
these instructions are not permitted in Thumb code. See also
|