我对MMIX的中断有一些疑问。 特殊寄存器rK的定义是“中断屏蔽寄存器”。 但它似乎以不同的方式对待不同的事件。
用于I / O位(让我们调用**位: 这是正常情况。 当外部中断到来时,如果rK的**位为0,则rQ的**位将保持为'1',直到rK的**位设置为1,并且将发生陷阱。
对于S-bit(程序):
加入mmix-pipe
的源代码,即使rK的S位为0,也会发生安全异常。并且rK的S位将从0改为1。
因此,在正地址中,rK的S位应为1,而在负地址中,rK的S位不会产生任何影响。
只有rQ的S位用于告诉系统“存在安全问题”,rK的S位似乎没用。
用于P-bit(程序):
令人遗憾的是“指令来自特权(负面)虚拟地址。”在mmix-doc.pdf中。
但如果PC处于负地址,则rQ的P位不会始终设置为1.(mmix-pipe也不会设置rQ的P位)。
我可以证明一下:
如果在“恢复”insn之前执行的所有指令都将rQ的P位设置为1,则resume也会将rQ的P位设置为1。
因此,在恢复之后,'用户'insn将始终触发TRAP。那是不可能的。
因此,当禁止P异常时,rQ的P位不会设置为1。
所以rK的P-bit不仅用作掩码,它还被用作“绕过异常检查的选项”。
以下是一些问题。
为什么不将所有rK的位都作为中断的掩码?是否有任何理由使S / P位如此奇怪?
如果rK的相应位为0,其他rQ的程序位(rwxnkb)是否设为1?
在Neg-address中,不会发生跳闸,DVWIOUZX位刚刚发生后是否保持1?