http://blog.sina.com.cn/s/blog_4017fe890100gg51.html
http://blog.sina.com.cn/s/blog_85998e38010122wq.html
http://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter2/2-5-2.html

控制寄存器
(控制寄存器(CR0,CR1,CR2,CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。)
    从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在 80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协 处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。  
控制寄存器CR0的低16位等同于80286的机器状态字MSW。  
    1.CR0中的保护控制位
    控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。 PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。由此可知,如果要启用分页机制,那么PE和PG标志都要置位。
    下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种 组合方式有效。PE=0且PG=1是无效组合,因此,用PG为1且PE为0的值装入CR0寄存器将引起通用保护异常。需要注意的是,PG位的改变将使系统 启用或禁用分页机制,因而只有当所执行的程序的代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下,才能改变PG位。
   
    2.协处理器控制位
    控制寄存器CR0中的位1—位4分别标记为MP(算术存在位)、EM(模拟位,用于选择与协处理器进行通信所使用的协议,即指明系统中是用的是80386还是80286协处理器)、TS(任务切换位) 和ET(扩展类型位),它们控制浮点协处理器的操作。当处理器复位时,ET位被初始化,以指示系统中数字协处理器的类型。如果系统中存在80387协处理器,那么ET位置1;如果系统中存在80287协处理器或者不存在协处理器,那么ET位清0。EM位控制浮点指令的执行是用软件模拟,还是由硬件执行。EM=0时,硬件控制浮点指令传送到协处理器;EM=1时,浮点指令由软件模拟。TS 位用于加快任务的切换,通过在必要时才进行协处理器切换的方法实现这一目的。每当进行任务切换时,处理器把TS置1。TS=1时,浮点指令将产生设备不可用(DNA)异常。 MP位控制WAIT指令在TS=1时,是否产生DNA异常。MP=1和TS=1时,WAIT产生异常;MP=0时,WAIT指令忽略 TS条件,不产生异常。  
    在系统刚上电时,处理器被复位成pe=0,pg=0(即实模式状态),以允许引导代码在启用分段和分页机制之前能够初始化这些寄存器和数据结构。对于这类寄存器的使用是在实模式下方可使用。
    3.CR2和CR3
    控制寄存器CR2和CR3由分页管理机制使用。  
    CR2用于发生页异常时报告出错信息。当发生页异常时,处理器把引起页异常的线性地址保存在CR2中。操作系统中的页异常处理程序可以检查CR2的内容,从而查出线性地址空间中的哪一页引起本次异常。

CR3 用于保存页目录表页面的物理地址,因此被称为PDBR。由于目录是页对齐的,所以仅高20位有效,低12 位保留供更加高级的处理器使用。向CR3中装入一个新值时,低12位必须为0;但从 CR3中取值时,低12位被忽略。每当用MOV指令重置CR3的值时,会导致分页机制高速缓冲区的内容无效,用此方法,可以在启用分页机制之前,即把PG 位置1之前,预先刷新分页机制的高速缓存。CR3寄存器即使在CR0寄存器的PG位或PE位为0时也可装入,如在实模式下也可设置CR3,以便进行分页机 制的初始化。在任务切换时,CR3要被改变,但是如果新任务中CR3的值与原任务中CR3的值相同,那么处理器不刷新分页高速缓存,以便当任务共享页表时 有较快的执行速度。
    不使用PAE技术,有两层页表。最高层为页目录有1024项,占用4KB。page_directory_table base address为物理地址,指向4KB对齐的页目录地址。
    使用PAE技术,三层页表寻址。最高层为页目录指针,4项,占用32B空间。所以page_directory_table base address为27位,指向32B对齐的页目录指针表。

80386 CPU开始具有CR0 ~CR3 4个控制器,到Pentium又增加了1个控制寄存器CR4。CR4是Pentium微处理器在80486微处理器基础上新增加的控制寄存器,包括七个控制位,格式如图:
    VME(virtual 8086 mode extension):虚拟8086模式扩展位。VME=1,允许虚拟8086扩展,即允许8086模式和虚拟8086中断。VME=0,禁止虚拟8086模式扩展。
    PVI(protected mode virtual interrupts):保护模式虚拟中断位。PVI=1,允许保护模式虚拟中断。PVI=0,禁止保护模式虚拟中断。PVI(protected mode virtual interrupts):保护模式虚拟中断位。PVI=1,允许保护模式虚拟中断。PVI=0,禁止保护模式虚拟中断。
  TSD(time stamp disable):禁止RDTSC指令位。TSD=0,则允许RDTSC(读时间标志计算器)指令在任何特权级上执行。TSD=1,仅允许RDTSC指令在0级特权级上执行,否则将发生一般保护模式异常。
  DE(debugging extensions):调试扩展位。DE=1,允许输入/输出断点。DE=0,不支持输入/输出断点。
  PSE(page size extensions):允许页容量大小扩展位。PSE=1,允许每页容量为4MB。PSE=0,只允许每页容量为4KB。
  PAE(physical address extension):允许物理地址扩展位。PAE=1,允许采用32位以上的物理地址(包括32位和64位地址)。PAE=0,只允许采用32位物理地址。
  MCE(machine check exception):允许机器检查异常位。MCE=1,允许机器检查异常。MCE=0,不允许机器检查异常。

控制寄存器(CR0,CR1,CR2,CR3)和CR4相关推荐

  1. 控制寄存器(CR0,CR1,CR2,CR3)

    控制寄存器 (控制寄存器(CR0,CR1,CR2,CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性.)     从上表可见,80386有四个32位的控制寄存器,分别命名位CR0.CR1.C ...

  2. 控制寄存器(CR0,CR1,CR2,CR3,CR4)

    CR0 是系统内的控制寄存器之一.控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性.      0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1 ...

  3. x86的控制寄存器CR0,CR1,CR2,CR3

    状态和控制寄存器组除了EFLAGS.EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3. 这几个寄存器中保存全局性和任务无关的机器状态. CR0中包含了6个预定义标志,0位是保 ...

  4. Control Registers(CR0, CR1, CR2, CR3, and CR4)

    摘自<Intel® 64 and IA-32 Architectures Software Developer's Manual Combined Volumes1, 2A, 2B, 2C, 2 ...

  5. x64 各个cr控制寄存器 含义/用途 (cr0 cr1 cr2 cr3 cr4 cr8)

    Cr0:当前处理器运行标志 Cr1:保留不使用 Cr2:发生页面错误时的地址(不一定按页对齐) Cr3:页目录表基址,表示当前执行进程 Cr4:处理器扩展功能标志位 Cr8:当前Irql权限等级 各个 ...

  6. 内存寻址(一)硬件寻址的基本原理:硬件中的分段和分页机制,控制寄存器CR0与CR3

    https://www.baidu.com/s?word=CSDN&tn=91185032_hao_pg 摘要:本文讲述8086怎样进行芯片级别的内存寻址,Linux又是如何在这些硬件的基础上 ...

  7. x86 cr0 cr1 cr3

    状态和控制寄存器组除了EFLAGS.EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3. 这几个寄存器中保存全局性和任务无关的机器状态. CR0中包含了6个预定义标志,0位是保 ...

  8. x86 - CPU架构/寄存器详解 (三) 保护模式

    系列文章 x86 - CPU架构/寄存器详解 (一)x86.8086.i386.IA-32 是什么? x86 - CPU架构/寄存器详解 (二) 实模式(8086模式) x86 - CPU架构/寄存器 ...

  9. 搬砖:C/C++ and Buffer Overflow Topics

    C/C++ and Buffer Overflow Topics 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处.作者信息和本声明.否则将追究法律责任.http://blog.csdn. ...

  10. 学习操作系统:进入保护模式,理解GDT(1):TEXT

    直接上代码,以及追加了自己对GDT的理解,为了理解GDT,翻遍了各种文章,但没有代码的支撑,凭空的理解很浪费时间. 下面的代码,稍微简化了原先的代码(于老师的代码^^).把pm.asm需要的代码从pm ...

最新文章

  1. linux ip -o,linux IP 命令使用举例
  2. luogu P1199 【三国游戏】
  3. Eclipse配置Android开发环境
  4. fgetcsv php,PHP - fgetcsv - 分隔符被忽略?
  5. 1092 最好吃的月饼 (20分)
  6. Qt5.9配置安卓开发环境
  7. msm8937 bootloader流程分析
  8. SSM项目实战之一:项目创建
  9. 有没有和作业帮一样的计算机,学霸君、学习宝和作业帮哪个好【对比】
  10. dataframe按照拼音排序
  11. 字节跳动2020春招笔试 - 研发岗位(Java、C++、大数据)
  12. xp升级win7_微软正式停止支持Win7,部分用户拒绝升级系统,原因令人信服
  13. 怎么用python电商文本挖掘?(5)
  14. 13个非常有用的Python代码片段
  15. vue3+ts+vant移动端H5项目搭建
  16. 2022年最新的Gmail用户统计数据
  17. 21-7-09 主要元素
  18. 尤雨溪:Vue3.0 官宣彻底抛弃 IE 浏览器
  19. seata: endpoint format should like ip:port
  20. TensorFlow学习笔记--Deep Dream模型

热门文章

  1. 人工神经网络的算法原理,人工智能神经网络算法
  2. vrep与vs2015联合仿真(C/C++)
  3. 相邻素数的差最大是多少c语言,怎么证明?相邻两个素数之差的最大值
  4. html限制视频上传大小,视频格式大小要求
  5. 查看kms服务器信息,查看kms服务器地址
  6. ios定位权限plist_[译] iOS 请求定位权限
  7. [facebook-wda]iOS App元素定位
  8. 清理c盘、c盘哪些文件可以删、图形显示文件大小软件
  9. 《未来世界的幸存者》读书摘录及笔记
  10. GBASE 8s DB-Access入门