与 ARM LDR 指令关联的哈希 (#) 值是什么意思?
我正在尝试调试我的应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的 LDR 指令(感谢反汇编程序):
LDR R3, [R0,#4]
我的问题是关于源组件的。第二个参数中的#4是什么意思?我假设它是某种偏移量,但我还没有找到支持 LDR 指令的文档。
I'm trying to debug a crash I am experiencing in my application. The stack trace is pointing to an LDR instruction with the following format (thanks disassembler):
LDR R3, [R0,#4]
My question is in regards to the source component. What does the #4 in the second parameter mean? I'm assuming it is some kind of offset, but I haven't found documentation supporting that for the LDR instruction.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它从 R0 + 4 字节中的地址加载 R3。所以,是的,它是一个字节偏移量。 请参阅寻址模式的说明。
It loads R3 from the address in R0 + 4 bytes. So, yes, it is a byte offset. See this explanation of the addressing modes.
它将 R0 中的值加 4,并将其用作将 32 位值加载到寄存器 R3 中的地址
It adds 4 to the value in R0 and uses that as the address to load a 32 bit value into the register R3
在GNU Gas中,只有ARMv7在不使用
.syntax Unified
时才需要哈希#
例如,您可以不使用
来编写它#
对于 ARMv8aarch64-linux-gnu-as
:或者如果在
arm-linux-gnueabihf-as
中使用.syntax Unified
:更多细节at:立即所需的哈希值ARM 汇编中的值?
In GNU gas, the hash
#
is only required for ARMv7 when not using.syntax unified
For example, you can write it without
#
for ARMv8aarch64-linux-gnu-as
:or if use
.syntax unified
inarm-linux-gnueabihf-as
:More details at: Is the hash required for immediate values in ARM assembly?