2.4 80386微处理器
在16位微处理器80286的基础上,Intel公司于1985年推出32位微处理器80386及更高性能的32位微处理器80486。32位微处理器体现了体系结构的重要进步,即从16位体系结构过渡到32位体系结构;由于其性价比高而受到广泛的应用,由80386/80486微处理器组成的微机系统的主要性能指标已超过许多中、小型计算机系统。
80386微处理器在增大字长的同时增加了许多功能和附加特征,下面将分几方面进行介绍。
2.4.1 80386的主要性能
① 具有32条数据总线和内部数据通路,其中寄存器、ALU和内部总线都是32位,可以处理8位、16位和32位数据类型。具有32条地址总线,能提供32位的指令寻址能力,可寻址4GB的物理存储空间。
② 具有实模式、保护模式和虚拟8086三种工作模式。在实模式下,80386只能运行在有限资源的情况下,内存最大寻址空间1MB,性能相当于一个高速的8086 CPU;在保护模式下,80386具有段页式存储管理功能,可寻址4GB的物理存储空间;在虚拟8086模式下,支持保护机制和分页存储管理,与8086兼容,可寻址1MB存储空间。
③ 具有指令流水线结构、片内地址转换的高速缓冲存储器等硬件,大大提高了指令的执行速度和CPU的工作效率。
2.4.2 80386的内部结构
80386微处理器内部结构框图如图2-28所示。芯片主要由三大部件组成:总线接口部件(BIU)、中央处理部件(CPU)、存储器管理部件(MMU)。三大部件又可分为6个并行工作的模块部件:总线接口部件、代码预取部件、指令译码部件、控制部件、指令执行部件、存储器管理部件。6个模块部件采用流水线作业结构,各行其能,并行工作,可同时处理多条指令,从而大大提高了程序的执行速度。
图2-28 80386微处理器内部结构框图
(1)总线接口部件(BIU)
通过数据总线、地址总线、控制总线完成与微处理器外部(存储器、I/O接口)的联系。包括访问存储器预取指令、存储器数据读/写、I/O端口数据读/写等操作控制功能。
(2)中央处理部件(CPU)
由代码预取部件、指令译码部件、控制部件、指令执行部件组成,各部件为并行工作。代码预取部件用于暂存从存储器中预取的指令代码,又称为预取指令队列。指令译码部件对预取指令队列中的指令进行译码,译码后又送入译码指令队列等待执行。该部件的特点是在预译码时若发现为转移指令,则提前通知总线接口部件去取目标地址中的指令代码并取代原预取指令队列中的顺序指令代码,从而提高效率。控制部件根据指令代码产生工作时序。指令执行部件完成指令代码的执行,包含1个32位的算术运算单元(ALU),8个32位的通用寄存器,1个为快速乘、除运算服务的64位移位寄存器(桶形移位器)
(3)存储器管理部件(MMU)
由分段部件和分页部件组成,存储器采用段、页式结构。页为定长结构,即每4KB为一页,程序或数据以页为单位存储。存储器按段组织,每段含若干页,段的最大容量可达4000MB。一个任务最多可含16K个段,故可为每个任务提供最大64TB的虚拟存储空间。存储结构中还采用了高速缓冲存储器(Cache),加快了指令和数据的访问速度,在计算机系统中构成了高速缓冲存储器、内存储器、外存储器的三级存储体系。
2.4.3 80386的寄存器结构
80386微处理器的寄存器共有40个,其结构如图2-29所示。80386的寄存器分为7组:通用寄存器组、段寄存器组、专用寄存器组、控制寄存器组、系统地址寄存器组、调试寄存器组、测试寄存器组。通用寄存器组、段寄存器组和专用寄存器组称为基本寄存器,编程人员会经常使用这些寄存器,应该掌握。其余寄存器组称为系统寄存器,多用于对操作系统的调试,应该了解。
图2-29 80386寄存器组
1.通用寄存器组
通用寄存器组由8个32位的寄存器组成,是8086/8088微处理器中8个16位通用寄存器的32位扩展。其中EAX,EBX,ECX和EDX这4个寄存器可8位使用(用寄存器名AL,AH,BL,BH,CL,CH,DL和DH表示),也可16位使用(用寄存器名AX,BX,CX和DX表示),还可32位使用(其寄存器名分别为:EAX,EBX,ECX和EDX)。80386通用寄存器组如图2-29(a)所示。
2.段寄存器组
段寄存器组由6个16位的选择器寄存器组组成。选择器寄存器组是8086/8088微处理器中4个16位段寄存器的数量扩展。原来的两个数据段、附加寄存器DS和ES扩展为4个数据段寄存器DS,ES,FS和GS,在编程时可同时定义和使用这4个数据段,使程序设计更加灵活。保留了原来的代码段寄存器CS和堆栈段寄存器SS。80386段寄存器组如图2-29(b)所示。
3.专用寄存器组
专用寄存器组由2个32位的寄存器组成,是8086/8088微处理器中16位标志寄存器FLAGS和指令指针寄存器IP的32位扩展,称为EFLAGS和EIP。32位的指令指针寄存器EIP可工作于16位操作方式(用寄存器名IP表示),也可工作于32位操作方式(用寄存器名EIP表示)。32的标志寄存器EFLAGS中定义了14位有效,除与8086/8088微处理器中定义的9位(CF,PF,AF,ZF,SF,TF,IF,DF和OF)相同外,还定义了5位:I/O特权标志位(IOPL)、嵌套标志位(NT)、恢复标志位(RF)、虚拟8086模式标志位(VM)、对齐检查标志位(AC)。80386的指令指针寄存器EIP的结构图如图2-29(c)所示。80386的标志寄存器EFLAGS的位结构如图2-30所示。
图2-30 80386的标志寄存器EFLAGS
80386新增标志位的功能及定义如下。
① I/O特权标志位:IOPL=00 特权级0 IOPL=01 特权级1
IOPL=10 特权级2IOPL=11 特权级3
② 嵌套标志位:NT=0 无嵌套 NT=1 当前任务嵌套于另一任务中
③ 恢复标志位:RF=0 所有调试故障需排除
RF=1 所有调试故障被忽略
④ 模式标志位:VM=0 工作于实地址方式
VM=1 工作于保护虚地址方式
4.控制寄存器组
控制寄存器组由4个32位寄存器组成。80386的控制寄存器组结构如图2-29(d)所示。
(1)控制寄存器CR0的功能:目前仅用了最低4位作为机器状态字,各位定义如下。
① 允许保护位PE(bo):PE=0 CPU当前处于实地址方式
PE=1 CPU当前已进入保护虚地址方式
② 任务切换位TS(b3)、仿真协处理器位EM(b2)、监控协处理器位MP(b1)为组合应用。
TS,EM,MP=000 80386处于实地址方式,当前最复位后的初始状态。
TS,EM,MP=001 有协处理器80387,不需要软件仿真。
TS,EM,MP=010 无协处理器80387,要求用软件仿真。
TS,EM,MP=101 有协处理器,不需软件仿真,产生任务切换。
TS,EM,MP=110 无协处理器,要求软件仿真,产生任务切换。
③ ET(b4):处理器扩展类型位,仅对80386有效,ET=0,表示80386系统内使用80287,否则是使用80387协处理器。
④ PG(b31):分页允许位。PG=1,允许片内分页单元工作,否则将禁止。
(2)控制寄存器CR1的功能:保留为将来开发的Intel微处理器用。
(3)控制寄存器CR2的功能:包含一个32位的线性地址,指向页故障地址。
(4)控制寄存器CR3的功能:包含页目录表的物理地址。
5.系统地址寄存器组
系统地址寄存器组由2个48位的寄存器和2个16位的寄存器组成。80386系统地址寄存器组结构如图2-29(e)所示。系统地址寄存器组中各寄存器的功能如下:
① GDTR:存放全局描述符表的32位线性基地址和16位界限值。
② IDTR:存放中断描述符表的32位线性基地址和16位界限值。
③ LDTR:存放局部描述符表的16位段选择子。
④ TR:存放任务状态段表的16位段选择子。
6.调试寄存器组
调试寄存器组由8个32位寄存器组成。80386调试寄存器组结构图如图2-29(f)所示。
80386微处理器为程序员提供了供程序调试(DEBUG)的寄存器组。程序员在编程及调试过程中使用这些寄存器完成程序的调试。各寄存器的功能如下:
① DR0,DR1,DR3,DR3:用户设置的程序断点地址。
② DR7:用户设置的断点控制。
③ DR6:用户调试时的断点状态值。
④ DR4,DR5:保留寄存器。
7.测试寄存器组
测试寄存器组由8个32位寄存器组成。80386测试寄存器组结构如图2-29(g)所示。
① TR0,TR1,TR2和TR3为调试寄存器,各寄存器中包含了由微处理器指令产生的32位线性断点地址,供调试时使用。
② TR4和TR5两个寄存器未用,为Intel公司预留。
③ TR6和TR7为测试寄存器,用来测试转换后备缓冲区TLB(Translation Look-aside Buffer)。TR6为测试命令寄存器,用于对TLB进行测试。TR7用于保存测试TLB后的结果。
2.4.4 80386的数据处理
80386微处理器的数据总线宽度为32位,即可同时并行处理4字节数据。在实际应用中可采用8位,16位,32位3种数据传输方式。内存储器按字节组织,每个存储单元仅含8位二进制数据。处理8位数据时仅访问1个地址单元,处理16位数据时要访问连续的2个地址单元,处理32位数据时要访问连续的4个地址单元。
1.8086微处理器对8位、16位数据的处理
在8086微处理器中将内存储器分为奇数库和偶数库,用控制线和地址线A0完成奇、偶库的选择从而实现对8位数据或16位数据的选择处理。
2.80386微处理器对8位、16位、32位数据的处理
在80386微处理器中将内存储器分为0库、1库、2库和3库,采用向芯片引脚和输入控制信号及最低两位地址线A1,A0完成库选择,从而实现对8位、16位、32位数据的选择处理。