4.2.10. RFE

从异常中返回。

语法

RFE{addr_mode}{cond} Rn{!}

其中:

addr_mode

为下列项之一:

IA

每次传送之后增大地址(满降序堆栈)

IB

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

DA

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

DB

每次传送前递减地址。

如果省略 addr_mode,则缺省情况下为 IA(Increment After,之后增大)。

cond

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

Note

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

Rn

指定基址寄存器。 不要将 r15 用于 Rn

!

是一个可选的后缀。 如果有 ! ,则最终地址将写回到 Rn 中。

用法

如果您提前利用 SRS 指令保存了返回状态,则可使用 RFE 指令从异常中返回(请参阅SRS)。 Rn 通常是在其中保存了返回状态信息的 sp

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

操作

从包含在 Rn 中的地址以及后续地址加载 pc 和 CPSR。 也可选择更新 Rn

说明

RFE 可向 pc 中写入地址。 对于从异常中返回后所使用的指令集,此地址的对齐必须正确:

  • 如果是返回到 ARM,写入 pc 的地址必须为字对齐。

  • 如果是返回到 Thumb-2,写入 pc 的地址必须为半字对齐。

  • 如果是返回到 Jazelle®,则对写入 pc 的地址没有任何地址对齐限制。

如果违反这些规则,则其后果将是不可预知的。 但如果指令用于从有效的异常输入机制返回,则对于软件没有特别注意事项。

如果地址没有字对齐,则 RFE 会忽略 Rn 两个最低有效位。

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

如果 mode 指定了用户模式,则会将普通规则应用于 CPSR 的写入操作(有关详细信息,请参阅《ARM 体系结构参考手册》)。

如果 mode 指定了监控模式,则结果不可预知(请参阅SMC)。

体系结构

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

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

此指令无 16 位版本。

示例

    RFE sp!
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential