2013-07-03 63 views
1

x64架构上实模式和保护模式之间的区别是什么?我试图为Linux内核制作一个自定义的引导加载程序。如何在程序集中启用保护模式?x64架构上实模式和保护模式的区别

+1

阅读[英特尔®64和IA-32架构软件开发人员手册,卷3:系统编程指南](http://www.intel.com/content/www/us/en/processors/architectures-software-显影剂manuals.html);或[AMD64体系结构程序员手册第2卷:系统编程](http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/)。 –

回答

0

参见osdev real mode,protected mode

由BIOS初始化的CPU以实模式启动。启用保护模式允许使用实模式无法访问的所有4GB内存。但是,它会阻止您使用大部分BIOS中断,因为这些中断在实模式下工作(除非您还编写了V86监视器)。

在切换到保护模式之前,您必须禁用中断,可能启用A20线路,并使用适用于代码,数据和堆栈的段描述符加载全局描述符表。

CPU处于实模式还是保护模式由CR0或MSW寄存器的最低位定义。

这个例子加载一个描述符表到处理器的寄存器GDTR,然后设置CR0的最低位:

cli   ; disable interrupts 
lgdt [gdtr] ; load GDT register with start address of Global Descriptor Table 
mov eax, cr0 
or al, 1  ; set PE (Protection Enable) bit in CR0 (Control Register 0) 
mov cr0, eax 

; Perform far jump to selector 08h (offset into GDT, pointing at a 32bit PM code segment descriptor) 
; to load CS with proper PM32 descriptor) 

JMP 08h:PModeMain 

; [...] 

PModeMain: 
; load DS, ES, FS, GS, SS, ESP. 

这需要你的保护模式。
之后,您可以跳转到C或程序集中的内核代码。