5

假设我有 8 个像这样的窗口:http ://www.sics.se/~psm/sparcwin.gif

我在那种情况下是对的,WIM 指向 w7,我在窗口 w0 中。

假设在这个窗口中,我将调用一些接收一个参数的函数。所以我将参数值设置为 %o1(让函数在 %i0 中接收它)。

好的,然后我拨打电话,该函数执行“保存”。该窗口位中的 WIM 为 1,因此触发了 window_overflow。我对此的理解是,处理程序保存在窗口 w7 (%sp) 的堆栈上,寄存器 %i1,..,%i7,%l0,..,%l7, 然后让'返回时'在 window_underflow 中恢复该窗口。

我的问题是......当保存窗口时,w7的原始%i0,......,%i7由于现在丢失是w0中程序调用的函数的参数(因为我设置了%o0,。 . 在 w0 调用之前,然后进行“保存”错误)。所以这个“系统”没有意义,所以我想我错过了一些东西。

另一个类似的问题。假设我在 w0 中的程序没有调用函数,而是使用 %o0,%o1,.. 作为“局部”变量,我会遇到同样的问题,甚至不知道我杀死了 w7 的 %i0,%i1,..。

解答: 我发现无效窗口已经保存在堆栈中,所以当“保存”完成时,window_overflow 处理程序会将 w6 保存在堆栈中(并将 WIM 设置为 w6)。这显然解释了我的问题。我想我在看到这个陷阱的处理程序示例时感到困惑,并且不记得在 V8 中它总是在不检查 WIM 的情况下减少 CWP。

4

0 回答 0