memory - 在 MIPS Assembly 中,为什么保存和恢复程序需要使用的已保存寄存器很重要?

标签 memory assembly mips cpu-registers cpu-architecture

为什么它很重要,因为保存的寄存器中的数据到底会发生什么?它会被删除或被新值覆盖吗?这些新的值(value)观从何而来?如果我有任何不清楚的地方,请在下面评论。

最佳答案

当您从任何汇编语言中调用函数、系统调用、过程或任何其他外部代码时,该函数的函数调用定义将为您定义需要保留的寄存器和可能不保留的寄存器。通常这被记录为平台、库或语言的标准。你很清楚这一点。你的问题是,“为什么?”

当不保证保留寄存器时,这意味着被调用的函数可以以任何方式自由操作和更改这些寄存器。与其说它们被“删除”,不如说它们在函数运行时被更改或覆盖;毕竟,该函数必须使用与您正在使用的相同的寄存器!

另一方面,如果调用需要保留寄存器,那么当调用返回到您的代码时,您可以保证它不会被修改。这可能是因为被调用函数没有使用该寄存器,但也可能是因为它保存在堆栈上(或内存中的某个位置),然后在返回之前恢复。

关于memory - 在 MIPS Assembly 中,为什么保存和恢复程序需要使用的已保存寄存器很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36275318/

相关文章:

c++ - 声明一个带有微小单元的巨大动态数组 [C++]

go - 在mips64le下使用cgo构建静态库

c++ - mips装配中的递归斐波那契函数

memory - 寻址 32 MB 字节可寻址存储器需要多少地址位?

c# - 为防止由于添加事件句柄而导致内存泄漏而采取的预防措施

memory - 在 Fortran 90 中跟踪内存使用情况

assembly - 如何确定英特尔 x86 汇编代码中使用的初始寄存器值?

将c语言转换为IA32汇编语言

assembly - 以 8086 读取文件,直到文件结束

c++ - 如何在 C++ 中实现 AND 和 OR 运算