MMIXの割り込みについていくつか質問があります。特殊レジスタrKの定義は「割り込みマスクレジスタ」です。しかし、異なるイベントを異なる方法で扱うようです。
I/O ビットの場合 (** ビットを呼び出しましょう: これは通常のケースです。外部割り込みが発生した場合、rK の ** ビットが 0 の場合、rK の ** ビットが 1 に設定されるまで、rQ の ** ビットは「1」を保持します。となり、トラップが発生します。
for S-bit (プログラム): のソース コードによると
mmix-pipe
、rK の S-bit が 0 の場合でも、セキュリティ例外が発生します。rK の S ビットは 0 から 1 に変更されます。したがって、正のアドレスでは rK の S ビットは 1 である必要があり、負のアドレスでは rK の S ビットは何の効果もありません。システムに「セキュリティ上の問題があった」ことを伝えるために rQ の S ビットのみが使用されます。rK の S ビットは役に立たないようです。Pビット(プログラム)の場合:「命令が特権(負の)仮想アドレスから来る」のは悲しいことです。mmix-doc.pdf にあります。しかし、PC が負のアドレスにある場合、rQ の P ビットが常に 1 に設定されるとは限りません (mmix-pipe も rQ の P ビットを設定しません)。
私はそれを証明することができます:「再開」insn の前に実行されたすべての命令が rQ の P ビットを 1 に設定する場合、再開は rQ の P ビットも 1 に設定します。 insn は常に TRAP をトリガーします。それは不可能です。そのため、P 例外が禁止されている場合、rQ の P ビットは 1 に設定されません。
したがって、rK の P ビットはマスクとして使用されるだけでなく、「例外チェックをバイパスするオプション」として使用されます。
ここにいくつかの質問があります。
rK のすべてのビットを割り込みのマスクとして作成しないのはなぜですか? S/P ビットをそれほど奇妙にする理由はありますか?
rK の対応するビットが 0 の場合、他の rQ のプログラム ビット (rwxnkb) を 1 に設定しますか?
Neg-address のように、トリップは発生しませんが、DVWIOUZX ビットは発生した直後に 1 を保持しますか?