高内存无法以保护模式写入

时间:2013-06-07 18:08:12

标签: operating-system kernel

我一直在跟踪Bochs的BrokenThorn OSDev教程并且运行良好(vga-info采集,MemoryDump由我在实模式下编写,并且还有一些320 * 200 * 256的图形)。 但是在Demo4中进入保护模式(PM)后(内核加载到0x100000(1Mb))我注意到我无法写入高内存(例如0xD0000000) 我的MemDump工作正常,因为我用0x7c00测试了它,我的bootloader被加载了,bootloader的消息用MemDump打印,我还写了几个0x66到7c00。 <0x1000的内核代码也被正确转储。

这是从0xD0000000(Intel-syntax,Nasm)写入0x66的代码:

     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

始终FF从0xD0000000显示,因此我无法将数据写入高内存。 GDT设置正确(我没有改变BrokenThorn给出的值),r / w位为1,段限制是粒度位设置的最大值。

如果您有任何人遇到此问题和/或有解决方案,请不要犹豫与我分享。

祝你好运, 抢劫

(Demo4可以在:教程11,准备内核,第2部分) http://www.brokenthorn.com/Resources/OSDevIndex.html

0 个答案:

没有答案