与ARM LDR指令关联的哈希#值是什么意思?

问题描述

| 我正在尝试调试应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的LDR指令(感谢反汇编程序):
LDR R3,[R0,#4]
我的问题是关于源组件。第二个参数中的#4是什么意思?我假设这是某种偏移,但是我还没有找到支持LDR指令的文档。     

解决方法

它从R0 + 4字节的地址加载R3。因此,是的,它是一个字节偏移量。请参阅此寻址模式的说明。     ,它在R0中的值上加上4,并将其用作将32位值加载到寄存器R3中的地址     ,在GNU gas中,仅当不使用
.syntax unified
时,ARMv7才需要哈希
#
例如,对于ARMv8
aarch64-linux-gnu-as
,您可以在不ѭ1的情况下编写它:
LDR x0,[x0,4]
或者如果在
arm-linux-gnueabihf-as
中使用
.syntax unified
.syntax unified
LDR x0,4]
有关更多详细信息,请参见:ARM汇编中的立即数是否需要散列?