在MIPS中调用子例程时,由于被称为保存寄存器($s0-$s7)在函数/子程序调用期间需要保留,如果它们将要被修改,则会保存在子例程的堆栈帧中。谁负责保存它们?是我作为汇编程序员负责通过编写指令将这些被保存的寄存器存储到堆栈中来保存这些被称为保存的寄存器吗?还是汇编器在调用子例程时会自动管理保存被称为保存的寄存器,以便它们跨调用被保留?我刚开始学习MIPS调用约定,所以这完全是新的对我来说。
jal
之后的寄存器中的值,请让寄存器被破坏。$t0..$t9
这样的 call-clobbered 寄存器做任何您想做的事情,并且可以返回它们持有的任何垃圾。$s0..$s7
)并将其中一个用作循环计数器。然后在函数的末尾恢复它。您不希望在循环内部自己存储/重载它;如果您调用的函数不接触该寄存器,那么这将是一种巨大的浪费。
$s0
和$t0
都是通用寄存器,没有任何额外的特性(不像$0
和$sp
在某些特殊情况下在硬件内部会有所不同),但大多数 32 个 MIPS 寄存器都是“相等”的)。 - Ped7g$s0-$s7
寄存器?这样做是因为它更优化吗? - Nishant