4.2.11. SRS

将返回状态存储到堆栈。

语法

SRS{addr_mode}{cond} sp{!}, #modenum
SRS{addr_mode}{cond} #modenum{!}        ; This is a pre-UAL syntax

其中:

addr_mode

为下列项之一:

IA

每次传送之后增大地址

IB

每次传送之前增大地址(仅 ARM)

DA

每次传送后递减地址(仅 ARM)

DB

每次传送前递减地址(满降序堆栈)。

如果省略 addr_mode,则缺省情况下为 IA(Increment After,之后增大)。 有关面向堆栈的寻址模式后缀,请参阅Table 2.9

cond

是一个可选的条件代码(请参阅条件执行)。

Note

cond 只能用在 Thumb-2 代码中,且前面要有 IT 指令。 这是 ARM 中的无条件执行指令。

!

是一个可选的后缀。 如果有 ! ,则最终地址会写回到 modenum 所指定的模式的 sp 中。

modenum

指定模式的编号,该模式的编组 sp 会用作基址寄存器,请参阅处理器模式

运算

SRS 可将当前模式的 lr 和 SPSR 分别存储在 modenum 所指定模式的 sp 中包含的地址上及其后续一个字中。 也可选择对 modenum 所指定模式的 sp 进行更新。 这与用于访问堆栈的 STM 指令的常规用法是兼容的,请参阅LDM 和 STM

Note

对于满降序堆栈,必须使用 SRSFDSRSDB

用法

您可利用 SRS,将异常处理程序的返回状态存储到一个与自动选择的堆栈不同的堆栈中。

在 Thumb-2EE 中,如果基址寄存器中的值为零,则代码将跳转到位于 HandlerBase - 4 的 NullCheck 处理程序处执行。

说明

如果地址没有字对齐,则 SRS 会忽略指定地址的两个最低有效位。

对于 SRS 所生成的单个内存字,并没有从结构上定义其访问顺序。 请不要在讲究访问顺序的内存映射 I/O 位置使用此指令。

在用户模式和系统模式下,SRS 是不可预知的,因为这两个模式均没有 SPSR。

体系结构

此 ARM 指令可用于 ARMv6 及更高版本。

此 32 位 Thumb 指令可用于 ARMv6T2 及更高版本(ARMv7-M 架构除外)。

此指令无 16 位版本。

示例

R13_usr  EQU     16
         SRSFD   sp,#R13_usr
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential