80486是Intel公司1989年推出的32位
微处理器。
设备介绍
它采用了1
μm(微米)
制造工艺,内部集成了120万个
晶体管。内外部数据总线是32位,
地址总线为32位,可寻址4GB的
存储空间,支持虚拟存储管理技术,
虚拟存储空间为64TB。片内集成有
浮点运算部件和8KB的cache(L1 cache),同时也支持外部cache(L2 cache)。整数处理部件采用
精简指令集RISC结构,提高了指令的执行速度。此外,80486微处理器还引进了时钟
倍频技术和新的内部总线结构,从而使主频可以超出100MHz。
内部结构
80486 CPU内部包括
总线接口部件、
指令预取部件、指令
译码部件、控制和保护测试单元部件、整数
执行部件、分段部件、分页部件,以及
浮点运算部件和
高速缓存(cache)管理部件。
1.总线接口部件:
总线接口部件(BIU)与外部总线连接,用于管理访问外部
存储器和I/O端口的地址、数据和
控制总线。对处理器内部,BIU主要与指令预取部件和高速缓存部件交换信息,将
预取指令存入
指令代码队列。
BIU与cache部件交换数据有三种情况:一是向高速缓冲存储器填充数据,BIU一次从片外总线读取16个字节到cache;二是如果高速缓冲存储器的内容被处理器内部操作修改了,则修改的内容也由BIU写回到
外部存储器中去;三是如果一个
读操作请求所要访问的存储器
操作数不在
高速缓冲存储器中,则这个读操作便由BIU控制总线直接对外部存储器进行操作。
在预取指令代码时,BIU把从外部存储器取出的指令代码同时传送给代码预取部件和内部高速缓冲存储器,以便在下一次预取相同的指令时,可
直接访问高速缓冲存储器。
80486 CPU内部有一个32字节的指令预取队列,在总线空闲周期,指令预取部件(
pre-fetcher)形成
存储器地址,并向BIU发出
预取指令请求。预取部件一次读取16个字节的指令代码存入预取队列中,指令队列遵循先进先出
FIFO(first in first out)的规则,自动地向输出端移动。如果cache在指令预取时命中,则不产生总线周期。当遇到跳转、中断、
子程序调用等操作时,预取队列被清空。
指令译码部件
IDU(instruction decode unit)从
指令预取队列中读取指令并译码,将其转换成相应
控制信号。译码过程分两步:首先确定指令执行时是否需要访问
存储器,若需要则立即产生总线访问周期,使存储器
操作数在指令译码后能准备好;然后产生对其他部件的控制信号。
4.控制和保护测试单元部件:
控制部件CPTU(control and protection test unit)对整数执行部件、
浮点运算部件和分段管理部件进行控制,使它们执行已译码的指令。
5.整数执行部件:
整数执行部件IU(
integer data-path unit)包括四个32位
通用寄存器、两个32位间址寄存器、两个32位指针寄存器、一个
标志寄存器、一个64位桶形
移位寄存器和算术逻辑
运算单元等。它能在一个
时钟周期内完成整数的传送、加减运算、
逻辑操作等。80486 CPU采用了
RISC技术,并将
微程序逻辑控制改为硬件布线逻辑控制,缩短了指令的译码和执行时间,一些基本指令可在一个时钟周期内完成。
两组32位
双向总线将整数单元和
浮点单元联系起来,这些总线合起来可以传送64位操作数。这组总线还将
处理器单元与cache联系起来,通用寄存器的内容通过这组总线传向分段单元,并用于产生存储器单元的
有效地址。
80486 CPU内部集成了一个增强型80487
数学协处理器,称为浮点运算部件
FPU(floating point unit),用于完成
浮点数运算。由于FPU与CPU集成封装在一个芯片内,而且它与CPU之间的数据通道是64位的,所以当它在内部
寄存器和片内Cache取数时,
运行速度会极大提高。
7.分段部件和分页部件:
80486 CPU设置了分段部件SU(segmentation unit)和分页部件PU(
paging unit),实现存储器保护和
虚拟存储器管理。分段部件将逻辑
地址转换成
线性地址,采用分段cache可以提高转换速度。分页部件用来完成
虚拟存储,把分段部件形成的线性地址进行分页,转换成
物理地址。为提高页转换速度,分页部件中还集成了一个转换后援
缓冲器TLB(the translation look-aside buffer)。
8.Cache管理部件:
80486 CPU内部集成了一个数据/指令混合型cache称为
高速缓冲存储器管理部件
CU(cache unit)。在绝大多数的情况下,CPU都能在片内cache中存取数据和指令,减少了CPU的访问时间。在与80486
DX配套的主板设计中,采用128KB~256KB的大容量二级cache来提高cache的
命中率,片内cache(L1 cache)与片外cache(L2 cache)合起来的命中率可达98%。CPU片内总线宽度高达128位,
总线接口部件将以一次16个字节的方式在cache和内存之间传输数据,大大提高了数据处理速度。80486 CPU中的cache部件与
指令预取部件紧密配合,一旦预取代码未在cache中命中,BIU就对cache进行填充,从内存中取出指令代码,同时送给cache部件和指令预取部件。
寄存器
按功能可分为四类:基本
寄存器、系统寄存器、调试和测试寄存器以及
浮点寄存器。
80486
CPU的寄存器总体上可分为程序可见和不可见两类。在程序设计期间要使用的、并可由指令来修改其内容的寄存器,称为程序可见寄存器。在程序设计期间,不能
直接寻址的寄存器,称为程序不可见寄存器,但是在程序设计期间可以被
间接引用。程序不可见寄存器用于
保护模式下控制和操作
存储器系统。
1.基本寄存器(base architecture registers)
基本寄存器包括八个
通用寄存器EAX,
EBX, ECX, EDX,
EBP,
ESP,
EDI,
ESI;一个
指令指针寄存器EIP;六个
段寄存器CS,
DS, ES, SS, FS和GS;一个
标志寄存器EFLAGS。80486 CPU的基本寄存器如图2.11所示,它们都是程序可见寄存器。
(1)通用寄存器(general purpose registers)
通用寄存器包括EAX, EBX, ECX, EDX, EBP, ESP, EDI和ESI。
EAX, EBX, ECX, EDX都可以作为32位
寄存器、16位寄存器或者8位寄存器使用。EAX可作为
累加器用于乘法、除法及一些调整指令,对于这些指令,累加器常表现为隐含形式。EAX寄存器也可以保存被访问
存储器单元的
偏移地址。EBX常用于地址指针,保存被访问存储器单元的偏移地址。ECX经常用作
计数器,用于
保存指令的
计数值。ECX寄存器也可以保存访问数据所在存储器单元的偏移地址。用于计数的指令包括重复的串指令、
移位指令和循环指令。移位指令用CL计数,重复的串指令用CX计数,循环指令用CX或ECX计数。EDX常与EAX配合,用于保存乘法形成的部分结果,或者除法操作前的
被除数,它还可以保存寻址存储器数据。
EBP和E
SP是32位寄存器,也可作为16位寄存器BP, SP使用,常用于椎栈操作。EDI和ESI常用于串操作,EDI用于寻址目标数据串,ESI用于寻址源数据串。
(2)指令指针寄存器
指令指针寄存器E
IP(extra instruction pointer)存放指令的
偏移地址。
微处理器工作于
实模式下,EIP是IP(16位)寄存器。80486 CPU工作于保护模式时EIP为32位寄存器。EIP总是指向程序的下一条指令(即EIP的内容自动加1,指向下一个
存储单元)。EIP用于微处理器在程序中顺序地
寻址
代码段内的下一条指令。当遇到
跳转指令或调用指令时,指令指针寄存器的内容需要修改。
EFR(extra flags register)包括状态位、控制位和系统标志位,用于指示
微处理器的状态并控制微处理器的操作。80486 CPU标志寄存器如图2.12所示。
① 状态标志位:包括进位标志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这四种特权级,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):队列检查标志。如果在不是字或双字的边界上寻址一个字或双字,队列检查标志将被激活。
80486
微处理器包括六个段寄存器,分别存放
段基址(
实地址模式)或
选择符(保护模式),用于与微处理器中的其他寄存器联合生成
存储器单元的
物理地址。存器结构
① 代码段寄存器CS。
代码段是一个用于保存微处理器程序代码(程序和过程)的
存储区域。CS存放代码段的起始地址。在实模式下,它定义一个64KB存储器段的起点。在保护模式下工作时,它选择一个描述符,这个描述符描述程序代码所在存储器单元的起始地址和长度。在保护模式下,代码段的长度为4GB。
② 数据段寄存器DS。
数据段是一个
存储数据的
存储区域,程序中使用的大部分
数据都在数据段中。DS用于存放数据段的起始地址。可以通过
偏移地址或者其他含有偏移地址的寄存器,寻址数据段内的数据。在实模式下工作时,它定义一个64KB数据
存储器段的起点。在保护模式下,数据段的长度为4GB。
③ 堆栈
段寄存器。堆栈段寄存器SS用于存放堆栈段的起始地址,
堆栈指针寄存器ESP确定堆栈段内当前的入口地址。EBP
寄存器也可以寻址
堆栈段内的数据。
④ 附加段寄存器ES。ES存放附加数据段的起始地址。常用于存放数据段的段基址或者在串操作中作为目标数据段的段基址。
⑤ 附加段寄存器FS和GS。FS和GS是附加的数据
段寄存器,作用与ES相同,以便允许程序访问两个附加的数据段。
在保护模式下,每个段寄存器都含有一个程序不可见区域。这些寄存器的程序不可见区域通常称为描述符的
高速缓冲存储器(descriptor cache),因此它也是
存储信息的小存储器。这些描述符高速缓冲存储器与微处理器中的一级或二级高速缓冲存储器不能混淆。每当段寄存器中的内容改变时,基地址、段限和
访问权限就装入段寄存器的程序不可见区域。例如当一个新的段基址存入段寄存器时,微处理器就访问一个
描述符表,并把描述符表装入段寄存器的程序不可见的描述符高速缓冲存储器区域内。这个描述符一直保存在此处,并在访问
存储器时使用,直到段号再次改变。这就允许
微处理器在重复访问一个内存段时,不必每次都去查询描述符表,因此称为描述符
高速缓冲存储器。