这条 arm64 指令如何在堆栈上为 2 个寄存器值分配足够的 space?

How does this arm64 instruction allocate enough space on the stack for 2 register values?

我指的是这个 ARM64 文档:https://developer.arm.com/documentation/102374/0101/Loads-and-stores---load-pair-and-store-pair

它有这个指令:

STP        X0, X1, [SP, #-16]!

描述为:

Load and store pair instructions are often used for pushing, and popping off the stack.
This first instruction pushes X0 and X1 onto the stack

如果 arm64 中的这些寄存器是 128 位(16 字节),我假设我们总共需要 32 字节来将其中的 2 个存储在堆栈上,但是上面的指令只从堆栈指针中减去 16 字节。

我一定是误解了 SP, #-16。这实际上是否足以 space 复制 2 个寄存器?

通用寄存器是 64 位(不是问题中提到的 128 位),因此在堆栈上分配 16 个字节适合 x0 和 x1 寄存器。