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



我指的是这份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。这是否真的为2个寄存器的复制留出了足够的空间?

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

最新更新