与ARM LDR指令关联的散列(#)值是什么意思?

时间:2011-05-23 13:33:46

标签: assembly arm

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

LDR R3, [R0,#4]

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

在GNU gas中,仅当不使用#的ARMv7才需要哈希.syntax unified

例如,对于ARMv8 #,您可以不使用aarch64-linux-gnu-as来编写它:

LDR x0, [x0,4]

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

.syntax unified
LDR x0, [x0,4]

更多详细信息,请访问:Is the hash required for immediate values in ARM assembly?