【发布时间】:2014-01-21 14:14:15
【问题描述】:
我正在查看导致未定义指令异常并为异常提供处理程序的示例代码。最后一行代码语法不熟悉,一直没找到意思:
LDMFD sp!, {r0-r12, pc}^
^符号代表什么?
【问题讨论】:
我正在查看导致未定义指令异常并为异常提供处理程序的示例代码。最后一行代码语法不熟悉,一直没找到意思:
LDMFD sp!, {r0-r12, pc}^
^符号代表什么?
【问题讨论】:
来自ARM armasm LDM documentation:
^
是可选后缀,仅在 ARM 状态下可用。您不得使用 它在用户模式或系统模式下。它有以下用途:
- 如果 reglist 包含 PC (R15),除了正常的多寄存器传输外,SPSR 被复制到 CPSR 中。这是为了从异常处理程序返回。仅在异常模式下使用它。
- 否则,数据会传入或传出用户模式寄存器,而不是当前模式寄存器。
【讨论】:
这会将当前模式的 SPSR 复制到 CPSR 中,给出原子返回和恢复状态指令。 Furber 文本 pg 中有很好的描述。 131.
【讨论】: