我一直在跟踪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