【发布时间】:2011-05-23 13:33:45
【问题描述】:
我正在尝试调试我在应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的 LDR 指令(感谢反汇编程序):
LDR R3, [R0,#4]
我的问题是关于源组件。第二个参数中的#4 是什么意思?我假设它是某种偏移量,但我还没有找到支持 LDR 指令的文档。
【问题讨论】:
-
一般在 arm 汇编器中 # 用于表示立即数。
我正在尝试调试我在应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的 LDR 指令(感谢反汇编程序):
LDR R3, [R0,#4]
我的问题是关于源组件。第二个参数中的#4 是什么意思?我假设它是某种偏移量,但我还没有找到支持 LDR 指令的文档。
【问题讨论】:
它从 R0 + 4 字节的地址加载 R3。所以,是的,它是一个字节偏移量。 See this explanation of the addressing modes.
【讨论】:
它将 R0 中的值加 4 并将其用作地址以将 32 位值加载到寄存器 R3 中
【讨论】:
在 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?
【讨论】: