Kernel 切换到保护模式

Kernel 切换到保护模式,kernel,x86-64,nasm,protected-mode,Kernel,X86 64,Nasm,Protected Mode,是否有切换到保护模式的简单代码?(对于NASM)是的-我试着用谷歌解决它。不过,我还是不明白。。。以及如何加载位于VBR后面的内核(在此模式下)?(在大小为512字节的第一个512字节之后)谢谢 在受保护模式下,您没有访问BIOS的权限来为您执行操作。您需要编写驱动程序,以便引导加载程序加载并启动内核。对于相对较小的内核(小于~640kb)的另一种方法是,当您仍处于实模式时,使用BIOS加载它,一旦处于保护模式,将其从内存不足的位置移开并启动它。我已经很久没有这样做了,但如果我没记错的话,在从实

是否有切换到保护模式的简单代码?(对于NASM)是的-我试着用谷歌解决它。不过,我还是不明白。。。以及如何加载位于VBR后面的内核(在此模式下)?(在大小为512字节的第一个512字节之后)谢谢

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

我已经很久没有这样做了,但如果我没记错的话,在从实际模式切换到保护模式之前,您必须重置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,尤其要注意双故障处理程序(不要问)。 如果你使用的是天然气,那么你必须将其转化为如下内容:

mov %cr0, %eax
inc %eax
mov %eax, %cr0
jmp pSelector

有几本关于i386编程的好书,我相信AMD手册会告诉您如何从Real模式切换到Protected模式:)

切换代码相当痛苦,但并非不可能。在此基础上编写完整的操作系统,这样你就可以做一些绝对的基础工作,比如显示文本、接受用户输入、打开文件等等,这会让你倒退几年。毫无疑问,它已经完成了。你可以使用VX86或任何它的名字。我不记得了。无论如何,你可以作弊,因为它会将你的任务切换到实模式,你可以调用常规的bios函数。实际的方法是在保护模式下重写那些int 10、int 13等等。基本上,你必须自己做进进出出的工作。这不是小事。