2014-09-03 37 views
1

我读过的原因是程序可能会使用这些寄存器,我们不想丢失它们保存的值。但是,在这种情况下,我们可以像往常一样在函数调用中将先前的值写入堆栈。那有什么问题?为什么mips中的异常处理程序不能覆盖寄存器?

编辑:注册除$ k0,$ k1当然!

+0

是的,我知道程序不能预测何时会发生异常。但是,为什么无论异常处理程序本身是否将所有寄存器保存在堆栈中并在返回之前将其恢复,而不管主程序实际使用哪个寄存器? – user3740387 2014-09-03 19:45:07

+1

如果堆栈指针移动到新页面上会导致页面错误,会发生什么情况? – markgz 2014-09-03 22:12:44

+0

其实我现在正在参加计算机架构课程,所以我有这个疑问。我们还没有教过页面错误,所以我无法想象由于损坏的堆栈指针引起的情况。 user2684957提供的答案(我相信你甚至在谈论)似乎是合理的。谢谢! – user3740387 2014-09-05 06:10:18

回答

3

可以使用其他寄存器,但必须将其存储在全局存储器中。进入中断处理程序的一个可能的原因可能是由于由损坏的堆栈指针引起的异常。因此,寄存器保存在静态分配的全局内存中。