ARM LDR指令相关的哈希(#)值是什么意思?

13

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

LDR R3, [R0,#4]

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


2
通常在ARM汇编中,#符号用于表示立即值。 - old_timer
3个回答

12

3
为了获得全面的覆盖,阅读Pete Cockerell所写的《ARM汇编语言》可能是明智的选择。这本书很不错,虽然有些老旧,但仍然可能是最好的ARM学习辅助资料。你可以通过以下链接阅读该书:ARM Assembly Language by Pete Cockerell (PDF) - Orbling

2
在GNU gas中,仅在不使用 .syntax unified 时,ARMv7才需要哈希符号#
例如,对于ARMv8 aarch64-linux-gnu-as,您可以在不使用#的情况下编写它:
LDR x0, [x0,4]

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

.syntax unified
LDR x0, [x0,4]

更多细节请参考:ARM汇编中立即数是否需要使用#号?


2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接