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

Cortex M0+平台Thumb LDR指令PC相对寻址计算方法咨询

Cortex-M0+平台Thumb LDR指令PC相对加载地址分步计算方法

核心规则

Cortex-M0+中执行Thumb指令时,PC的bit[0]始终为0(bit0是Thumb状态标识,不属于地址有效部分),计算前必须先清除当前指令地址的bit[0],得到对齐后的指令地址。

分步计算流程

针对ldr <Rn>, [pc, #<offset>]类Thumb LDR指令,目标加载地址计算步骤:

  1. 获取当前LDR指令的实际地址(如示例中的0x1000'0306)
  2. 清除地址的bit[0],得到对齐后的指令地址(0x1000'0306 → 0x1000'0304)
  3. 对齐后的地址加4(PC指向当前指令之后的第2条Thumb指令,单条Thumb指令占2字节,故偏移+4)
  4. 加上指令中指定的立即数偏移,得到最终目标地址

验证示例

示例1

指令:0x1000'0306: LDR.N R4, [PC, #0xc0]
计算步骤:

  • 清除bit[0]:0x1000'0306 → 0x1000'0304
  • 加4:0x1000'0304 + 0x4 = 0x1000'0308
  • 加偏移:0x1000'0308 + 0xc0 = 0x1000'03C8(与正确结果一致)

示例2

指令:0x1000'0306: LDR.N R4, [PC, #0xc8]
计算步骤:

  • 清除bit[0]:0x1000'0306 → 0x1000'0304
  • 加4:0x1000'0304 + 0x4 = 0x1000'0308
  • 加偏移:0x1000'0308 + 0xc8 = 0x1000'03D0(与正确结果一致)

关键说明

常见错误是直接使用带bit0为1的指令原始地址计算,导致结果偏移2字节。必须牢记:Thumb模式下PC的bit0是状态标识,不属于地址有效位,计算前必须清除。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:28:17