2.2 Intel 80486 32位微处理器
80486微处理器是Intel公司于1989年推出的32位微处理器。它采用了1μm制造工艺,内部集成了120万个晶体管;内外部数据总线和地址总线均为32位,可寻址4GB(232)的存储空间,支持虚拟存储管理技术,虚拟存储空间为64TB;片内集成有浮点运算部件和8KB的Cache(L1 Cache),同时也支持外部Cache(L2 Cache);整数处理部件采用精简指令集RISC,提高了指令的执行速度;此外,80486微处理器还引进了时钟倍频技术和新的内部总线结构,从而使主频可以超出100MHz。
2.2.1 Intel 80486微处理器内部结构
80486微处理器内部包括总线接口部件、指令预取部件、指令译码部件、控制和保护测试单元部件、整数执行部件、分段部件、分页部件,以及浮点运算部件和高速缓存(Cache)管理部件,其内部结构如图2.10所示。
1.总线接口部件(BIU)
总线接口部件(BIU)与外部总线连接,用于管理访问外部存储器和I/O端口的地址、数据和控制总线。对处理器内部,BIU主要与指令预取部件和高速缓存部件交换信息,将预取指令存入指令代码队列。
BIU与Cache部件交换数据有三种情况:第一,向高速缓冲存储器填充数据,BIU一次从片外总线读取16字节到Cache中;第二,如果高速缓冲存储器的内容被处理器内部操作修改了,则修改的内容也由BIU写回到外部存储器中去;第三,如果一个读操作请求所要访问的存储器操作数在高速缓冲存储器中,则这个读操作由BIU控制总线直接对外部存储器进行操作。
在预取指令代码时,BIU把从外部存储器取出的指令代码同时传送给指令预取部件和内部高速缓冲存储器,以便在下一次预取相同的指令时,可直接访问高速缓冲存储器。
图2.10 80486微处理器内部结构
2.指令预取部件(pre-fetcher)
80486 CPU内部有一个32字节的指令预取部件,在总线空闲周期,指令预取部件(prefetcher)形成存储器地址,并向BIU发出预取指令请求。指令预取部件一次读取16字的指令代码存入指令代码队列中,指令代码队列遵循先进先出(FIFO,first in first out)的规则,自动地向输出端移动。如果Cache在指令预取时命中,则不产生总线周期。当遇到跳转、中断、子程序调用等操作时,指令代码队列被清空。
3.指令译码部件(IDU)
指令译码部件(IDU,instruction decode unit)从指令代码队列中读取指令并译码,将其转换成相应控制信号。译码过程分两步:首先,确定指令执行时是否需要访问存储器,若需要,则立即产生总线访问周期,使存储器操作数在指令译码后能准备好;然后,产生对其他部件的控制信号。
4.控制和保护测试部件(CPTU)
控制部件(CPTU,control and protection test unit)对整数执行部件、浮点运算部件和分段管理部件进行控制,使它们执行已译码的指令。
5.整数执行部件(IU)
整数执行部件(IU,integer data-path unit)包括4个32位通用寄存器、两个32位间址寄存器、两个32位指针寄存器、一个标志寄存器、一个64位桶形移位寄存器和算术逻辑运算单元等。它能在一个时钟周期内完成整数的传送、加减运算、逻辑操作等。80486微处理器采用了RISC技术,并将微程序逻辑控制改为硬件布线逻辑控制,缩短了指令的译码和执行时间,一些基本指令可在一个时钟周期内完成。
两组32位双向总线将整数单元和浮点单元联系起来,这些总线合起来可以传送64位操作数。这组总线还将处理器单元与Cache联系起来,通用寄存器的内容通过这组总线传向分段单元,并用于产生存储器单元的有效地址。
6.浮点运算部件(FPU)
80486微处理器内部集成了一个增强型80387数字协处理器,称为浮点运算部件(FPU,floating point unit),用于完成浮点数运算。由于FPU与CPU集成封装在一个芯片内,而且它与CPU之间的数据通道是64位的,所以当它在内部寄存器和片内Cache取数时,运行速度会极大提高。
7.分段部件(SU)和分页部件(PU)
80486微处理器设置了分段部件(SU,segmentation unit)和分页部件(PU,paging unit),实现存储器保护和虚拟存储器管理。分段部件将逻辑地址转换成线性地址,采用分段Cache可以提高转换速度。分页部件用来完成虚拟存储,把分段部件形成的线性地址进行分页,转换成物理地址。为了提高页转换速度,分页部件中还集成了一个转换后援缓冲器(TLB,the translation look-aside buffer)。
8.高速缓冲存储器部件(CU)
80486微处理器内部集成了一个数据/指令混合型Cache,称为高速缓冲存储器部件(CU,cache unit)。在绝大多数的情况下,CPU都能在片内Cache中存取数据和指令,减少了CPU的访问时间。在与80486 DX配套的主板设计中,采用128~256KB的大容量二级Cache来提高Cache的命中率,片内Cache(L1 Cache)与片外Cache(L2 Cache)合起来的命中率可达98%。CPU片内总线宽度高达128位,总线接口部件将以一次16字节的方式在Cache与内存之间传输数据,大大提高了数据处理速度。80486微处理器中的Cache部件与指令预取部件紧密配合,一旦预取代码未在Cache中命中,BIU就对Cache进行填充,从内存中取出指令代码,同时送Cache部件和指令预取部件。
2.2.2 Intel 80486微处理器寄存器结构
80486微处理器的寄存器按功能可分为4类:基本寄存器、系统寄存器、调试和测试寄存器以及浮点寄存器。
80486微处理器的寄存器从总体上还可分为程序可见和不可见两类。在程序设计期间要使用的、并可由指令来修改其内容的寄存器,称为程序可见寄存器。在程序设计期间,不能直接寻址的寄存器,称为程序不可见寄存器,但是在程序设计期间可以被间接引用。程序不可见寄存器用于保护模式下控制和操作存储器系统。
1.基本寄存器(base architecture registers)
基本寄存器包括8个通用寄存器EAX、EBX、ECX、EDX、EBP、ESP、EDI和ESI;一个指令指针寄存器EIP;6个段寄存器CS、DS、ES、SS、FS和GS;一个标志寄存器EFLAGS。80486微处理器的基本寄存器组如图2.11所示,它们都是程序可见寄存器。
(1)通用寄存器(GPR)
通用寄存器(GPR,general purpose registers)包括EAX,EBX,ECX,EDX,EBP,ESP,EDI和ESI。
图2.11 80486微处理器基本寄存器组
EAX、EBX、ECX、EDX都可以作为32位寄存器、16位寄存器或者8位寄存器使用。EAX可作为累加器用于乘法、除法及一些调整指令。对于这些指令,累加器常表现为隐含形式。EAX寄存器也可以保存被访问存储器单元的偏移地址。EBX常用于地址指针,保存被访问存储器单元的偏移地址。ECX经常用作计数器,用于保存指令的计数值。ECX寄存器也可以保存访问数据所在存储器单元的偏移地址。用于计数的指令包括重复的串指令、移位指令和循环指令。移位指令用CL计数,重复的串指令用CX计数,循环指令用CX或ECX计数。EDX常与EAX配合,用于保存乘法形成的部分结果,或者除法操作前的被除数,它还可以寻址存储器数据。
EBP和ESP是32位寄存器,也可作为16位寄存器BP、SP使用,常用于堆栈操作。EDI和ESI常用于串操作,EDI用于寻址目标数据串,ESI用于寻址源数据串。
(2)指令指针寄存器(EIP)
指令指针寄存器(EIP,extra instruction pointer)存放指令的偏移地址。微处理器工作在实地址模式下,EIP与IP(16位)寄存器相同。80486 CPU工作于保护模式时,EIP为32位寄存器。EIP总是指向程序的下一条指令,(即ESP的内容自动加1,指向下一个存储单元)。EIP用于微处理器在程序中顺序地寻址代码段内的下一条指令。当遇到跳转指令或调用指令时,指令指针寄存器的内容需要修改。
(3)标志寄存器(EFR)
标志寄存器(EFR,extra flags register)包括状态位、控制位和系统标志位,用于指示微处理器的状态并控制微处理器的操作。80486 CPU标志寄存器如图2.12所示。
图2.12 80486 CPU标志寄存器
① 状态标志位:包括进位标志CF、奇偶标志PF、辅助进位标志AF、零标志ZF、符号标志SF和溢出标志OF。
② 控制标志位:包括陷阱标志(单步操作标志)TF、中断标志IF和方向标志DF。80486 CPU标志寄存器中的状态标志位和控制标志位与8086 CPU标志寄存器中的状态标志位和控制标志位的功能完全一样,这里不再赘述。
③ 系统标志位和IOPL字段:在EFR寄存器中的系统标志位和IOPL字段,用于控制操作系统或执行某种操作。它们不能被应用程序修改。
IOPL(I/O privilege level field):输入/输出特权级标志位。它规定了能使用I/O敏感指令的特权级。在保护模式下,利用这两位编码可以分别表示0,1,2,3这4种特权级,0级特权最高,3级特权最低。在80286以上的处理器中有一些I/O敏感指令,如CLI(关中断)、STI(开中断)、IN(输入)、OUT(输出)。IOPL的值规定了能执行这些指令的特权级。只有特权级高于IOPL的程序才能执行I/O敏感指令;而特权级低于IOPL的程序,如果企图执行敏感指令,则会引起异常中断。
NT(nested task flag):任务嵌套标志。在保护模式下,指示当前执行的任务嵌套于另一任务中。当任务被嵌套时,NT=1;否则NT=0。
RF(resume flag):恢复标志。与调试寄存器一起使用,用于保证不重复处理断点。当RF=1时,即使遇到断点或故障,也不产生异常中断。
VM(virtual-8086 mode flag):虚拟8086模式标志,用于在保护模式系统中选择虚拟操作模式。VM=1,启用虚拟8086模式;VM=0,返回保护模式。
AC(alignment check flag):队列检查标志。如果在不是字或双字的边界上寻址一个字或双字,则队列检查标志被激活。
(4)段寄存器(SR)
80486微处理器包括6个段寄存器(SR,segment registers),分别存放段基址(实地址模式)或选择符(保护模式),与微处理器中的其他寄存器联合生成存储器单元的物理地址。80486微处理器段寄存器如图2.13所示。
① 代码段寄存器CS:代码段是一个保存微处理器程序代码(程序和过程)的存储区域。CS存放代码段的起始地址。在实地址模式下,它定义一个64KB存储器段的起点。在保护模式下工作时,它选择一个描述符。这个描述符描述程序代码所在存储器单元的起始地址和长度。在保护模式下,代码段的长度为4GB。
图2.13 80486微处理器段寄存器
② 数据段寄存器DS:数据段是一个存储数据的存储区域,程序中使用的大部分数据都在数据段中。DS用于存放数据段的起始地址。可以通过偏移地址或者其他含有偏移地址的寄存器,寻址数据段内的数据。在实地址模式下工作时,它定义一个64KB数据存储器段的起点。在保护模式下,数据段的长度为4GB。
③ 堆栈段寄存器SS:SS用于存放堆栈段的起始地址。堆栈指针寄存器ESP确定堆栈段内当前的入口地址。EBP寄存器也可以寻址堆栈段内的数据。
④ 附加段寄存器ES:ES存放附加数据段的起始地址,常用于存放数据段的段基址或者在串操作中作为目标数据段的段基址。
⑤ 附加段寄存器FS和GS:FS和GS是附加的数据段寄存器,作用与ES相同,以便允许程序访问两个附加的数据段。
在保护模式下,每个段寄存器都含有一个程序不可见区域。这些寄存器的程序不可见区域通常称为描述符的高速缓冲存储器(descriptor cache),因此它也是存储信息的小存储器。这些描述符高速缓冲存储器与微处理器中的一级或二级高速缓冲存储器不能混淆。每当段寄存器中的内容改变时,基地址、段限和访问权限就装入段寄存器的程序不可见区域。例如,当一个新的段基址存入段寄存器时,微处理器就访问一个描述符表,并把描述符表装入段寄存器的程序不可见的描述符高速缓冲存储器区域内。这个描述符一直保存在此处,并在访问存储器时使用,直到段基址再次改变。这就允许微处理器在重复访问一个内存段时,不必每次都去查询描述符表,因此称为描述符高速缓冲存储器。
2.系统寄存器(system-level registers)
在保护模式下操作时,存储器系统中增加了全局描述符表、局部描述符表和中断描述符表。为了访问和指定这些表的地址,80486微处理器系统寄存器包括4个系统地址寄存器和4个控制寄存器。
(1)系统地址寄存器(system address registers)
系统地址寄存器包括全局描述符表寄存器(GDTR,global descriptor table register)、局部描述符表寄存器(LDTR,local descriptor table register)、中断描述符表寄存器(IDTR,interrupt descriptor table register)和任务寄存器(TR,task register)。这些寄存器都是程序不可见的寄存器。80486微处理器系统地址寄存器如图2.14所示。
图2.14 80486微处理器系统地址寄存器
系统地址寄存器和段寄存器一起,为操作系统完成内存管理、多任务环境、任务保护提供硬件支持。
① GDTR是一个48位的寄存器,在存储器中定义了一个全局描述表(GDT,global descriptor table)。GDTR用来存放全局描述符表GDT的32位基地址和16位段限值。16位段限值规定了全局描述符表GDT的大小(按字节计算)。段限值要比表的实际值小1。例如,如果表长为256个字节,那么,段限值等于00FFH。GDTR中的32位基地址,指示GDT在存储器中的起始地址。
② IDTR是一个48位的寄存器,与GDTR一样,在存储器中定义了一个中断描述符表IDT(interrupt descriptor table)。IDTR用来存放中断描述符表IDT的32位基地址和16位段限值。80486微处理器为每个中断定义了一个中断描述符,所有的中断描述符集中存放在中断描述符表IDT中,IDTR指出中断描述符表IDT在内存中的位置。
③ LDTR是一个80位的寄存器,由16位段选择符(程序可见部分)和64位描述符(程序不可见部分)组成,用于保存局部描述符表(LDT,local descriptor table)的32位基地址、16位段限值和16位访问权限等。
④ TR是一个80位的寄存器,由16位段选择符和64位描述符组成,提供任务状态段(TSS,task-state segment)在内存中的位置。在微机中,任务通常就是程序的进程或应用程序。任务状态寄存器完成任务的切换。任务切换允许微处理器在足够短的时间内实现任务之间的切换,也允许多任务系统以简单而规则的方式,从一个任务切换到另一个任务。
(2)控制寄存器(CR,control registers)
80486微处理器中有4个32位控制寄存器CR0~CR3,用来保存全局性与任务无关的机器状态。其中,CR1为与后续的Intel CPU兼容而保留,CR2中存放页故障的线性地址。下面对CR0、CR3的格式及功能进行说明。
① 控制寄存器CR0
CR0中包含系统操作模式控制位和系统状态控制位,共定义了11位,如图2.15所示。
图2.15 80486微处理器控制寄存器CR0
PE(protection enable):保护模式允许位。PE=1,系统在保护模式下运行;PE=0,系统在实地址模式下运行。
MP(monitor coprocessor):监视协处理器位。MP=1,表示系统中有一个协处理器;否则MP=0。
EM(emulation):仿真协处理器位。EM=1,表示微处理器中没有仿真协处理器;否则EM=0。
TS(task switched):任务转换位。每次任务转换操作完成时,主处理器都自动将TS位置1。在执行浮点运算指令时,需要对该位进行测试。
ET(extension type):协处理器类型标志,用于指示系统中协处理器的类型。ET=1,表示系统使用与80387兼容的32位协处理器。
NE(numeric error):数值异常位。控制浮点运算中未被屏蔽的异常事故。NE=1,允许报告浮点数值异常。当NE=0,且输入引脚的信号有效时,则忽略数值异常;当NE=0,且输入引脚的信号无效时,将导致处理器停止工作,产生系统外部中断。
WP(write protect):写保护。WP=1,表示禁止系统对用户级只读页的访问,实行写保护;WP=0,允许系统对用户级只读页进行访问。
AM(alignment mask):对齐标志位。AM=1,允许自动对齐检查;AM=0,不允许。
NW(not write-through):不通写位。当NW=0,CD=0时,允许对命中的Cache进行通写,这是Cache工作的必要条件;当NW=1,CD=1时,不允许通写。
CD(cache disable):允许Cache位。当CD=0时,系统内部的Cache允许使用。当CD=1时,若访问Cache“脱靶”,则不填充Cache;但是,若访问Cache“命中”,则Cache仍可正常工作。若要完全使Cache停止工作,则必须刷新Cache。
PG(paging):允许分页位。PG位用来指示分页管理机构是否进行工作。PG=1,分页管理机构工作,允许分页;PG=0,分页管理机构不工作。
② 控制寄存器CR3
CR3为CPU提供当前任务的页目录表地址。只有当CR0中的PG=1时,才能使用CR3,其中高20位存放页目录表的物理基地址。CR3中的PCD和PWT位仅对80486微处理器有效。控制寄存器CR3如图2.16所示。
图2.16 80486微处理器控制寄存器CR3
PWT(page-level writes transparent):页级通写位。对内部Cache而言,PWT控制现行页目录下某些Cache页回写,某些Cache页通写。PWT=1,Cache页进行通写;PWT=0,Cache页进行回写。PWT位驱动PWT引脚,以控制内部Cache通写或回写。
PCD(page-level cache disable):禁止页高速缓冲位。PCD=1,对页目录不进行高速缓存;PCD=0,进行高速缓存。PCD位驱动PCD引脚控制外部Cache是否工作。
3.调试寄存器和测试寄存器(debug and test registers)
80486微处理器提供了8个32位可编程调试寄存器DR0~DR7和8个32位可编程测试寄存器TR0~TR7,用于支持系统的调试功能。
(1)调试寄存器(DR,debug registers)
8个32位的可编程调试寄存器DR0~DR7,用来支持系统的Debug调试功能。DR0~DR3为断点寄存器,用来存放断点的线性地址,各个断点的发生条件可由调试寄存器DR7分别设定;DR4、DR5保留未用;DR6是调试状态寄存器,用来说明是哪一种性质的断点及断点异常是否发生;DR7为断点控制寄存器,指明断点发生的条件及断点的类型。8个调试寄存器如图2.17所示。
图2.17 80486微处理器调试寄存器
① 调试控制寄存器(debug control register)DR7
DR7用于指示中断发生的条件及断点的类型。
L3~L0(local breakpoint enable flags):局部断点使能标志位。当Li(i=0~3)为1时,表示i号断点局部允许使用,断点仅在某一任务内发生,Li位在任务转换时清0。若要使某个断点在某个任务中有效,则该任务在TSS中的T位应置为1;此后,在任务转换取得CPU控制权时发生异常,可在其处理程序中将Li位置1,以保证该断点在此任务内有效。
G3~G0(global breakpoint enable flags):全局断点使能标志位。当Gi(i=0~3)为1时,表示i号断点全局允许使用,无论是操作系统还是某一任务,只要满足条件便会产生中断。
LE和GE(local and global exact breakpoint enable flags):局部断点、全局断点类型标志位。当LE=1,GE=1时,表示全局断点或局部断点为精明断点。精明断点为立即报告的断点。非精明断点为可以隔若干条指令后再报告或不报告的断点。
GD(general detect enable flag):调试寄存器保护标志位。当GD=1时,调试寄存器处于保护状态,并产生中断。
R/W3~R/W0(read/Write fields):发生中断时系统读/写标志位。R/W3~R/W0分别指示L3~L0局部断点和G3~G0全局断点发生中断时,系统在进行何种操作。
LEN3~LEN0(length fields):断点地址存放的数据长度。LEN3~LEN0分别指示断点地址寄存器DR3~DR0在存储器中存放的情况。
② 调试状态寄存器(debug status register)DR6
DR6指示调试程序时异常发生的原因,当调试异常发生时,DR6的有关位自动置1。为避免在识别各种调试异常时的混乱,调试服务程序返回前应复位DR6。
B3~B0(breakpoint condition detected flags):断点异常发生指示位。当Bi(i=0~3)为1时,表示对应断点的异常已经发生。
BD(debug register access detected flag):调试寄存器处理检测位。当BD=1时,表明下一条指令将读/写调试寄存器。
BS(single step flag):单步异常标志位。当BS=1时,表示异常是由标志寄存器中TF=1时单步自陷引起的。
BT(task switch flag):任务转换标志位。当BT=1时,表示因为转换而发生异常。
这些调试寄存器给80486微处理器带来了先进的调试功能,如设置数据断点、代码断点(包括ROM断点)和对任务转换进行调试。
(2)测试寄存器TR
80486微处理器提供了5个32位测试寄存器(test registers)TR3~TR7,用于存放测试控制命令。其中,TR3、TR4和TR5用于高速缓存Cache的测试,TR6和TR7用于转换后援缓冲器TLB的测试。
4.浮点寄存器(floating-point registers)
80486微处理器包括8个80位通用寄存器,两个48位寄存器(指令指针寄存器和数据指针寄存器),三个16位寄存器(控制寄存器、状态寄存器和标志寄存器)。这些寄存器主要用于浮点运算。以上寄存器在80486微处理器不同工作模式下的应用情况见表2.5。
表2.5 80486微处理器寄存器在不同工作模式下的应用情况表
2.2.3 Intel 80486微处理器引脚信号及功能
80486微处理器采用PGA封装形式,共有168个引脚,其中包括30个地址引脚、32个数据引脚、35个控制引脚、24个VCC引脚、28个VSS引脚和19个空脚。80486微处理器引脚信号如图2.18所示。
图2.18 80486微处理器引脚信号
1.时钟信号
CLK(clock):时钟信号,为CPU提供基本的定时信号和工作频率。
2.地址总线(address bus)
A31~A2(address lines):32位地址总线,三态,输出。
(byte enable):字节允许信号,低电平有效。
A31~A2与构成32位地址总线,可寻址4GB的内存空间和64KB的I/O空间。4GB的内存空间分为4个1GB的存储体,每个存储体分别由字节允许信号选通。当(i=0~3)有效时,选择相应的存储体,然后由A31~A2选择相应的字节进行读/写操作。寻址I/O空间时,只有A15~A2和(i=0~3)有效,寻址64KB的I/O空间。
3.数据总线(data bus)
D31~D0(data lines):32位双向数据总线,可以传输8位、16位和32位数据。
4.数据奇偶校验(data parity)
DP3~DP0(data parity):数据奇偶校验信号,双向。DP3~DP0分别对应32位数据中字节3至字节0的校验位。
(parity check):奇偶校验状态信号,输出,低电平有效。当低电平时,表示CPU在上一个读周期采样的数据奇偶校验出错。
5.数据总线宽度控制(bus size control)
(bus size 8):8位数据总线宽度定义信号,输入,低电平有效。当为低电平时,规定数据总线中只有8位是有效的,支持8位数据传输。
(bus size 16):16位数据总线宽度定义信号,输入,低电平有效。当为低电平时,规定数据总线中只有16位是有效的,支持16位数据传输。
6.总线周期定义(bus cycle definition)
(write/read):读/写信号,输出。,表示写周期;,表示读周期。
(memory/input-output):存储器或I/O访问信号引脚,输出。,表示访问存储器;,表示访问I/O端口。
(data/control):数据/控制信号,输出。,表示数据传输周期;。表示指令代码传输周期。以上三个信号所指示的系统操作见表2.6。
表2.6 总线周期编码表
(bus lock):总线锁定信号,输出,低电平有效。当为低电平时,表示当前的总线周期被锁定,此时,80486 CPU独占系统总线。该信号由LOCK指令前缀设置或存储器操作时自动锁定。
(pseudo-lock):伪锁定信号,输出,低电平有效。当为低电平时,表示CPU需要多个总线周期才能完成传输。
7.总线控制(bus control)
(address strobe):地址选通信号,输出,低电平有效。当为低电平时,表明地址总线上输出的地址有效。
(non-burst ready):准备就绪信号,输入,低电平有效。当为低电平时,指示现行总线周期已经完成。
8.突发控制(burst control)
(burst ready):突发传送就绪信号,输入,低电平有效。其作用与相同。由信号结束的周期称为突发周期。突发传送是指两个设备之间不间断的连续数据传送方式。在突发传送时,一次数据传送只需要一个时钟周期,而不是通常的两个时钟周期。
(burst last):突发传送结束信号,输出,低电平有效。当为低电平时,表示下一个信号输入时,突发周期结束。
9.中断控制(interrupts)
RESET(reset):复位信号,输入,高电平有效。当RESET有效时,系统复位。系统复位后,内部寄存器的值见表2.7。
表2.7 系统复位后内部寄存器的值
INTR(maskable interrupt):可屏蔽中断请求信号,输入,高电平有效。当INTR有效时,表明外部有可屏蔽中断请求信号输入。
NMI(non-maskable interrupt):非屏蔽中断请求信号,输入,上升沿有效。当NMI有效时,表明外部有非屏蔽中断请求信号输入。
10.总线仲裁(bus arbitration)
HOLD(bus hold request):总线请求信号,输入,高电平有效。HOLD信号由另一个总线主控设备产生,请求CPU让出对总线的控制权。
HLDA(hold acknowledge):总线请求响应信号,输出,高电平有效。HLDA信号是对HOLD信号的应答,当HLDA为高电平时,表示CPU已让出对总线的控制权。
BREQ(bus request):内部总线请求信号,输出,高电平有效。当BREQ为高电平时,表明CPU内部提出一个总线请求,此时CPU正在控制总线。
(back off):强制CPU放弃系统总线信号,输入,低电平有效。当CPU接收到该信号时,便立即放弃对系统总线的控制权,并使其所有引脚处于浮空状态。
11.高速缓存无效(cache invalidation)
AHOLD(address hold):地址保持请求信号,输入,高电平有效。AHOLD信号决定地址线A31~A4是否接受地址输入。此信号在高速缓存无效周期时有效。
(external address):外部地址有效信号,输入,低电平有效。当为低电平有效,表示地址总线上的地址信号有效。CPU将其读入后,在片内Cache中寻找该地址,若找到,则执行Cache行无效周期,使片内Cache中的该行数据无效。
12.页面高速缓存控制(page cache ability)
PWT(page write-through):页面通写控制信号,输出,高电平有效。当PWT为高电平时,规定当前Cache页为通写方式;当PWT为低电平时,规定当前Cache页为回写方式。由于80486微处理器片内Cache规定为通写方式,因此PWT信号只对外部Cache有效。它反映CR3、页目录项或页表项中PWT位的状态。
PCD(page cache disable):页面高速缓存禁止信号,输出,高电平有效。当PCD为高电平时,禁止在Cache页面中进行缓存;当PCD为低电平时,允许Cache页面进行缓存。它反映CR3、页目录项或页表项中PCD位的状态。
13.高速缓存控制(cache control)
(cache enable):高速缓存允许信号,输入,低电平有效。信号用来决定当前Cache周期是否有效。当信号有效时,CPU执行Cache行填充周期。
(cache flush):高速缓存清除信号,输入,低电平有效。信号有效时,强制CPU对片内数据Cache进行大清除,回写所有修改的行,使其全无效。
14.地址屏蔽(address mask)
(address bit 20 mask):第20位地址屏蔽信号,输入,低电平有效。当有效时,将屏蔽A20及以上地址,使8048微处理器仿真808微处理器的1MB存储器地址。只有CPU工作在实地址模式下,才有意义。
2.2.4 Intel 80486微处理器的存储器组织及输入/输出结构
1.存储器组织与I/O结构
80486微处理器有32条地址总线,可寻址232=4GB的存储器空间,地址范围为00000000H~FFFFFFFFH。32条地址总线中的低16位地址用于对64K I/O端口的寻址,地址范围为0000H~FFFFH。80486微处理器存储器与I/O地址空间如图2.19所示。
图2.19 80486微处理器存储器与I/O地址空间
2.存储器寻址
80486 CPU的地址总线A31~A2与字节允许信号共同形成32位地址,可寻址4GB的存储器空间。由80486微处理器引脚图可以发现,地址总线中没有A1和A0这两条地址线,其实是,在CPU内部利用A1和A0这两条地址线经译码,产生了字节允许信号。地址总线A31~A2与字节允许信号的作用见表2.8。字节允许信号与32位数据总线对应情况见表2.9。
表2.8 A31~A2与的作用
表2.9 与数据总线对应情况表
由于80486微处理器的数据总线为32位,所以存储器和I/O地址空间都是针对32位数据宽度来组织的,如图2.20所示。
图2.20 80486微处理器存储器组织
2.2.5 Intel 80486微处理器的工作模式
从操作系统的角度看,Intel 80486微处理器有三种工作模式:实地址模式、保护模式和虚拟8086模式。当微处理器复位后,系统自动进入实地址模式。通过设置控制寄存器CR0中的保护模式允许位PE,可以进行实地址模式和保护模式之间的转换。执行IRET指令或进行任务切换,可由保护模式转移到虚拟8086模式。
虚拟8086模式是一种既有保护功能又能执行16位微处理器软件的工作方式。虚拟8086模式的工作原理与保护模式相同,但程序指定的逻辑地址与8086微处理器相同。虚拟8086模式可以看作保护模式的一种子方式。
1.实地址模式(real mode)
实地址模式是最基本的工作模式。实地址模式与16位微处理器8086/8088的实地址模式保持兼容,原有16位微处理器的程序不加任何修改就可以在80486微处理器实地址模式下运行。80486微处理器的实地址模式具有更强的功能,增加了寄存器,扩充了指令,可进行32位操作。
8088/8086只能工作于实地址模式,80286及其以上的微处理器可工作于实地址模式、保护模式和虚拟8086模式。
实地址模式操作方式只允许微处理器寻址第一个1MB存储器空间,存储器中第一个1MB存储单元称为实地址模式存储器或常规内存。DOS操作系统要求微处理器工作于实地址模式。当80486微处理器工作于实地址模式时,存储器的管理方式与8086微处理器存储器的管理方式完全相同,这里不再赘述。
2.保护模式(protected virtual address mode/protected mode)
通常在程序运行过程中,应防止以下情况的发生:
① 应用程序破坏系统程序;
② 某一应用程序破坏了其他应用程序;
③ 错误地把数据当作程序运行。
为了避免以上情形的发生,所采取的措施称作“保护”。
保护模式的特点是引入虚拟存储器的概念,同时可使用附加的指令集,所以80486微处理器支持多任务操作。在保护模式下,80486微处理器可访问的物理存储空间为4GB(232),程序可用的虚拟存储空间为64TB(246)。
在保护模式下,存储器寻址(80286及其以上的微处理器)允许访问第一个1MB及其以上的存储器内的数据和程序。寻址这个扩展的存储器段,需要更改用于实地址模式存储器寻址的段基址加偏移地址的机制。
在保护模式下,当寻址扩展内存中的数据和程序时,仍然使用偏移地址访问位于存储器段内的信息。与实地址模式的区别是:实地址模式下的段基址由段寄存器提供;而在保护模式下,段寄存器里存放着一个选择符(selector),用于选择描述符表内的一个描述符(descriptor)。描述符描述存储器段的位置、长度和访问权限。由于段基址加偏移地址仍然用于访问第一个1MB存储器内的数据,因此保护模式下的指令和实地址模式下的指令完全相同。
保护模式和实地址模式的不同之处在于存储器地址空间的扩大(由1MB扩展到4GB),以及存储器管理机制的不同。
3.虚拟8086模式(virtual 8086 mode)
80486微处理器允许在实地址模式和虚拟8086模式下执行8086的应用程序。虚拟8086模式为系统设计人员提供了80486微处理器保护模式的全部功能,因而具有更大的灵活性。有了虚拟8086模式,80486微处理器不仅可以执行80486微处理器操作系统及其应用程序,同时还可以执行8086微处理器操作系统及其应用程序。在一台多用户的80486微处理器的计算机中,多个用户可以同时使用计算机。
在虚拟8086模式下,允许以实地址模式相同的形式应用段寄存器,形成现行基地址。通过使用分页功能,就可以把虚拟8086模式下的1MB地址空间映射到80486微处理器的4GB的物理空间中的任何位置。
2.2.6 Intel 80486微处理器总线操作
1.总线
总线是计算机各部件之间传递信息的通道,按其作用不同,分为以下三类。
① 内部总线:CPU芯片与其他芯片之间的连线。
② 系统总线:各集成电路板之间的连线。
③ 外部总线:微机系统与其他设备之间的连线。
2.总线操作
微机系统各部件之间的信息交换是通过总线操作周期完成的,一个总线周期通常分为以下4个阶段。
① 总线请求和仲裁阶段:当有多个模块提出总线请求时,必须由仲裁机构仲裁,以确定将总线的使用权分配给哪个模块。
② 寻址阶段:取得总线控制权的模块即主模块,经总线发出本次要访问的存储器或I/O端口的地址和相关命令。
③ 数据传送阶段:主模块与其他模块之间进行数据传送。
④ 结束阶段:主模块将有关信息从总线上撤除,主模块交出对总线的控制权。
3.时钟周期、总线周期和指令周期
① 时钟周期:CPU执行指令的最小时间单位,又称T状态。它通常与微机的主频有关。
② 总线周期:CPU对存储器或I/O端口完成一次读/写操作所需的时间。例如,8086微处理器的基本总线周期由4个时钟周期T1~T4组成,而80486微处理器的基本总线周期由T1和T2两个时钟周期组成。当外设速度较慢时,可插入等待周期Tw。
③ 指令周期:CPU执行一条指令所需要的时间。指令周期由若干个总线周期组成,不同指令执行的时间不同。同一功能的指令,当寻址方式不同时,所需要的时间也不同。
CPU执行不同指令时,时间有很大的差别,但每条指令都有各自固定的时序,大多数指令由存储器读/写、I/O端口读/写、中断响应等基本的总线周期组成。