You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM处理器如何判断何时从SPSR恢复CPSR?ARMv4T模拟疑问

ARMv4T(ARM7TDMI)异常返回的PC与CPSR同步恢复机制
  • 核心逻辑:ARM7TDMI并不是“写PC就自动恢复CPSR”,而是仅当执行特定指令时才会同步恢复CPSR——这类指令是带S后缀的数据处理指令,目标寄存器为PC(R15),且操作的是当前异常模式下的R14寄存器。

  • 异常发生时的硬件准备:
    当触发异常(比如未定义指令、IRQ)时,硬件会自动完成两个操作:

    1. 将当前CPSR的内容复制到对应异常模式的SPSR(比如SPSR_UND、SPSR_IRQ);
    2. 将调整后的返回地址(根据异常类型,比如未定义异常是当前PC+4)存入该模式的R14(比如R14_UND、R14_IRQ)。
  • 异常返回指令的特殊行为:
    当执行类似MOVS PC, R14_UND或SUBS PC, R14_IRQ, #4这类指令时,处理器会同时执行两个动作:

    1. 将R14中的返回地址写入PC,实现跳转;
    2. 将当前异常模式的SPSR值复制回CPSR,恢复异常发生前的处理器状态(包括Thumb模式位T,因此不会出现PC解析错误的问题)。
  • 处理器的判断依据:
    硬件通过指令编码和当前运行模式来判断是否触发同步恢复:

    1. 指令编码中S位为1(表示带状态更新);
    2. 目标寄存器Rd为15(即PC);
    3. 当前处于异常模式(此时才有对应的SPSR可恢复);
    4. 源寄存器是当前模式的R14。
      这些判断都是硬件译码时直接完成的,效率极高,不需要对比PC值。
  • 子程序调用不受影响的原因:
    普通子程序调用(比如BL)返回时,用的是不带S后缀的指令(如MOV PC, R14)或分支指令(如BX R14),这些指令不满足上述条件,因此只会更新PC,不会触发CPSR的恢复操作,完全正常工作。

内容的提问来源于stack exchange,提问作者Papierkorb2292

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:01:19