【发布时间】:2020-10-16 15:41:16
【问题描述】:
我是 ARM 汇编的新手。我正在尝试与数字 1200 进行比较并注册 r1。 所以我尝试了:
mov r2, #1210
cmp r2, r1
但它不起作用。我在 Raspberry pi 3 中进行此编程。我试过了:
cmp #1210, r1
但它也不起作用。我该如何解决这个问题?并且,如果 r6 的地址是 0x00010000 并且汇编代码是:
ldr r10, r6, #8
和下面的代码一样吗?如果没有,如何在不使用 r6 的情况下更改代码?谢谢。
ldr r10, #0x00010008
【问题讨论】:
-
您能详细说明“它不起作用”是什么意思吗?不会组装?产生与您预期不同的结果?那是什么不同的结果?
-
我认为使用 mov,数量限制是 255。如果我尝试使用低于 255 的数字,它可以工作,但 1210 不能工作。 (编译错误)有什么方法可以使用1210吗?
-
mov指令的立即数宽度为 8 位 (0-255)。然而,有时还有更多的故事(见stackoverflow.com/questions/2624471/…)。 -
在进行汇编语言编程或至少学习新指令集时,您应该始终将文档放在身边。这不是 mov 指令的合法立即数,因此您必须使用另一条指令或使用某些汇编程序支持的伪指令 ldr r2,=1210。 gnu 汇编器将使用最佳解决方案(如下面的答案中所指出的)。通过使用带有 gnu 汇编器的伪指令(对于任何立即数),您可以获得“最佳”解决方案。但是汇编是基于汇编器的,而不是目标的,因此并非所有工具都如此
-
将立即数加载到寄存器中已在此站点以及其他地方多次询问和回答。以及为什么这不起作用。