一次保留比汇编中的寄存器更多的值

Keeping more values at once than there are registers in assembly

这更像是一个概念问题。我对汇编的理解是有限的,而且只在 MIPS 方面,所以如果这不适用于其他汇编架构,请原谅。

假设某人需要存储大量值。我想不出有人实际上需要那么多寄存器并且无法将它们存储在某个地方的情况,但让我们假设一个假设。

您可以在哪里存储数据?

使用数组

您可以使用数组。然后你可以从数组中读取。这是一个例子,https://www.tutorialspoint.com/assembly_programming/assembly_arrays.htm

使用堆栈

应该使用堆栈。有一些很棒的东西 here, or here。正如 Cody Gray 在评论中提到的。

问题说 "and can't store them somewhere",我认为这意味着您不能像编译器通常在局部变量 运行 超出寄存器时那样将它们溢出到堆栈。

"Clever" 替代方案(您应该只在存储在堆栈或另一个保留内存位置的特殊情况下使用):

  • 将多个值打包到每个寄存器中。例如如果您知道您的数据适合 16 位,则可以将四个 16 位整数打包到一个 64 位通用整数寄存器中。您需要几个免费的寄存器来操作您的数据(例如,使用 shift 和 AND 指令解包,然后在重新打包之前做一些事情)。

  • 将其放入浮点或向量寄存器。 (如果 FP 硬件没有故障,将非正规化刷新为零,或者以其他方式修改任意位模式,那么只需按原样移动整数数据。实际上不要进行整数->浮点数转换。)