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

ARM异常模式下链接寄存器(LR)更新规则疑问及原理求证

ARM异常模式下LR寄存器更新机制解析

你的推测完全正确,核心差异源于不同异常的触发阶段与ARM流水线的指令执行时序不匹配:

1. ARM经典三级流水线的PC特性

ARM早期架构(如ARMv4/ARMv5)采用三级流水线:取指→解码→执行。正常运行时,PC寄存器始终指向正在取指的指令地址,比当前正在执行的指令超前2条(即执行中指令的地址 = PC - 8)。

2. SVC、预取中止、未定义指令异常的LR更新

这类异常均在解码阶段触发:

  • 预取中止:取指阶段获取的指令无效,但需到解码阶段才能确认异常;
  • 未定义指令:解码阶段识别出CPU无法解析的指令;
  • SVC指令:解码阶段识别出特权调用指令,触发异常。

在解码阶段触发异常时,当前处理的指令地址为PC - 4(PC此时指向正在取指的下一条指令)。为确保异常返回后能执行这条异常指令的下一条,硬件会将返回地址(即PC + 4)存入LR。

3. 数据中止异常的LR更新

数据中止异常在执行阶段触发:只有当CPU执行内存访问指令(如LDR/STR)时,发现内存操作出错(如地址无效、权限不足),才会触发异常。

此时,触发异常瞬间的PC指向正在取指的指令,比当前执行的出错指令超前2条(即出错指令地址 = PC - 8)。为了让异常返回后能重新执行这条出错的指令,硬件会将返回地址(即PC + 8)存入LR。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:22:33