私は Bochs で BrokenThorn OSDev チュートリアルに従っていますが、うまくいきました (vga-info の取得、MemoryDump は私がリアル モードで作成し、320*200*256 のグラフィックスもありました)。しかし、Demo4 (0x100000 (1Mb) にロードされたカーネル) でプロテクト モード (PM) に入った後、ハイ メモリ (0xD0000000 など) に書き込めないことに気付きました。ブートローダのメッセージは MemDump で出力され、7c00 にいくつかの 0x66 も書き込みました。0x100000 のカーネルのコードも正しくダンプされました。
これは、0xD0000000 から 0x66 を書き込むコードです (Intel 構文、Nasm):
mov edi, 0xD0000000
mov BYTE [edi], 0x66 (.Next; this is at the beginning of the line)
inc edi
cmp edi, 0xD0000010
jnz .Next
ClrScr32 と MemDump が 0xB8000 から印刷された直後に Stage3.asm に追加しました。
そして MemDump:
mov esi, 0xD0000000
mov ecx, 24 ; prints 24 lines (16 bytes per line)
call MemDump
常に 0xD0000000 から FF が表示されるため、上位メモリにデータを書き込むことができません。GDT は正しく設定されています (BrokenThorn で指定されたものは変更していません)。r/w ビットは 1 で、セグメント制限は粒度ビットが設定された最大値です。
この問題に遭遇した場合、および/または解決策がある場合は、遠慮なく私と共有してください。
よろしく、ロブ
(Demo4 は次の場所にあります: チュートリアル 11、カーネルの準備、パート 2) http://www.brokenthorn.com/Resources/OSDevIndex.html