我目前正在学习ARM汇编语言;为此,我试图将一些x86代码(AT&T Syntax)转换为ARM汇编(Intel Syntax)代码。
从这个文档中,我了解到在x86中,堆结构的第一个块从0x0804c000开始。但是当我尝试在
我假设问题在于ARM只能加载32位指令。
__asm__("movl $0x0804c000, %eax;");
__asm__("mov R0,#0x0804c000");
从这个文档中,我了解到在x86中,堆结构的第一个块从0x0804c000开始。但是当我尝试在
arm
上做同样的事情时,我遇到了以下错误:/tmp/ccfNZp9F.s:174: Error: invalid constant (804c000) after fixup
我假设问题在于ARM只能加载32位指令。
Question 1: Any idea what would be the first chunk in case of ARM processors?
Question 2:
根据我之前提出的问题,我知道内存间接寻址是如何工作的。
下面的代码片段是否执行相同的任务?
movl (%eax), %ebx
LDR R0,[R1]
我正在使用ARMv7处理器 rev 4(v7l)
ldr r0,=0x804c000
。汇编器维护一个文字池并将常量放置在其中。使用PC
相对寻址来加载常量。在汇编器中使用指令.ltorg
来转储池。 - artless noise