从上表可见
![](/icons/79714dou.gif)
80386有 4个32位
![](/icons/79714de.gif)
控制寄存器
![](/icons/79714dou.gif)
分别命名位CR0、CR1、CR2和CR3
![](/icons/79714dou2.gif)
但CR1被保留
![](/icons/79714dou.gif)
供今后开发
![](/icons/79714de.gif)
处理器使用
![](/icons/79714dou.gif)
在80386中不能使用CR1
![](/icons/79714dou.gif)
否则会引起无效指令操作异常
![](/icons/79714dou2.gif)
CR0包括指示处理器工作方式
![](/icons/79714de.gif)
控制位
![](/icons/79714dou.gif)
包含启用和禁止分页管理机制
![](/icons/79714de.gif)
控制位
![](/icons/79714dou.gif)
包含控制浮点协处理器操作
![](/icons/79714de.gif)
控制位
![](/icons/79714dou2.gif)
CR2及CR3由分页管理机制使用
![](/icons/79714dou2.gif)
CR0中
![](/icons/79714de.gif)
位5—位30及CR3中
![](/icons/79714de.gif)
位0至位11是保留位
![](/icons/79714dou.gif)
这些位不能是随意值
![](/icons/79714dou.gif)
必须为0
控制寄存器CR0
![](/icons/79714de.gif)
低16位等同于80286
![](/icons/79714de.gif)
机器状态字MSW
1.保护控制位
控制寄存器CR0中
![](/icons/79714de.gif)
位0用PE标记
![](/icons/79714dou.gif)
位31用PG标记
![](/icons/79714dou.gif)
这两个位控制分段和分页管理机制
![](/icons/79714de.gif)
操作
![](/icons/79714dou.gif)
所以把它们称为保护控制位
![](/icons/79714dou2.gif)
PE控制分段管理机制
![](/icons/79714dou2.gif)
PE=0
![](/icons/79714dou.gif)
处理器运行于实模式;PE=1
![](/icons/79714dou.gif)
处理器运行于保护方式
![](/icons/79714dou2.gif)
PG控制分页管理机制
![](/icons/79714dou2.gif)
PG=0
![](/icons/79714dou.gif)
禁用分页管理机制
![](/icons/79714dou.gif)
此时分段管理机制产生
![](/icons/79714de.gif)
线性地址直接作为物理地址使用;PG=1
![](/icons/79714dou.gif)
启用分页管理机制
![](/icons/79714dou.gif)
此时线性地址经分页管理机制转换位物理地址
![](/icons/79714dou2.gif)
有关分页管理机制
![](/icons/79714de.gif)
具体介绍在后面
![](/icons/79714de.gif)
文章中进行
下表列出了通过使用PE和PG位选择
![](/icons/79714de.gif)
处理器工作方式
![](/icons/79714dou2.gif)
由于只有在保护方式下才可启用分页机制
![](/icons/79714dou.gif)
所以尽管两个位分别为0和1共可以有 4种组合
![](/icons/79714dou.gif)
但只有 3种组合方式有效
![](/icons/79714dou2.gif)
PE=0且PG=1是无效组合
![](/icons/79714dou.gif)
因此
![](/icons/79714dou.gif)
用PG为1且PE为0
![](/icons/79714de.gif)
值装入CR0寄存器将引起通用保护异常
需要注意
![](/icons/79714de.gif)
是
![](/icons/79714dou.gif)
PG位
![](/icons/79714de.gif)
改变将使系统启用或禁用分页机制
![](/icons/79714dou.gif)
因而只有当所执行
![](/icons/79714de.gif)
![](/icons/79714chengxu.gif)
![](/icons/79714de.gif)
代码和至少有
![](/icons/79714yi.gif)
部分数据在线性地址空间和物理地址空间具有相同
![](/icons/79714de.gif)
地址
![](/icons/79714de.gif)
情况下
![](/icons/79714dou.gif)
才能改变PG位
2.协处理器控制位
控制寄存器CR0中
![](/icons/79714de.gif)
位1—位4分别标记为MP(算术存在位)、EM(模拟位)、TS(任务切换位) 和ET(扩展类型位)
![](/icons/79714dou.gif)
它们控制浮点协处理器
![](/icons/79714de.gif)
操作
当处理器复位时
![](/icons/79714dou.gif)
ET位被
![](/icons/79714chushi.gif)
化
![](/icons/79714dou.gif)
以指示系统中数字协处理器
![](/icons/79714de.gif)
类型
![](/icons/79714dou2.gif)
如果系统中存在 80387协处理器
![](/icons/79714dou.gif)
那么ET位置1;如果系统中存在80287协处理器或者不存在协处理器
![](/icons/79714dou.gif)
那么ET位清0
EM位控制浮点指令
![](/icons/79714de.gif)
执行是用软件Software模拟
![](/icons/79714dou.gif)
还是由硬件执行
![](/icons/79714dou2.gif)
EM=0时
![](/icons/79714dou.gif)
硬件控制浮点指令传送到协处理器;EM=1时
![](/icons/79714dou.gif)
浮点指令由软件Software模拟
TS位用于加快任务
![](/icons/79714de.gif)
切换
![](/icons/79714dou.gif)
通过在必要时才进行协处理器切换
![](/icons/79714de.gif)
思路方法实现这
![](/icons/79714yi.gif)
目
![](/icons/79714de.gif)
![](/icons/79714dou2.gif)
每当进行任务切换时
![](/icons/79714dou.gif)
处理器把TS置1
![](/icons/79714dou2.gif)
TS=1时
![](/icons/79714dou.gif)
浮点指令将产生设备不可用(DNA)异常
![](/icons/79714dou2.gif)
MP位控制WAIT指令在TS=1时
![](/icons/79714dou.gif)
是否产生DNA异常
![](/icons/79714dou2.gif)
MP=1和TS=1时
![](/icons/79714dou.gif)
WAIT产生异常;MP=0时
![](/icons/79714dou.gif)
WAIT指令忽略TS条件
![](/icons/79714dou.gif)
不产生异常
3.CR2和CR3
控制寄存器CR2和CR3由分页管理机制使用
CR2用于发生页异常时报告出错信息
![](/icons/79714dou2.gif)
当发生页异常时
![](/icons/79714dou.gif)
处理器把引起页异常
![](/icons/79714de.gif)
线性地址保存在CR2中
![](/icons/79714dou2.gif)
操作系统中
![](/icons/79714de.gif)
页异常处理
![](/icons/79714chengxu.gif)
可以检查CR2
![](/icons/79714de.gif)
内容
![](/icons/79714dou.gif)
从而查出线性地址空间中
![](/icons/79714de.gif)
哪
![](/icons/79714yi.gif)
页引起本次异常
CR3用于保存页目录表
![](/icons/79714de.gif)
其始物理地址
![](/icons/79714dou2.gif)
由于目录是页对齐
![](/icons/79714de.gif)
![](/icons/79714dou.gif)
所以仅高20位有效
![](/icons/79714dou.gif)
低12 位保留未用
![](/icons/79714dou2.gif)
向CR3中装入
![](/icons/79714yi.gif)
个新值时
![](/icons/79714dou.gif)
低12位必须为0;但从CR3中取值时
![](/icons/79714dou.gif)
低12位被忽略
![](/icons/79714dou2.gif)
每当用MOV指令重置CR3
![](/icons/79714de.gif)
值时
![](/icons/79714dou.gif)
会导致分页机制高速缓冲区
![](/icons/79714de.gif)
内容无效
![](/icons/79714dou.gif)
用此思路方法
![](/icons/79714dou.gif)
可以在启用分页机制的前
![](/icons/79714dou.gif)
即把PG位置1的前
![](/icons/79714dou.gif)
预先刷新分页机制
![](/icons/79714de.gif)
高速缓存Cache
![](/icons/79714dou2.gif)
CR3寄存器即使在CR0寄存器
![](/icons/79714de.gif)
PG位或PE位为0时也可装入
![](/icons/79714dou.gif)
如在实模式下也可设置CR3
![](/icons/79714dou.gif)
以便进行分页机制
![](/icons/79714de.gif)
![](/icons/79714chushi.gif)
化
![](/icons/79714dou2.gif)
在任务切换时
![](/icons/79714dou.gif)
CR3要被改变
![](/icons/79714dou.gif)
但是如果新任务中CR3
![](/icons/79714de.gif)
值和原任务中CR3
![](/icons/79714de.gif)
值相同
![](/icons/79714dou.gif)
那么处理器不刷新分页高速缓存Cache
![](/icons/79714dou.gif)
以便当任务共享也表时有较快
![](/icons/79714de.gif)
执行速度
延伸阅读
最新评论