4.3.3. SUBS pc, lr

从异常中返回,无出栈。

Note

这是 Thumb-2 中的特例指令。 这一指令也可以采用ADD、SUB、RSB、ADC、SBC 和 RSC 中所述 SUB 指令的常规格式用在 ARM 代码中。

语法

SUBS{cond} pc, lr, #imm

其中:

imm

是一个立即数。 在 Thumb-2 中,该立即数的范围为 0-255。 在 ARM 代码中,它可为灵活的第二个操作数。 有关详细信息,请参阅灵活的第二操作数

cond

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

用法

如果堆栈中无返回状态,则您就可利用 SUBS pc, lr 从异常中返回。

SUBS pc, lr 从链接寄存器的值中减去一个值,并用结果加载 pc,然后再将 SPSR 复制到 CPSR。

说明

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

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

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

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

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

MOVS pc, lr 与 Thumb-2 中的 SUBS pc, lr, #0 同义。

体系结构

此 ARM 指令可用于所有版本的 ARM 体系结构。

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

此指令无 16 位 Thumb 版本。

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