| |||
| Home > ARM and Thumb Instructions > Memory access instructions > SRS | |||
Store Return State onto a stack.
SRS{addr_mode}{cond} sp{!}, #modenum
SRS{addr_mode}{cond} #modenum{!} ; This is a pre-UAL syntax
where:
addr_modeis any one of the following:
IAIncrement address After each transfer
IBIncrement address Before each transfer (ARM only)
DADecrement address After each transfer (ARM only)
DBDecrement address Before each transfer (Full Descending stack).
If is
omitted, it defaults to Increment After. You can also use stack oriented
addressing mode suffixes, for example, when implementing stacks.addr_mode
condis an optional condition code.
is permitted
only in Thumb code, using a preceding condIT instruction.
This is an unconditional instruction in ARM.
!is
an optional suffix. If ! is present, the
final address is written back into the SP of the mode specified
by .modenum
modenumspecifies the number of the mode whose banked SP is used as the base register. You must use only the defined mode numbers.
SRS stores the LR and the SPSR of the current
mode, at the address contained in SP of the mode specified by ,
and the following word respectively. Optionally updates SP of the
mode specified by modenum.
This is compatible with the normal use of the modenumSTM instruction
for stack accesses.
For full descending stack, you must use SRSFD or SRSDB.
You can use SRS to store return state for an
exception handler on a different stack from the one automatically
selected.
Where addresses are not word-aligned, SRS ignores
the least significant two bits of the specified address.
The time order of the accesses to individual words of memory
generated by SRS is not architecturally defined. Do
not use this instruction on memory-mapped I/O locations where access
order matters.
Do not use SRS in User and System modes because
these modes do not have a SPSR.
Do not use SRS in Thumb-2EE.
SRS is not permitted in a non-secure state if specifies
monitor mode.modenum
This ARM instruction is available in ARMv6 and above.
This 32-bit Thumb instruction is available in ARMv6T2 and above, except the ARMv7-M architecture.
There is no 16-bit version of this instruction.