80386保护模式--GDT,LDT,TSS,调用门,特权级转移,附pmtest5代码详解

       教材选择一个操作系统的实现,作者于渊,看此书前最好了有汇编语言,保护模式下的汇编(参考清华杨季文的80X86汇编语言程序设计教程),C语言,计算机组成原理,微机接口,操作系统相关知识。

一、80386的寄存器结构

       80386微处理器共有7类34个寄存器,通用寄存器组、段寄存器、指令指针和标志寄存器、系统地址寄存器、控制寄存器、调试寄存器、测试寄存器。前四类寄存器的示意图1。其中描述符高速缓冲寄存器0-31存放段首地址,0-19存放段界限,0-11存放段属性,LDTR与此类似。后面我们会看到当装入选择子后,对应的描述符恰好是32位,20位,12位共8个字节,正好能装入高速缓存寄存器。GDTR中0-31为GDTR的首地址,0-15为GDTR的界限,为什么GDTR的界限比其他的少4位呢,因为我们GDTR不需要那么大。另外控制寄存器CR0,CR1,CR2,CR3,如图2。CR0的处理器工作模式如图3。

                                                                                                                      

                             图1  通用寄存器组、段寄存器、指令指针和标志寄存器、系统地址寄存器示意图 

                                           

                                                                               图2 控制寄存器

            

                                                            图3 PG/PE位与处理器工作模式


 二、80386描述符

       此部分请看http://blog.csdn.net/jltxgcy/article/details/8656101,里面详细介绍了描述符包括,存储段描述符(代码段,数据段,堆栈段),系统描述符(任务状态段TSS,局部描述符表LDT),门描述符(调用门,任务门,中断门,陷阱门),还介绍了选择子,同时介绍了pm.inc中的代码。


三、80386 16位实模式与32位保护模式下指令执行

    1、16位实模式下指令执行过程

    ①代码被加载到内存,段寄存器被赋值,从CS左移4位加上IP的值,形成20位地址,再加上高12位地址全部为0,形成32位地址,到此地址取得命令。注意由于没有开A20地址线,所以还保留8086的地址环绕现象。

    ②IP=IP+所指指令的长度。

    ③执行指令(个别指令执行的时候修改CS,IP),跳到①继续执行。


    2、32位保护模式下指令执行过程(省略了严格的检查机制)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值