Linux kernel x64体系结构上实模式和保护模式的差异
x64体系结构上的实模式和保护模式之间有什么区别?我正在尝试为Linux内核制作一个自定义引导加载程序。如何在程序集中启用受保护模式?请参阅osdev 由BIOS初始化的CPU以实模式启动。启用受保护模式允许使用实模式无法访问的所有4GB内存。但是,它将阻止您使用大多数BIOS中断,因为这些中断在实模式下工作(除非您还编写了V86监视器) 在切换到保护模式之前,您必须禁用中断,可能启用A20行,并使用适合代码、数据和堆栈的段描述符加载全局描述符表 CPU处于实模式还是保护模式由CR0或MSW寄存器的最低位定义 本例将描述符表加载到处理器的GDTR寄存器中,然后设置CR0的最低位:Linux kernel x64体系结构上实模式和保护模式的差异,linux-kernel,boot,bootloader,Linux Kernel,Boot,Bootloader,x64体系结构上的实模式和保护模式之间有什么区别?我正在尝试为Linux内核制作一个自定义引导加载程序。如何在程序集中启用受保护模式?请参阅osdev 由BIOS初始化的CPU以实模式启动。启用受保护模式允许使用实模式无法访问的所有4GB内存。但是,它将阻止您使用大多数BIOS中断,因为这些中断在实模式下工作(除非您还编写了V86监视器) 在切换到保护模式之前,您必须禁用中断,可能启用A20行,并使用适合代码、数据和堆栈的段描述符加载全局描述符表 CPU处于实模式还是保护模式由CR0或MSW寄存
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或汇编语言中的内核代码。阅读;或者。