zoukankan      html  css  js  c++  java
  • 1.4 向保护模式的转换

    注: 以下内容是我大学教材的某一个章节。这里完全是抄写到我的博客中,一方面方便以后使用,另一方面也算是加强记忆。

    1.4 向保护模式转换 

      Pentium在复位之后,将CR0寄存器中的PE位变为逻辑0,处理器处在实地址方式下并开始运行程序。通过给CR0寄存器中的PE位置1,微处理器将进入保护模式,但在进入保护模式之前,必须在实地址方式下做好初始化准备工作 。下面的步骤将完成从实地址方式到保护模式的切换:

      1)初始化中断描述符表IDT,使其包含至少前32中中断类型有效的中断门描述符

      2)初始化全局描述符表GDT,使其第0项为一个空描述符,并且使其至少包含一个数据段描述符,一个代码段描述符,一个堆栈段描述符。

      3) 进入保护模式的实际方法是通过指令MOV CR0,R/M使CR0寄存器中的PE位置1.这就使Pentium置为保护模式。

      4)进入保护模式后,执行一条段内近JMP指令清除内部指令队列并把TSS描述符基址转入到TR中。

      5)将初始数据段选择符的值装入到所有的数据段寄存器中。

      6)现在Pentium已运行在保护模式下,正在使用GDT和IDT中定义的段描述符。

      另一种适合适合多任务操作系统进入保护模式的方法是为装载所有的寄存器而创建的任务切换。对于多任务操作系统利用任务切换来使Pentium进入到保护模式所需要的步骤如下:

      1)初始化中断描述符表IDT,以便它用IDT中的至少32个描述符提供有效的中断描述符。

      2)初始化全局描述符表GDT,以便使其最少有两个任务状态段TSS描述符和初始任务所需要的原始代码段及数据段描述符。

      3)初始化任务寄存器TR,使它指向一个TSS,当初始任务发生切换并访问新TSS时,当前寄存器值将保存在这个原始的TSS中。

      4)进入保护模式后,执行一条段内近JMP指令清除内部指令队列,切换到保护模式下。将当前的TSS选择符装入到TR寄存器中

      5)用一条远转移指令装载TR寄存器,以便访问新的TSS并保存当前状态

      6)现在Pentium已运行在保护模式下。

  • 相关阅读:
    python数据类型--字符串
    Cannot open include file: 'afxcontrolbars.h': No such file or directory
    关于找不到tbb_debug.dll解决办法
    Android fill_parent、wrap_content和match_parent的区别
    多个摄像头同步工作【转】
    如何查找openCV函数源代码[转]
    Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)[转]
    CvCaptureFromCam
    OpenCV与相机的关系[转]
    10亿以内和987654互质正整数的和[转自深圳-冒泡]
  • 原文地址:https://www.cnblogs.com/haiming/p/2726837.html
Copyright © 2011-2022 走看看