【问题标题】:What does the hash (#) value associated with the ARM LDR instruction mean?与 ARM LDR 指令相关的哈希 (#) 值是什么意思?
【发布时间】:2011-05-23 13:33:45
【问题描述】:

我正在尝试调试我在应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的 LDR 指令(感谢反汇编程序):

LDR R3, [R0,#4]

我的问题是关于源组件。第二个参数中的#4 是什么意思?我假设它是某种偏移量,但我还没有找到支持 LDR 指令的文档。

【问题讨论】:

  • 一般在 arm 汇编器中 # 用于表示立即数。

标签: assembly arm


【解决方案1】:

它从 R0 + 4 字节的地址加载 R3。所以,是的,它是一个字节偏移量。 See this explanation of the addressing modes.

【讨论】:

【解决方案2】:

它将 R0 中的值加 4 并将其用作地址以将 32 位值加载到寄存器 R3 中

【讨论】:

    【解决方案3】:

    在 GNU gas 中,只有在 ARMv7 不使用 .syntax unified 时才需要哈希 #

    比如你可以不写# for ARMv8 aarch64-linux-gnu-as:

    LDR x0, [x0,4]
    

    或者如果在arm-linux-gnueabihf-as 中使用.syntax unified

    .syntax unified
    LDR x0, [x0,4]
    

    更多详情请访问:Is the hash required for immediate values in ARM assembly?

    【讨论】:

      猜你喜欢
      • 2016-10-16
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      相关资源
      最近更新 更多