切换到保护模式

时间:2013-11-01 09:27:45

标签: kernel x86-64 nasm protected-mode

是否有简单的代码可以切换到保护模式? (对于NASM)是的 - 我尝试使用Google解决它。不过,我不明白如何...以及如何加载内核(在此模式下),它位于VBR后面? (首先是512字节,大小为512字节)谢谢!

2 个答案:

答案 0 :(得分:0)

在保护模式下,您无权访问BIOS来为您执行操作。您需要编写驱动程序以便引导程序加载内核并启动它。相对较小的内核(小于~640kb)的另一种方法是,当你仍然处于实模式时,用BIOS加载它,一旦处于保护模式,就将它从低内存中移开并启动它。

答案 1 :(得分:0)

我已经做了很长时间但是如果我没记错,在你可以从真实模式切换到保护模式之前你必须重置8259控制器(Pic),但是再次重置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手册会告诉你如何从真实模式切换到保护模式:)