95
SAM4CP [DATASHEET]
43051E–ATPL–08/14
Post-indexed Addressing
The address obtained from the register
Rn
is used as the address for the memory access. The offset value is added to or
subtracted from the address, and written back into the register
Rn
. The assembly language syntax for this mode is:
[
Rn
], #
offset
The value to load or store can be a byte, halfword, word, or two words. Bytes and halfwords can either be signed or
unsigned. See
“Address Alignment”
.
The table below shows the ranges of offset for immediate, pre-indexed and post-indexed forms.
Restrictions
For load instructions:
Rt
can be SP or PC for word loads only.
Rt
must be different from
Rt2
for two-word loads.
Rn
must be different from
Rt
and
Rt2
in the pre-indexed or post-indexed forms.
When
Rt
is PC in a word load instruction:
Bit[0] of the loaded value must be 1 for correct execution.
A branch occurs to the address created by changing bit[0] of the loaded value to 0.
If the instruction is conditional, it must be the last instruction in the IT block.
For store instructions:
Rt
can be SP for word stores only.
Rt
must not be PC.
Rn
must not be PC.
Rn
must be different from
Rt
and
Rt2
in the pre-indexed or post-indexed forms.
Condition Flags
These instructions do not change the flags.
Examples
LDR R8, [R10] ; Loads R8 from the address in R10.
LDRNE R2, [R5, #960]! ; Loads (conditionally) R2 from a word
; 960 bytes above the address in R5, and
; increments R5 by 960.
STR R2, [R9,#const-struc] ; const-struc is an expression evaluating
; to a constant in the range 0-4095.
STRH R3, [R4], #4 ; Store R3 as halfword data into address in
; R4, then increment R4 by 4
LDRD R8, R9, [R3, #0x20] ; Load R8 from a word 32 bytes above the
; address in R3, and load R9 from a word 36
; bytes above the address in R3
STRD R0, R1, [R8], #-16 ; Store R0 to address in R8, and store R1 to
; a word 4 bytes above the address in R8,
; and then decrement R8 by 16.
Table 12-18. Offset Ranges
Instruction Type
Immediate Offset
Pre-indexed
Post-indexed
Word,
halfword, byte, or signed byte
halfword,
signed
-255 to 4095
-255 to 255
-255 to 255
Two words
multiple of 4 in the
range -1020 to 1020
multiple of 4 in the
range -1020 to 1020
multiple of 4 in the
range -1020 to 1020