次の x86 命令は、トリプル フォールト例外 (CPU リセット) を引き起こしています。理由はありますか?
0042F94B F20F100520E44300 movsd xmm0,qword [dword 0x43e420]
次のコードは、その命令の直前に挿入され、0x43e420 のメモリにアクセスできる (アクセスできる) ことを確認します。
0042F945 8B0520E44300 mov eax,[dword 0x43e420]
X86 は保護モードです。GDT は適切にセットアップされ、セグメント レジスタは 0x8 である cs を除いてすべて 0x10 です。どちらの GDT エントリもフラットで、32 ビット メモリ空間全体を使い果たします。eflags のアライメント チェック (AC) が設定されていません。
0x43e420 のメモリは次のとおりです。
0x43e420: 00 00 00 00 00 00 00 40
その命令が実行されると、Bochs エミュレーターは次のメッセージを出力します。
interrupt(): gate.type(9) != {5,6,7,14,15}
interrupt(): gate descriptor is not valid sys seg (vector=0x0d)
interrupt(): gate descriptor is not valid sys seg (vector=0x08)
これは OS ブート コードの一部です。オペレーティング システムのアプリケーションではありません。