这个ARM(Thumb)LDR指令是如何计算的?

问题描述 投票:0回答:1

代码在 Cortex M0+ 上运行。我正在尝试计算 LDR PC 相关负载的地址,但发现地址并不总是一致。

此 LDR PC 相关负载不遵循我迄今为止计算的任何其他 LDR PC 相关负载。这个地址是怎么一步一步计算出来的呢?请提供支持文档,因为我没有在任何地方看到过此文档。

“在此处添加 4”、“在此处添加 8”、“使用下一台 PC” 是典型的答案,但我发现这些答案无法提供一致或正确的结果。

这是(拇指)LDR 指令

ldr  r3, [pc, #4] ;

PC 相关负载的 Thumb 指令定义(忽略突出显示)

arm cortex-m thumb
1个回答
0
投票

您引用的摘录似乎解释得很清楚,注意注释:将 4 添加到

ldr
指令的地址,清除结果的位 1,并添加立即数。

在此示例中:

  • 指令位于地址0x1000451c。

  • 加 4 得到 0x10004520。

  • 清除该值的第 1 位。它已经是 0,所以什么也没有发生。

  • 加 4(立即数的值)得到 0x10004524。

这与反汇编程序告诉你的一致。

© www.soinside.com 2019 - 2024. All rights reserved.