1

我对 MMIX 的中断有一些疑问。特殊寄存器 rK 的定义是“中断屏蔽寄存器”。但它似乎以不同的方式对待不同的事件。

  • 对于 I/O 位(我们称之为 ** 位:这是正常情况。当外部中断到来时,如果 rK 的 ** 位为 0,则 rQ 的 ** 位将保持 '1' 直到 rK 的 ** 位设置为 1 , 陷阱就会发生。

  • 对于S-bit(程序):根据源码mmix-pipe,即使rK的S-bit为0,也会发生安全异常。rK 的 S 位将从 0 变为 1。因此,在正地址中,rK 的 S 位应该为 1,而在负地址中,rK 的 S 位没有任何作用。只有 rQ 的 S-bit 用于告诉系统“存在安全问题”,rK 的 S-bit 似乎没有用。

  • 对于 P 位(程序):令人遗憾的是“指令来自特权(负)虚拟地址”。在 mmix-doc.pdf 中。但是如果 PC 处于负地址,rQ 的 P 位不会总是设置为 1。(mmix-pipe 也不会设置 rQ 的 P 位)。
    我可以证明:如果在 "resume" insn 之前执行的所有指令都将 rQ 的 P-bit 设置为 1,那么 resume 也会将 rQ 的 P-bit 设置为 1。结果,在 resume 之后,'user' insn 将始终触发 TRAP。那是不可能的。因此,当 P-exception 被禁止时,rQ 的 P-bit 不会设置为 1。
    因此 rK 的 P-bit 不仅用作掩码,还用作“绕过异常检查的选项”。


这里有一些问题。

  • 为什么不将所有 rK 的位作为中断的掩码?有什么理由让 S/P 位如此奇怪吗?

  • 如果 rK 的对应位为 0,其他 rQ 的程序位 (rwxnkb) 是否设置为 1?

  • 与 Neg-address 一样,不会发生跳闸,DVWIOUZX 位在它刚刚发生后是否保持 1?

4

0 回答 0