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

时间:2016-12-09 22:01:32

标签: assembly mips

这更像是一个概念问题。我对汇编的理解是有限的,仅限于MIPS,如果这不适用于其他汇编架构,请原谅我。

让我们说有人需要存储很多值。我不能想到当某人真正需要那么多寄存器并且无法将它们存储在某个地方的情况时,我们假设它是假设的。

您可以在哪里存储数据?

2 个答案:

答案 0 :(得分:1)

问题是“并且不能将它们存储在某个地方”,我认为这意味着你不能只是将它们溢出到堆栈中,就像编译器通常在寄存器用完时使用局部变量一样。

“聪明”替代方案(您只应在存储在堆栈或其他保留内存位置的特殊情况下使用):

  • 将多个值打包到每个寄存器中。例如如果您知道您的数据适合16位,则可以将4个16位整数打包到64位通用整数寄存器中。您需要一些可以自由操作数据的寄存器(例如,在重新打包之前使用shift和AND指令解压缩然后执行某些操作)。

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

答案 1 :(得分:-1)

使用数组

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

使用堆栈

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