为什么我们将值从 s 寄存器存储到堆栈而不是移动到函数中的新寄存器?

Why do we store values from s registers to stack rather than moving to a new register in functions?

我了解到,按照惯例,在函数中使用 's' 寄存器时,它们不应被修改,并且应存储在堆栈中。 只是将 s 寄存器的值移动到临时寄存器并使用它和 return 它是错误的吗?如果是这样,为什么?

没有错。但是,有一些限制,有时您必须将寄存器的内容存储在内存中。

如果您的函数不调用任何其他函数,那么您可以将 s 寄存器保存在临时寄存器中,前提是您的例程不需要使用这些临时寄存器。如果你需要使用那些临时寄存器,那么你最终将使用内存来备份原始内容。

另一方面,如果您的例程调用另一个例程,则您不能假定临时寄存器将被保留(惯例规定 s 寄存器将被保留)。因此,如果您调用另一个例程,您可能需要在内存中保存 s 个寄存器(例如在堆栈中)。