256 のエントリを持つ idt テーブルをロードしました。すべて同様のハンドラを指しています。
- 例外 8 および 10 ~ 14 の場合は、例外番号をプッシュします (これらの例外はエラー コードを自動的にプッシュします)。
- その他の場合は、「ダミー」エラー コードと例外番号をプッシュします。
- 次に、共通ハンドラにジャンプします
したがって、共通ハンドラーが入ると、スタックは適切に配置され、例外/割り込み番号、エラー コード (単なるダミーの可能性があります)、eflags、cs、および eip が含まれます。
私の質問は、割り込みハンドラからの復帰に関するものです。以前はiret
スタックから例外番号とエラー コードを取り出してリターンしていましたが、例外番号 8 では機能しません。スタックにエラー コードを残すと、正常に返されます。
質問:
- エラーコードをそこに置く例外のために、エラーコードをスタックに残す必要がありますか?
iret
もしそうなら、エラーコードをポップする必要があるかどうかをどのように判断しますか? - 割り込みを有効にするとすぐに、常に例外 8 (二重障害) が発生しますが、その後はすべて正常に動作します (私は趣味の OS を開発しています)。これは正常な動作ですか、それともどこかにバグがありますか?