在 ARM64 汇编代码中,寄存器 31 XZR 何时与 SP 相对?

In ARM64 assembly code, when is register 31 XZR versus SP?

在ARM64汇编代码中,31号寄存器什么时候表示XZR,什么时候表示SP?

指令将寄存器 31 解释为零寄存器 wzr/xzr 还是堆栈指针 wsp/xsp 取决于指令类型,而不是容易预测。同一个助记符可以引用多个指令,其中一些接受堆栈指针作为操作数,而另一些则不接受。但一般来说,所有与堆栈指针一起使用的指令都具有可以与堆栈指针一起使用的形式。汇编程序会自动为您选择合适的形式。它永远不会默默地将 sp 表示为 xzr,反之亦然。

在ARM参考手册中,XnWn用于指代寄存器,其中寄存器31指的是零寄存器。 Xn|SPWn|WSP 用于引用寄存器,其中寄存器 31 引用堆栈指针。详见§5“A64指令集”介绍