控制寄存器和系统地址寄存器

控制寄存器    crx

cr0   指示cpu工作方式的控制位  包含启用和禁止分页管理机制的控制位  包含控制浮点协处理器操作的控制位   注意必须为0的位
cr2和cr3   分页管理机制使用   
1.保护控制位
cr0中位0  pe表示  为0实模式   为1  保护模式
位31 pg表示 为0 禁用分页      为1启用分页管理机制
注意1.不存在   pe为0  且pg为1的情况   即   实模式下开启分页机制
2.改变pg位     只有当所执行的程序的代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下   才能改变pg位的值
 
2.协处理器控制位  cr0中的位1-位4分别标记mp     em    ts    et   具体略
3.cr2和cr3
控制寄存器由分页管理机制使用
cr2用于发生页异常时报告出错信息   当发生页异常时    cpu把引起异常的线性地址保存到cr2中   
cr3用于保存页目录表的物理地址    目录为页对其齐 所以仅仅高20位是有效的   低12位保留不用  
mov重置cr3的值    会导致分页机制高速缓冲区的内容无效    用此方法  可以在启用分页机制之前   就把pg位置为之前   预先杀心分页机制的告诉缓存
实模式下可以设置cr3   即初始化分页机制    
任务切换  cr3要被改变   如果新任务中cr3的值与原任务中cr3的值相同(两个任务共享页表)  那么cpu不刷新分页高速缓存    以便当任务共享页表时有比较快的执行速度
 
二  系统地址寄存器
GDTR   LDTR    IDTR      TR
 全局描述符表gdt    ldt    和idt  等都是保护方式下非常重要的特殊段  包含有位段机制所用的重要表格    
cpu采用一些特殊的寄存器保存这些段的基地址和界限    称为系统地址寄存器
GDTR    48位长   其中32位为基地址    16位为界限
  由于gdt本身不能由在gdt表中的描述符来描述   所以cpu需要采用GDTR位gdt这一特殊的系统段提供一个伪描述符     

段界限以字节为单位    由于段选择子中只有13位作为索引    每个描述符长度为8个字节    所有用16位的界限够了。
通常对于含有N个描述符的描述符表的段界限设为8*N-1
结构类型定义  伪描述符
  PDESC STRUC
LIMIT DW 0 ;段界限 16位
    BASE  DD 0		;段基地址    GDT表的首地址  32位
PDESC ENDS
2.局部描述符表寄存器LDTR
此寄存器规定当前任务使用的局部描述符表ldt	
a 16位段寄存器和不可见的高速缓冲寄存器组成
b 每个任务的ldt作为系统的一个特殊的段   其描述符位于gdt中
c 初始化和任务切换时  将对应任务的ldt的描述符的选择子装入LDTR中
d 装入ldtr的选择子必须确定一个位于gdt中的类型为LDT的系统段描述符   也即选择子中的TI 位必须是0  而且描述符中的类型字段位LDT
技巧  :空选择子装入LDTR,表示当前任务没有LDT  ,装入到段寄存器的选择子都必须指示GDT中的描述符,也即当前任务涉及的段均有GDT中的描述符来描述。如果再把一个TI位为1的选择子(LDT)装入到段寄存器会引起异常。
3.中断描述符表寄存器IDTR
IDTR指向中断描述符表IDT IDTR长度为48位 其中32位的基地址规定IDT基地址,16位的界限规定IDT的段界限。由于386
仅仅支持256个中断或者异常 所以idt最大长度为2k 以字节为单位的界限为7ffh
4.任务状态段寄存器TR
此寄存器指示描述当前任务的任务状态段的描述符选择子 定义了状态段 同时也有高速缓冲寄存器 为程序员不可见
由硬件完成 选择子不能为空 必须索引位于GDT中的描述符 类型必须为tss

x86保护模式 控制寄存器和系统地址寄存器的更多相关文章

  1. X86控制寄存器和系统地址寄存器

    80386控制寄存器和系统地址寄存器如下表所示.它们用于控制工作方式,控制分段管理机制及分页管理机制的实施. 控制寄存器 CRx BIT31 BIT30—BIT12 BIT11—BIT5 BIT4 B ...

  2. x86 保护模式 十 分页管理机制

    x86   保护模式  十  分页管理机制 8.386开始支持分页管理机制 段机制实现虚拟地址到线性地址的转换,分页机制实现线性地址到物理地址的转换.如果不启用分页,那么线性就是物理地址 一  分页管 ...

  3. X86保护模式 八操作系统类指令

    X86保护模式  八操作系统类指令 通常在操作系统代码中使用,应用程序中不应用这些指令 指令分为三种:实模式指令,任何权级下使用的指令.实模式权级0下可执行的指令和仅在保护模式下执行的指令 一  实模 ...

  4. x86保护模式 任务状态段和控制门

    x86保护模式    任务状态段和控制门 每个任务都有一个任务状态段TSS     用于保存任务的有关信息     在任务内权变和任务切换时  需要用到这些信息    任务内权变的转移和任务切换  一 ...

  5. x86保护模式-七中断和异常

    x86保护模式-七中断和异常 386相比较之前的cpu   增强了中断处理能力   并且引入了 异常概念 一 80386的中断和异常 为了支持多任务和虚拟存储器等功能,386把外部中断称为中断     ...

  6. x86保护模式 实模式与保护模式切换实例

    x86保护模式     实模式与保护模式切换实例 实例一 逻辑功能   以十六进制数的形式显示从内存地址110000h开始的256个字节的值    实现步骤: 1  切换保护方式的准备 2. 切换到保 ...

  7. x86保护模式 二 分段管理机制

    分段管理机制 段选择子和偏移地址的二维虚拟地址转换为一维的线性地址 一  段定义和虚拟地址到线性地址的转换 三个参数定义段:段基地址    段界限  和段属性    同时也是段描述符的结构 段基地址为 ...

  8. x86保护模式-六 控制转移

    控制转移可以分为两大类  :同一任务内的控制转移    和   任务间的控制转移(任务切换) 同一个任务内的控制转移可以分为段内转移 .特权级不变的段间转移和特权级改变的段间转移 段内转移与实模式相同 ...

  9. CPU保护模式深入探秘

    原文链接为:http://www.chinaunix.net/old_jh/23/483510.html 保护方式的体系结构 主要问题:          保护方式的寄存器模型          保护 ...

随机推荐

  1. arcengine 将地图文件保存为图片(包括各种图片格式)

    1,最近做了个地图文件输出图片的功能,思想主要就是利用MapControl的ActiveView中的out方法: 2代码如下:欢迎交流指正 SaveFileDialog m_save = new Sa ...

  2. user-select详解

    语法: user-select:none | text | all | element 默认值:text 适用于:除替换元素外的所有元素 继承性:无 动画性:否 计算值:指定值 取值: none: 文 ...

  3. RStudio的Markdown

    Title This is an R Markdown document. Markdown is a simple formatting syntax for authoring web pages ...

  4. 异步 BeginInvoke

    委托的异步调用异步多线程的三大特点:1.同步方法卡界面,原因是主线程被占用:异步方法不卡界面,原因是计算交给了别的线程,主线程空闲2.同步方法慢,原因是只有一个线程计算:异步方法快,原因是多个线程同事 ...

  5. Servlet和JSP之标签文件学习

    在上一篇文章中介绍了自定义标签的用法,接下来介绍标签文件的用法啦. tag file指令 tag file简介 用tag file的方式,无需编写标签处理类和标签库描述文件,也可以自定义标签.tag ...

  6. Asp.Net Core 入门(九)—— 环境变量 TagHelper

    我们在之前讲Program.cs文件做了什么的时候,提到启动CreaeDefaultBuilder会获取环境变量来做一些判断之类的操作.那么我们的Taghelper也可以使用“ASPNETCORE_E ...

  7. uaf-湖湘杯2016game_学习

    0x00 分析程序 根据分析,我们可以得到以下重要数据结构 0x01 发现漏洞 1.在武器使用次数耗光后,程序会把存储该武器的堆块free,在free的时候没有清空指针,造成悬挂指针 2.commen ...

  8. javase(5)_面向对象

    一.概述 1.面向对象是一种思想,让我们由执行者变成指挥者,执行者是面向过程,指挥者是面向对象.例如人开冰箱门,开冰箱门这个动作应该属于门而不是人,冰箱自己最清楚门应该怎么开,人只是调用了冰箱的这个动 ...

  9. OC各种遍历方法的效率比较

    看了一篇博客,挺有意思,OC各种遍历方法的效率,打算自己也测试一番.看看,究竟哪一个的效率更好一些! 准备工作:懒加载一个数组,创建一千万个对象添加到数组. #pragma mark - Lazy M ...

  10. js之数组知识

    一.数组的定义(来源于Array.prototype) 1.构造函数方法: (1)var arr = new Array();//没有参数等价于 var arr = []; (2)var arr = ...