X86保护模式编程总结(1)

 

 

 

系统设计的步骤:

1, 初始化相关硬件.并装入系统.

2, 取得并测试相应硬件的参数.并初始化如X387等硬件.

3, 加载GDT到GDTR(第一个描述符必须为0,至少需要一个代码段和一个数据段)

4, 加载IDT到IDTR(必须先关中断,加载完后可打开)

5, 设置CR0中PE=1(也可和PG位一起设,并用JMP大跳)并重新装载段寄存器.

6, 建立页目录和页表,并将页目录基地址放入CR3

7, 将CR0中PE=1&&PG=1 (设置之后需用JMP指令刷新预取指令队列,pentium不用)

8, 建立LDT并将它在GDT中的索引装入LDTR(可选)

9, 建立第一个任务的TSS,并将它在GDT中的索引装入TR(可选).

 

从保护模式转回实模式步骤:

1, 如果分页被开启,执行以下步骤:

       A,将控制转移给具有等同映射的线性地址.确保GDT和IDT是等同映射的.

       B,将CR0寄存器的PG位清0.

       C,设置CR3=0,以便清洗TLB.

2,将控制转移给具有64k限制(0x0FFFF)的段.这将向CS寄存器装入在实方式中所需的段限.确保GDT和IDT处于实地址存储器(0-1M).

3,向段寄存器SS,DS,ES,FS和GS装入包含以下值的描述符用的选择符.这些值适用于实地址方式下: {段限=64K(0FFFF); 字节粒度(G=0); 向上扩充(E=0); 可写(W=1); 存在(P=1);基地址=任意值}

4, 禁止中断.包括NMI中断(可用外部电路来禁止)

5, 将CR0寄存器的PE=0

6, 用远程JMP指令跳转到实方式的程序.这将清洗指令对列.并对CS的访问权置以适当的值,在PentiumCPU中不需要此步.

7, 使用LIDT指令来装入实地址中断向量表的基地址和段限.

8, 开启中断

9, 按实地址方式的需要装入段寄存器.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值