如何将地址从一个寄存器复制到另一个寄存器?

问题描述 投票:0回答:1

我正在使用一种类似手臂的架构,该架构对于学生来说被大大简化了,称为 LEGv8。问题要求“返回寄存器 X7 中的地址”,而该地址当前位于 X0 中。提供的解决方案显示“ADDI X7,X0,#0”。 MOV 是否也可以将地址从一个寄存器复制到另一个寄存器,或者 MOV 是否专门用于数据值以及为什么 ADD 可以工作?另外,LDUR 我只是想了解命名法中的所有微妙之处以及它们之间的联系。另外,当人们说将一个值从一个寄存器存储到另一个寄存器时,他们指的是地址还是?预先感谢!

我错误地尝试使用 LDUR,但我不是在寻找解决方案,因为我已经有了解决方案,我正在寻求更好地理解寄存器和内存的工作原理。

arm
1个回答
0
投票

如果你仔细阅读LEGv8指令集,其实根本不存在

MOV
这样的指令。有
MOVZ
MOVK
,两者都只是将立即数移入寄存器。

MOV
仅作为伪指令列出,即另一条指令的别名(或者在
LDA
的情况下,可能是多个指令)。该卡没有说明它的别名是什么。然而,在真正的 ARMv8 汇编器上,
MOV Xd, Xm
ORR Xd, XZR, Xm
的别名,因此从某种意义上说,这将是“规范”解决方案,因此可能是现实生活中的 ARMv8 CPU 最佳优化的解决方案。您的建议
ADDI Xd, Xm, #0
也可以,但可能不是最佳选择。

希望

ADDI
起作用的原因是显而易见的:向数字添加 0 不会改变它,因此写入
Xd
的结果等于
Xm
中的原始值。与 0 的逻辑“或”也不会更改数字,这就是为什么
ORR
与零寄存器也可以工作。

LDUR
不是您想要的,因为它实际上从数据存储器加载一个值。在您的情况下,您需要的值已经在寄存器中,并且您根本不想访问内存。

说“将一个寄存器中的值存储到另一个寄存器中”是一种草率的措辞,因为在 ARM 架构的上下文中,“存储”一词始终表示存储到内存中,而不是存储到寄存器中。任何说这句话的人可能意味着从一个寄存器移动到另一个寄存器,而不是访问内存。

© www.soinside.com 2019 - 2024. All rights reserved.