前言
之前我们一直没有介绍与内存相关的寄存器以及页项中的各个属性位及其影响,现在我们写这篇文章来分析一下有关机制。
CR0.PG
Paging (bit 31 of CR0) — Enables paging when set; disables paging when clear. When paging is disabled, all linear addresses are treated as physical addresses. The PG flag has no effect if the PE flag (bit 0 of register CR0) is not also set; setting the PG flag when the PE flag is clear causes a general-protection exception (#GP). See also: Chapter 4, “Paging.”
这个PG代表paing,当该位置为1时表示开启分页模式,开启该模式,你访问的地址为线性地址而不是物理地址,要通过页表来进行转换。要注意,在打开该模式前,其首先开始保护模式,即PE位必须置为1,否则无效。
在代码中构建好页表之后,直接将这个位置为1即表示打开分页模式。
; 打开 paging
mov eax, cr0
bts eax, 31
mov cr0, eax