ADD 和 LDUR 可以用来完成同样的事情吗?

Can ADD and LDUR be used to accomplish the same thing?

这两个汇编命令是否导致相同的机器动作?如果不是,有什么区别?

// X6 is the base address of an integer array, X10 is a temporary register
ADD X10, X6, XZR
LDUR X10, [X6, #0]

第一个是加法,X10=X6+0(或者在这种情况下实际上是一个寄存器副本),第二个是从内存加载,使用 X6 作为偏移量为零的指针(所以你的索引 [0]数组值).

在ARM中,算术运算是对通用寄存器中的值进行的(使用相同的寄存器组保存结果),访问内存使用一个(或多个)通用寄存器来保存数据,并且另一个通用寄存器作为指针。

这被称为 load/store 架构。如果您更熟悉不同类型的体系结构,指令集可能会让人感到困惑。