为什么它很重要,因为保存的寄存器中的数据到底会发生什么?它会被删除或被新值覆盖吗?这些新的值(value)观从何而来?如果我有任何不清楚的地方,请在下面评论。
最佳答案
当您从任何汇编语言中调用函数、系统调用、过程或任何其他外部代码时,该函数的函数调用定义将为您定义需要保留的寄存器和可能不保留的寄存器。通常这被记录为平台、库或语言的标准。你很清楚这一点。你的问题是,“为什么?”
当不保证保留寄存器时,这意味着被调用的函数可以以任何方式自由操作和更改这些寄存器。与其说它们被“删除”,不如说它们在函数运行时被更改或覆盖;毕竟,该函数必须使用与您正在使用的相同的寄存器!
另一方面,如果调用需要保留寄存器,那么当调用返回到您的代码时,您可以保证它不会被修改。这可能是因为被调用函数没有使用该寄存器,但也可能是因为它保存在堆栈上(或内存中的某个位置),然后在返回之前恢复。
关于memory - 在 MIPS Assembly 中,为什么保存和恢复程序需要使用的已保存寄存器很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36275318/