1

私は 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

4

0 に答える 0