3.4.5. LDM and STM

Load and Store Multiple registers.

Syntax

LDM Rn{!}, reglist
STM Rn!, reglist

where:

Rn

is the register on which the memory addresses are based.

!

writeback suffix.

reglist

is a list of one or more registers to be loaded or stored, enclosed in braces. It can contain register ranges. It must be comma separated if it contains more than one register or register range, see Examples.

LDMIA and LDMFD are synonyms for LDM. LDMIA refers to the base register being Incremented After each access. LDMFD refers to its use for popping data from Full Descending stacks.

STMIA and STMEA are synonyms for STM. STMIA refers to the base register being Incremented After each access. STMEA refers to its use for pushing data onto Empty Ascending stacks.

Operation

LDM instructions load the registers in reglist with word values from memory addresses based on Rn.

STM instructions store the word values in the registers in reglist to memory addresses based on Rn.

The memory addresses used for the accesses are at 4-byte intervals ranging from the value in the register specified by Rn to the value in the register specified by Rn + 4 * (n-1), where n is the number of registers in reglist. The accesses happens in order of increasing register numbers, with the lowest numbered register using the lowest memory address and the highest number register using the highest memory address. If the writeback suffix is specified, the value in the register specified by Rn + 4 *n is written back to the register specified by Rn.

Restrictions

In these instructions:

  • reglist and Rn are limited to R0-R7.

  • the writeback suffix must always be used unless the instruction is an LDM where reglist also contains Rn, in which case the writeback suffix must not be used.

  • the value in the register specified by Rn must be word aligned. See Address alignment for more information.

  • for STM, if Rn appears in reglist, then it must be the first register in the list.

Condition flags

These instructions do not change the flags.

Examples

    LDM     R0,{R0,R3,R4}      ; LDMIA is a synonym for LDM
    STMIA   R1!,{R2-R4,R6}

Incorrect examples

    STM     R5!,{R4,R5,R6} ; Value stored for R5 is unpredictable 
    LDM     R2,{}          ; There must be at least one register in the list
Copyright © 2009 ARM Limited. All rights reserved.ARM DUI 0497A
Non-Confidential