教材选择一个操作系统的实现,作者于渊,看此书前最好了有汇编语言,保护模式下的汇编(参考清华杨季文的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.youkuaiyun.com/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位保护模式下指令执行过程(省略了严格的检查机制)