Photoshop教程 数据结构 五笔输入法专题 QQ病毒专题 共享上网专题 Google工具和服务专题
2.关于实例十的说明
上述演示程序的许多内容与其它实例相同,下面仅就演示分页管理机制方面的内容作些说明:
(1)部分演示代码的移动
为了充分说明分页机制所实现的线性地址到物理地址的转换,在初始化时把部分演示代码移动到预定的内存区域。预定的内存区域从00303000H开始,即页码为00303H的物理页。该部分演示代码的功能是显示指定的字符串。在进入保护模式后做此初始化工作的原因是预定的内存区域在扩展内存中,注意初始化时还没有启用分页机制。
(2)页映射表的初始化
页目录表安排在页码为00200H的物理页中,页表0安排在页码为00202H的物理页中,页表1安排在页码为00201H的物理页中。演示程序涉及的线性地址空间不超过007FFFFFH,所以只使用两张页表,为此页目录表中的其它项被置为无效(P=0)。
页表0把线性地址空间中的00000000H—003FFFFFH映射到物理地址空间中。实例在初始化页表0时,使该线性地址空间直接映射到相同地址的物理地址空间,除线性地址空间中页码为000B8H和000F0H这两页以外。000B8H页被映射到页码为00301H的物理页,而000F0H页被映射到页码为000B8H的物理页。
页表1把线性地址空间中的00400000H—007FFFFFH映射到物理地址空间中。实例在初始化页表1时,似乎使该线性地址空间直接映射到相同地址的物理地址空间,但是处理对应线性地址空间中00402H的表项被另外设置外,其它表项中的P位为0,也即表示对应物理页不存在。初始化后,页表1的第2项把线性地址空间中的00402H页映射到页码为00303H的物理页,也就是存放部分演示代码的指定内存区域。
(3)启动分页管理机制
在建立好页映射表后,启用分页机制所要做的操作是简单的,只要把控制寄存器CR0中的最高位,也就是PG位置1。具体指令如下: mov eax,cr0
or eax,80000000h
mov cr0,eax
jmp SHORT PageE
PageE: ...
在启用分页机制前,线性地址就是物理地址;在启用分页机制后,线性地址要通过分页机制的转换,才成为物理地址。尽管使用一条转移指令,可清除预取队列,但随后在取指令时使用的线性地址就要经过分页机制转换才成为物理地址。为了顺利过渡,在启用分页机制之后的过渡代码段,仍要维持线性地址等同于物理地址。为了作到这一点,在建立也映射表时,必须使实现过渡的代码所在的线性地址空间页映射到具有相同地址的物理地址空间页。实例中页表0就做到了这一点。
(4)关闭分页管理机制
只要把控制寄存器CR0中的PG位清0,便关闭了分页机制。在这一过渡阶段,也要保持地址转换前后的一致。
(5)地址转换的演示
在启用分页机制之后,就转移到位于线性地址空间中00402000H处开始的代码,该部分代码的功能是显示提示信息"Page is OK!"。实际上这部分代码存放在从物理地址00303000H开始的物理内存区域中,是在初始化时被移到此区域的。
在显示提示信息时,要把显示的ASCII字符和显示属性填到线性地址空间中000F0000H开始的区域中,而不是000B8000H开始的区域。从初始化时建立的映射表可见,线性地址空间中的000F0H页,被映射到物理地址空间中的000B8H页。所以,向线性地址空间中的000F0H页写,实际上是向物理地址空间中的000B8H页写,也就是真正显示。
(6)页级保护的说明
在进入保护模式之后,特权级一直是0,所以,无论系统级和用户级页,无论只能读/执行,还是读/执行/写,总是可进行各种形式的访问。
(出处:清风网络学院)
上一篇:只能在保护模式下执行的指令
下一篇:Casl汇编语言辅导(1)
|