标签:process img png window 预取 发展 成功 请求 结合
一、80386 概述
80386处理器被广泛应用在1980年代中期到1990年代中期的IBM PC相容机中。这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」。80386的广泛应用,将PC机从16位时代带入了32位时代。80386的强大运算能力也使PC机的应用领域得到巨大扩展,商业办公、科学计算、工程设计、多媒体处理等应用得到迅速发展。它的数据总线和地址总线都是32位,直接寻址的内存空间4GB,虚拟地址空间为64TB。芯片上集成了27.5万个晶体管,主频16-33MHz。它是X86第一个真正的32位CPU,它能提供真正的多任务处理和建立虚拟系统的能力。
二、80386的引脚及功能
80386 DX有132根引脚,采用PGA(Pin Grid Array,引脚网格阵列)封装,采用这种封装工艺单根引脚所占用的面积较双列直插时小,因此引脚数目可以多一些,不必再采用引脚复用技术。因此,在80386中数据线和地址线是分开设置的,控制信号和状态信号也不再复用引脚。其中34 条地址线(A31~A2、BE3~BE0),32 条数据线(D31~D0),3 条中断线,1条时钟线,13 条控制线,20 条电源线VCC,21条地线VSS,还有8 条为空。
与8086/8088 相比,需要说明以下几点:
1)时钟( CLK2): 80386 的基本定时信号由CLK2 提供。CLK2 的频率是80386 内部时钟信号频率的两倍,输入该信号与82384 时钟信号同步,经80386 内部2 分频之后得到80386 的工作基准频率信号。
2)数据总线(D31~D0):为80386 和其他设备之间提供数据通路,32 位数据总线,双向三态,一次可传送8 位、16 位或32 位数据,由输入信号(BE3~BE0)和BE16确定。在任何写操作周期(包括暂停周期和停机周期),80386 总是驱动数据总线的所有32 位信号,而不管当前总线的实际宽度。
3)地址总线(A31~A2,BE3~BE0) 。
4)总线周期定义信号(M/IO,W/R,D/C,LOCK,三态,输出,用来定义正在进行的总线周期类型)。
5)总线控制信号(ADS,READY,NA,BE16)。
这组信号用来表示总线周期何时开始,以及数据总线的宽度和总线周期的终结。
6)总线仲裁信号(HOLD,HLDA) :由总线请求主设备来控制该组信号。
7)协处理器接口信号(PEREQ,BUSY,ERROR) :控制80386 同80287 或80387 之间的通信。
8)中断信号( INTR,NMI,RESET) :用来引起中断或中止80386 正在执行的指令流。
80386有许多VCC 脚,也有许多标为VSS 的地线,这些引脚均被接到PC板合适的电平上。
三、80386内部结构
上图可简化为如下图:
四、80386的寄存器
80386的寄存器结构 80386微处理器共有7类34个寄存器,通用寄存器组、段寄存器、指令指针和标志寄存器、系统地址寄存器、控制寄存器、调试寄存器、测试寄存器。
(1)通用寄存器组:共有8个32位寄存器,EAX, EBX,ECX,EDX,ESP,EBP,ESI,EDI。它们由8086的16位寄存器扩展而来,它们的低16位与8086使用方法相同。
(2)段寄存器:共有6个16位的段寄存器CS、DS、SS、ES、FS、GS。与这6个段寄存器对应的有6个64位描述符寄存器,它是80X86处理器提供的一种附加的非编程的寄存器,用来装64的段描述符,每当一个段选择符被装入段寄存器是,相应的段描述符就由内存装入到对应的非编程的CPU寄存器。其中CS、DS、SS、ES与8086的段寄存器完全相同,在实地址方式下,使用方法也与8086相同;在虚地址保护方式下,这些寄存器中的值是“段选择符”,需要查全局描述符表(GDT)或者局部描述符表(LDT)来获得段的基地址,再加上偏移地址才能得到线性地址。 FS和GS是新加的附加数据段寄存器,可以由用户将FS、GS定义为其他数据段。
(3)指令指针和标志寄存器:指令指针寄存器EIP,由8086的IP寄存器扩展而来。标志寄存器EFLAGS包含一组状态标志、一个控制标志、一组系统标志,图四定义该寄存器中的标志位。
标志寄存器EFLAGS的低12位与8086的标志寄存器FLAGS一样。IOPL位表示特权标志位,定义当前任务的特权层。NT位表示任务嵌套标志位,当NT位为1时表明当前执行的任务嵌套在另外一个任务中,否则NT位为0。RF位表示重新启动标志位,与调试寄存器一起用于断点和单步操作,RF位为1时表明下一条指令的调试故障将被忽略,不产生中断异常;RF位位0时表示调试故障被接受并产生中断异常。由于调测失败后强迫程序恢复执行;在每条指令成功执行后,RF自动复位。VM位表示虚拟模式标志位,VM位为1时表明80386工作在保护虚拟地址方式。前4个定义从80286开始,后面的2个定义从80386开始存在。另外的三个标志是Pentium以后的CPU才有的。VIF(Virtual interrupt flag)表示虚拟中断标志。当VIF=1时,可以使用虚拟中断,当VIF=0时不能使用虚拟中断。该标志要和下面的VIP和CR4中的VME配合使用。VIP(Virtual interrupt pending flag)表示虚拟中断挂起标志。当VIP=1时,VIF有效,VIP=0时VIF无效。ID(Identification flag)表示鉴别标志。该标志用来只是Pentium CPU是否支持CPUID的指令。
(4) 系统地址寄存器和系统段寄存器:系统地址寄存器有全局描述符表寄存器GDTR、中断描述符表寄存器IDTR。系统段寄存器有局部描述符表寄存器LDTR和任务寄存器TR。这些寄存器保存相应的描述符表的地址。
(5) 控制寄存器:4个32位的控制寄存器CR0,CR1,CR2,CR3,它们保存全局性的机器状态,其基本定义如图五。从Pentium开始,又增加了一个CR4。下面来简单介绍控制寄存器中的位。
1)CR0的低16位包含了与80286的MSW一致的位定义,保持了和80286的兼容,同时也兼容了从80286开始的两条指令LMSW/SMSW。指令LMSW和SMSW分别用于装入和保存机器状态字信息,可以通过MOV指令对CR0进行读写操作。CR0中各位含义如下:
PE(Protection Enable)保护模式允许位,用来启动CPU进入虚地址保护方式。PE=0表示CPU工作在实地址方式;PE=1表示CPU工作在虚地址保护方式。
MP(Monitor Coprocessor)监控协处理器,MP=1表示协处理器在工作;MP=0表示协处理器未工作。
EM(Emulation)协处理器仿真,当MP=0,EM=1时,表示正在使用软件仿真协处理器工作。
TS(Task Switched)任务转换,每当进行任务转换时,TS=1;任务转换完毕,TS=0。TS=1时不允许协处理器工作。
ET(Extension Type)处理器扩展类型,反映了所扩展的协处理器的类型,ET=0为80287,ET=1为80387。
PG(Paging)页式管理机制使能,PG=1时页式管理机制工作,否则不工作。
NE(Numeric Error)数值异常中断控制,NE=1时,如果运行协处理器指令发生故障,则用异常中断处理,NE=0时,则用外部中断处理。
WP(Write Protect)写保护,当WP=1时,对只读页面进行写操作会产生页故障。
AM(Alignment Mask)对齐标志,AM=1时,允许对齐检查,AM=0时不允许,关于对齐,在EFLAGS的AC标志时介绍过,在80486以后的CPU中,CPU进行对齐检查需要满足三个条件,AC=1、AM=1并且当前特权级为3。
NW(Not Write-through)和CD(Cache Disable),这两个标志都是用来控制CPU内部的CACHE的,当NW=0且CD=0时,CACHE使能,其它的组合比较复杂。
前4个定义从80286开始,接着的2个定义从80386开始存在, 后面4个是从80486开始定义的。
2)CR1寄存器用来保留给Intel微处理器将来开发使用;CR2寄存器包含一个32位的线性地址,指向发生最后一次也故障的地址,只有在PG=1时,CR2才有效,当页故障处理程序被激活时,压入页故障处理程序堆栈中的错误码提供页故障的状态信息;CR3寄存器中包含页物理目录表的物理基地址,由于每4KB为一页,80386中的页目录表总在页的整数边界上,CR3的低13位总是为0,只有当CR0中的PG=1时,CR3的页目录基地址才有效。
(6) 调试寄存器:共8个排错寄存器DR0~DR7。DR0~DR3可以分别设置4个断点的线性地址,DR4~DR5保留未用,DR6是断点状态寄存器,DR7是断点控制寄存器(包括断点类型、断点长度,断点开放/禁止)。
(7) 测试寄存器:2个32位的测试寄存器TR6和TR7,用于控制转换后援缓冲器中的RAM测试,其中TR6为命令测试寄存器,TR7为测试数据寄存器。
五、80386工作模式
有三种工作模式:实地址模式、保护虚拟地址模式和虚拟8086模式。
常用的WINDOWS,LINUX 就是工作在处理器的保护模式底下.
为了兼容以前在实模式底下工作的软件,80386支持实模式,但是在实模式底下不能支持多任务处理,所以V86模式应运而生.
下面分别介绍几种模式:
1. 实模式
80386工作在时模式底下是 A0--------A19的20根地址线是可用的,寻址空间为1MB,这个时候80386和8086,8088的寻址方式是一样的,即段寄存器内容左移4位作为段地址,在加上段内偏移地址就构成了20位的物理地址,每个段的最大长度是64K,所以实模式底下物理地址的最高为是0XFFFFFH,若超除了就会被丢弃.在这种模式底下,80386不支持优先级,所以程序都可执行特权指令,不支持硬件上多任务的切换,是单操作系统,DOS既运行在实模式底下.定位中断服务子程序,需要中断向量表,中断向量号乘以4得到中断向量号,再在表中查找中断向量,中断向量有4个字节组成,分别是两个字节的段地址和两个字节的偏移地址,就可得到中断服务程序的入口地址. 这种模式底下可以直接对I/O地址空间,数据段,代码段进行读写.这时的80386和8086非常相似,80386就象是一个快速的8086,只不过80386有32位的数据线和32位的通用寄存器而8086是16位的.准确的说是准16位的系统
2 保护模式
在保护模式底下,逻辑地址由段寄存器和偏移地址组成,不过要得到物理地址可不是实模式底下的方法,首先,段寄存器中存放的不是段基址,而是选择子,系统通过选择子来得到真正的段基地址,然后段基地址和偏移地址相加后得到线性地址,这是通过分段机制实现的,然后再通过分页机制把线性地址转化成物理地址.但是分页机制是可选的.在保护模式底下,32条地址线全部有效,最大寻址空间可达4GB.支持多任务处理,使用一条指令或者一个中断就可以在任务内或任务间切换.提供了0---3共4个特权级,操作系统运行在最高级上即0级,应用程序运行低级上,不但实现资源共享,而且实现数据和代码的安全.不再使用中断向量表来实现中断功能,而是通过各种控制描述符来和特权级检查来完成多任务的实现即中断功能.以前那些I/O操作的指令不能对I/O端口进行读写,通过特权级和I/O许可位来进行安全检查.
3 V86模式
估计大家已经猜出来了(其实你在前面也讲了!),不管是实模式还是保护模式都有弊端,V86就充当了这两者之间的桥梁.说白了V86模式就是想利用保护模式的优点来运行8086下的程序.它是在保护模式底下工作的,也称虚拟8086模式.v86模式底下寻址和实模式相同,但20位地址不是真实的物理地址,而是线性地址,寻址空间为1MB,为了使多个虚8086任务不使用同一个位置的1MB地址空间,系统使用了分页机制将不同的V8086任务映射到不同的物理空间上去.每个V86任务认为自己在0-1MB的空间上运行.这样8086下的程序可以在80386的V86模式底下运行,但是它的一部分指令是是受到保护的,如果执行将发生异常,V86模式受到了V86监控程序的控制,v86监控程序和硬件组成了"8086虚拟机"。V86监控程序控制外部界面,中断,I/O,硬件提供最底端的1MB虚拟存储.,在80386中每个V86模式是相对的,这样就充分发挥了处理器的能力
标签:process img png window 预取 发展 成功 请求 结合
原文地址:https://www.cnblogs.com/yilang/p/11330767.html