INTEL8086/8088CPU

来源:互联网 发布:sai绘画软件官网 编辑:程序博客网 时间:2024/06/17 04:37

§2-1  INTEL8086/8088CPU的内部结构

1、建立4字节的指令预取队列
在以前的8位微处理器中,CPU的工作过程是这样的:通过总线从存贮器中取出一条指令,然后执行该指令。在这种工作方式中,总线的利用率是很低的。例如CPU执行一条INC A指令。CPU从存贮器中取出INC A指令操作码之后,在该指令执行过程中,只对内部寄存器进行操作,外部的总线是空闲的。
为此在8088微处理器中,设置了一个4字节的指令预取队列,CPU要执行的指令是从队列中取得的,而取指令的操作是由总线接口单元承担的。以此将取指令和执行指令这两个操作分别由两个独立的功能单元来完成。一旦总线接口单元发现队列中有两个字节以上的空位置时,就会自动地到存贮器中去取两个指令代码填充到指令预取阶队列中。这样,8088微处理器取指令和执行指令就可以并行进行(如图2-1(b)所示),从而提高了微处理器的指令执行速度,并使得总线利用率有了明显的提高。
2、设立地址段寄存器
8088微处理器内部的地址线只有16位,因此能够由ALU提供的最大地址空间只能为64KB。为了扩大8088的地址宽度,人们将存贮器的空间分成若干段,每段为64KB。另外,在微处理器中还设立一些段寄存器,用来存放段的直始地址(16位)。8088微处理器实际地址是由段地址和CPU提供的16位偏移地址,按一定规律相加而形成的20位地址(A0~A19),
从而使8088微处理器的地址空间扩大到1MB。
3、在结构上和指令设置方面支持多微处理器系统
众所周知,利用8088的指令系统进行复杂的运算,如多字节的浮点运算,超越函数的运算等,往往是很费时间的。为了弥补这一缺陷,人们开发了专门用于浮点运算的协处理器8087。将8088和8087结合起来,就可以组成运算速度很高的处理单元。为此,8088在结构上和指令方面都已考虑了能与8087相连接的措施。

§2-1-1  8088CPU的内部结构

8088微处理器内部分为两个部分:执行单元(EU)和总线接口单元(BIU),如图2-2所示。
EU单元负责指令的执行。它包括ALU(运算器)、通用寄存器和状态寄存器等,主要进行16位的各种运算及有效地址的计算。
BIU单元负责与存贮器和I/O设备的接口。它由段寄存器、指令指针、地址加法器和指令队列缓冲器组成。地址加法器将段和偏移地址相加,生成20位的物理地址。

§2-1-2  8088处理器中的内部寄存器

在8088处理器中,用户能用指令改变其内容的,主要是一组内部寄存器。
(1)数据寄存器
8088有4个16位的数据寄存器,可以存放16位的操作数。其中AX为累加器,其他3个尽管也可以存放16位操作数,但它们的用途都有区别。4个16位的寄存器在需要时,可分为8个8位寄存器来用,这样就大大增加了使用的灵活性。
(2)指针寄存器
8088的指针寄存器有两个:SP和BP。SP是堆栈指针寄存器,由它和堆栈段寄存器一起来确定堆栈在内存中的位置。BP是基数指针寄存器,通常用于存放基地址,以使8088的寻址更加灵活。
(3)变址寄存器
SI是源变址寄存器,DI是目的变址寄存器,都用于指令的变址寻址。顾名思义,SI通常指向源操作数,DI通常指向目的操作数。
(4)控制寄存器
8088的控制寄存器有两个:IP,PSW。IP是指令指针寄存器,用来控制CPU的指令执行顺序。它和代码段寄存器CS一起可以确定当前所要取的指令的内存地址。顺序执行程序时,CPU每取一个指令字节,IP自动加1,指向下一个要读取的字节。当IP单独改变时,会发生段内转移。当CS和IP同时改变时,会产生段间的程序转移。
PSW是处理机状态字,也有人叫它为状态寄存器或标志寄存器,用来存放8088CPU在工作过程中的状态。PSW各位标志如图2-4所示。
15                                                                    0

 
 
 
 
O
D
I
T
S
Z
 
A
 
P
 
C

图2-4 状态寄存器
状态标志寄存器是一个16位的寄存器,空着的各位暂未使用。8088中所用的9位对我们了解8088CPU的工作和用汇编语言编写程序是很重要的。这些标志位的含义如下:
l         C——进位标志位。做加法时出现进位或做减法时出现错位,该标志位置1;否则清0。
l         P——奇偶标志位。当结果的低8位中1的个数为偶数时,则该标志位置1;否则清0。
l         A——半加标志位。在加法时,当位3需向位4进位,或在减法时位3需向位4借位时,该标志位就置1;否则清0。该标志位通常用于对BCD算术逻辑结果的调整。
l         Z——零标志位。运算结果各位都为0时,该标志位置1;否则清0。
l         S——符号标志位。当运算结果的最高位为1,该标志位置1;否则清0。
l         T——陷阱标志位(单步标志位)。当该位置1时,将使8088进入单步指令工作方式。在每条指令开始执行以前,CPU总是先测试T标志位是否为1。如果为1,那么在本指令执行后将产生陷阱中断,从而执行陷阱中断处理程序。该程序的首地址由内存的00004H~00007H4个单元提供。该标志通常用于程序的调试。例如,在系统调试软件DEBUG中的T命令,就是利用它来进行程序的单步跟踪的。
l         I——中断允许标志位。如果该位置1,则处理器可以响应可屏蔽中断;否则就不能响应可屏蔽中断。
l         D——方向标志位。当该位置1时,串操作指令为自动减量指令,即从高地址到低地址处理字符串;否则串操作指令为自动增量指令。
l         O——溢出标志位。在算术运算中,带符号的数的运算结果超出了8位或16位带符号数所能表达的范围时,即字节运算大于+127或小于-128时,字运算大于+32767或小于-32768时,该标志位置位。
(5)段寄存器
8088微处理器具有4个段寄存器:代码段寄存器CS、数据寄存器DS、堆栈段寄存器SS和附加段寄存器ES。这些段寄存器的内容与有效的地址偏移量一起可确定内存的物理地址。通常CS划定并控制程序区,DS和ES控制数据区,SS控制堆栈区。

§2-2  8088/8086 CPU的工作方式

8088 CPU是一块具有40条引出线的集成电路芯片。为了减少芯片的引线,有许多引线具有双重定义和功能,采用分时复用方式工作,即在不同时刻,这些引线上的信号是不相同的。同时,8088CPU上的MN/MX=1时,8088CPU工作在最小模式之下。此时,构成的微型机中只包括一个8088CPU,且系统总线由CPU的引线形成,微型机所用的芯片最少。当MN/MX=0时,8088CPU工作在最大模式之下。在此模式下,构成的微型计算机中除了有8088CPU之外,还可以接另外的CPU(如8087),构成多微处理器系统。同时,这时的系统总线要由8088CPU的引线和总线控制器(8288)共同形成,可以构成更大规模的系统。

§2-2-3  存贮器寻址

1、由段寄存器、段偏移地址确定物理地址

在本节开始我们已经提到,8088可以具有1MB的内存空间,可是内部寄存器都只有16位,很显然,不采取特殊措施,是不能寻址1MB存贮空间的。为此,我们引入了分段的概念。每个段具有64KB的存贮空间。该段内的物理地址由16位的段寄存器内容和16位的地址偏移量来确定。如图2-6的示,20位的物理地址是这样产生的:

  物理地址=段寄存器的内容×16+偏移地址

段寄存器的内容×16(相当于左移4位)变为20位,再在低端16位上加上16位的偏移地址(也叫做有效地址),便可得到20位的物理地址。16位的偏移地址有多种产生方法,在下一章中再详细说明。这里仅以8088CPU复位后如何形成启动地址为例,说明物理地址的计算方法。表2-3中已经表明,复位时CS的内容为FFFFHIP的内容为0000H。复位后的启动地址由CS段寄存器和IP的内容(作为偏移量)共同决定,即:

启动地址=CS×16+IP=FFFF0H+0000H=FFFF0H

2、段寄存器的使用

段寄存器的设立不仅使8088的存贮空间扩大到1MB,而且为信息按特征分段存贮带来了方便。在存贮器中,信息按特征可分为程序代码、数据、微处理器状态等。为了操作方便,存贮器可以相应地划分为:程序区,用来存放程序的指令代码;数据区,用来存放原始数据,中间结果和最后运算结果;堆栈区,用来存放压入堆栈的数据和状态信息。只要修改段寄存器的内容,就可将相应的存放区设置在存贮器的任何位置上。这些区域可以通过段寄存器的设置使之相互独立,也可将它们部分或完全重叠。需要注意的是,改变这些区域的地址时,是以16个字节为单位进行的。

§2-3-1  指令周期、总线周期和T状态

了解微处理器的时序对于进一步理解微处理器执行指令的过程、各部件与系统总线的连接及硬件系统的调试都十分有意义。重要的不在于如何画出时序波形而在于理解工作时序。
在8088CPU中,CPU与内存或接口间进行通信,如将一个字节写入内存一个单元(或接口),或者从内存某单元(或某接口)读一个字节到CPU,这种读(或)写的过程称为一个总线周期。
微处理器是在统一的时钟信号CLK控制下,按节拍进行工作的。8086的时钟频率是5MHz,故时钟周期为200ns。CPU每执行一条指令,至少要通过总线对存储器访问一次(取指令),一个总线周期至少包括4个时钟周期即T1、T2、T3、T4,处在这些基本时钟周期中的总线状态称为T状态。
另外需说明的是,当内存或接口的速度比较慢,使得在4个时钟周期里不能对它们进行正确地读写时,可通过时钟产生器(8284)产生前面曾提到的READY信号并将其加到8088上。8088CPU在每个总线周期的T3的开始时刻查看READY的状态。若此时READY为低电平,则CPU不执行T4而是在T3之后插入一个等待的时钟周期TW(图中未标出)。在TW的开始时刻,再次查看READY,若仍为低电平,则再插入一个TW。此过程一直进行到某个TW开始,READY为高电平时。这时,下一个时钟周期就是一个总线周期的最后一个时钟周期T4。可见,利用READY信号,我们可以插入若干个TW,使用总线周期延长,达到可靠地读写内存和接口的目的。
注意,CPU的读(RD)或写(WR),是在T4开始时刻(或RD、WR信号的后沿)进行的。这时数据线上的数据是稳定的,且只有这样,利用READY插入TW才有意义。

原创粉丝点击