是否有切换到保护模式的简单代码?(对于 NASM)是的 - 我尝试使用 Google 解决它。不过,我不明白如何......以及如何加载位于 VBR 后面的内核(在这种模式下)?(在大小为 512 字节的第一个 512 字节之后)谢谢!
问问题
941 次
2 回答
0
我已经很久没有这样做了,但如果我没记错的话,在你可以从实模式切换到保护模式之前,你必须重置 8259 控制器(图片),但那又是在 i386 芯片上,所以这可能不再需要。
然后使用 CR0 切换到保护模式。
mov eax, cr0
inc eax ; PE bit must be set
mov cr0, eax ; store the new value in CR0
jmp dword pSelector ; switch to selector
显然,在您可以切换到保护模式之前,您必须设置 IDT、GDT 和 e 特别注意有一个双重故障处理程序(不要问)。如果您使用的是 GAS,那么您必须将其转换为以下内容:
mov %cr0, %eax
inc %eax
mov %eax, %cr0
jmp pSelector
关于 i386 编程有几本不错的书,相信 AMD 手册会告诉你如何从 Real 模式切换到 Protected 模式 :)
于 2013-11-01T21:56:03.737 回答
0
在保护模式下,您无权访问 BIOS 来为您做这些事情。您需要编写驱动程序,以便引导加载程序加载您的内核并启动它。相对较小的内核(小于~640kb)的另一种方法是,当您仍处于实模式时,使用 BIOS 加载它,一旦处于保护模式,将其从低内存移开并启动它。
于 2013-11-01T09:31:22.093 回答