微机原理与接口技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 8086微处理器简介

2.1.1 8086微处理器内部结构

微处理器随着制造技术的不断发展,其集成度越来越高,并且内部晶体管已达到几百万个。虽然从最初的微处理器发展到现在,晶体管数目增加了上千倍,但是微处理器的内部结构仍然可分为控制单元、逻辑单元和存储单元三大部分;按功能可分为总线接口单元(Bus Interface Unit,BIU)和执行单元(Execution Unit,EU)两部分。8086微处理器内部结构图如图2-1所示。

图2-1 8086微处理器内部结构图

1. 执行单元(EU)

8086微处理器的EU中主要由通用寄存器、指针寄存器、变址寄存器、算术逻辑单元(ALU)、标志寄存器(FR)和EU控制电路组成。其主要功能是执行指令。

1)通用寄存器

8086微处理器有4个16位的通用寄存器(AX、BX、CX、DX),可以存放16位的操作数,也可分为8个8位的寄存器,用作8位寄存器时分别记为AL、AH、BL、BH、CL、CH、DL、DH。其中,AX(AL、AH)称为累加器,BX(BL、BH)称为基址寄存器,CX(CL、CH)称为计数寄存器,DX(DL、DH)称为数据寄存器,这些寄存器在具体使用上有一定的差别。

• AX:累加器,在乘除法运算、串运算和I/O指令中均作为专用寄存器使用。

• BX:基址寄存器,在寻址时常用来存放基址。

• CX:计数寄存器,在循环和串操作指令中作为计数器使用。

• DX:数据寄存器,在寄存器间接寻址的I/O指令中存放I/O端口地址,在双字节乘除运算时,DX与AX共同存放一个32位双字节数据,其中DX存放高16位。

2)指针寄存器

系统中有两个16位的指针寄存器:SP(Stack Point Register)和BP(Basic Point Register),其中,SP是堆栈指针寄存器;BP是基数指针寄存器,通常用于存放基地址,用来指示相对于起始地址的偏移量。BP和SP一般用于堆栈段。

3)变址寄存器

系统中有两个16位的变址寄存器,SI(Source Index Register)和DI(Destination Index Register),其中,SI是源变址寄存器,DI是目的变址寄存器,可用作寄存器间接寻址、寄存器相对寻址和寄存器基址变址寻址。

4)算术逻辑单元

算术逻辑单元实际上就是计算机的运算器,可进行各种运算,包括算数运算和逻辑运算两大类。

• 算术运算:包括加、减、加1、减1、比较、求反、求补、乘、除运算。

• 逻辑运算:包括逻辑与、逻辑或、逻辑非、逻辑异或及移位、循环移位等运算和操作。算术逻辑单元完成16位或8位算术逻辑运算。运算结果由EU的内部总线送到EU或BLU的寄存器中,也可由BIU写入存储器或I/O端口,本次操作的状态(如是否有进位等)反映在标志寄存器中。

5)标志寄存器

标志寄存器是一个16位寄存器,使用其中的9位作为条件标志(状态标志)和控制标志。条件标志(6位)根据算术逻辑运算的结果由硬件自行设定,表示前一步操作(如加、减等)执行以后算术逻辑单元所处的状态,后续操作可以根据这些状态标志进行判断;控制标志(3位)由用户通过指令进行设定,用于对某一种特定的功能起控制作用(如屏蔽中断等),反映了人们对微型计算机系统工作方式的可控制性。标志寄存器如图2-2所示。

图2-2 标志寄存器

标志寄存器各标志的含义如下:

① 条件标志。条件标志用于寄存程序运行的状态信息,这些标志往往用作后续指令判断的依据。条件标志共6位,分别为CF、PF、AF、ZF、SF和OF。

• CF(Carry Flag):进位标志。反映在运算结果的最高位有无进位或借位。例如,做加法时最高位出现进位或做减法时最高位出现借位,CF=1,否则CF=0。

• PF(Parity Flag):奇偶标志。反映在运算结果中“1”的个数的奇偶性,主要判断数据传送过程中是否出错。例如,当运算结果的低8位中l的个数为偶数时,PF=1,否则PF=0。

• AF(Auxiliary Carry Flag):辅助进位标志(半进位标志)。例如,在做字节加法时低四位有向高四位进位,或者在做减法时低四位有向高四位借位,AF=1,否则AF=0。

通常用于对BCD算术运算结果的调整。例如,11011000B+10101110B=110000110B,

其中,AF=1,CF=1。

• ZF(Zero Flag):零标志。当运算结果为0时,ZF=1,否则ZF=0。

• SF(Sign Flag):符号标志。当运算结果的最高位为1时,SF=1,否则SF=0,即与运算结果的最高位相同。

• OF(Overflow Flag):溢出标志。反映运算结果是否超出了带符号数的表示范围。若超出了表示范围,即产生溢出,OF=1,否则OF=0。

OF溢出的判断方法如下:

加法运算中,若两个加数的最高位为0,而和的最高位为1,则产生上溢出;若两个加数的最高位为1,而和的最高位为0,则产生下溢出;两个加数的最高位不相同时,不可能产生溢出。减法运算中,若被减数的最高位为0,减数的最高位为1,而差的最高位为1,则产生上溢出;若被减数的最高位为1,减数的最高位为0,而差的最高位为0,则产生下溢出;被减数及减数的最高位相同时,不可能产生溢出。

如果进行的运算是带符号数的运算,则溢出标志恰好能够反映运算结果是否超出了8位或16位带符号数所能表示的范围,即字节运算大于127或小于-128时,字运算大于32 767或小于-32 768时,OF=1,否则OF=0。

例2-1 将十六进制数5439H和356AH相加,并说明其标志状态。

两正数相加(补码相加),结果为负数,显然运算产生了溢出,即超出了机器所能表示的范围(15位数值位最多只能表示32 767=215-1),故OF=1;运算结果最高位为1,故SF=1;运算结果本身不为0,故ZF=0;运算结果的低8位中1的个数为偶数,故PF=1;运算结果的最高位没有向前产生进位,故CF=0;运算过程中低4位向高4位产生了进位,故AF=1。

一般情况下,在某些操作之后,才对其中某个标志进行检查,并不是每次运算后所有的标志都会改变。

② 控制标志。控制标志共有3位,分别为TF、IF和DF。

• TF(Trap Flag):陷阱标志(单步标志、跟踪标志)。当TF=1时,每执行一条用户程序指令后自动产生陷阱,将使8086/8088微处理器进入单步中断处理程序。TF=0时,用户程序会连续不断地执行,不会产生单步中断。

• IF(Interrupt-enable Flag):中断允许标志。若IF=1,则微处理器可以响应可屏蔽中断,否则就不能响应可屏蔽中断。

• DF(Direction Flag):方向标志。用于串处理指令中控制串处理的方向。若DF=1,则串操作指令的地址修改为自动减量方向,每次操作后变址寄存器SI、DI自动减量,因此处理方向由高地址向低地址方向进行,否则为自动增量方向。该标志由方向控制指令STD或CLD设置或清除。

6)EU控制电路

EU控制电路用于实现EU内部控制,主要功能为从指令队列缓冲器中去除指令,并对指令进行译码,产生各种控制信号,控制各部件的协同工作,完成指令的执行过程。

2. 总线接口单元(BIU)

BIU负责微处理器与存储器、I/O设备之间数据、地址、状态及控制信息的传送。BIU由段寄存器(DS、CS、ES、SS)、16位指令指针寄存器(简称IP,它指向下一条要取出的指令代码)、20位地址加法器(用来产生20位地址)和6字节(8088微处理器为4字节)指令队列缓冲器和总线控制逻辑等组成。

1)段寄存器

访问存储器的物理地址由段地址和段内偏移地址两部分组成。

段地址寄存器用来存放段地址,也称段寄存器。BIU有4个段寄存器,分别为CS、DS、ES和SS。

微处理器可以通过4个段寄存器访问存储器中4个不同的段(每段最大64KB)。4个段寄存器的具体含义如下所述。

(1)CS(代码段寄存器)。CS存放当前执行程序(代码)所在段的段地址。CS的内容左移4位加上指令指针寄存器的内容就是下一条要执行的指令的地址。

(2)DS(数据段寄存器)。DS存放当前使用数据的段地址。通常数据段用来存放各种数据。DS的内容左移4位加上按指令中存储器寻址方式计算出来的偏移地址,就是对数据段指定单元进行读/写的地址。

(3)ES(附加段寄存器)。附加段经常在字符串操作时作为目的区使用,ES存放附加段的段地址,DI存放目的区的偏移地址。

(4)SS(堆栈段寄存器)。SS存放当前堆栈段的地址。堆栈是在存储器中开辟的按后进先出的原则组织的一个特别存储区。在调用子程序时,堆栈保留返回主程序的地址。对堆栈进行操作(压入或弹出)的地址由SS的内容左移4位加上SP的内容得到。

2)地址加法器

地址加法器利用逻辑地址计算20位物理地址,逻辑地址指程序员编写程序使用的地址,一般指段地址和段内偏移地址。8086微处理器可用20位地址寻址1MB的内存空间,而微处理器内部的寄存器都是16位的,因此需要由一个附加的机构来计算出20位的物理地址,这个机构就是20位的地址加法器。

3)指令指针寄存器

指令指针寄存器又称程序计数器,它是一个16位寄存器。指令指针寄存器中存放当前将要执行的指令的有效地址,用来控制微处理器的指令执行顺序,它和CS一起可以确定当前所要取的指令的内存地址。顺序执行程序时,微处理器每取一个指令字节,指令指针寄存器自动加1,指向下一个要读取的字节;当指令指针寄存器单独改变时,会发生段内的程序转移;当CS和指令指针寄存器同时改变时,会产生段间的程序转移。

4)指令队列缓冲器

指令队列缓冲器是一个与微处理器速度相匹配的高速缓冲寄存器。8086微处理器的指令队列缓冲器为6字节,8088微处理器的指令队列缓冲器为4字节,在EU执行指令时,BIU可从内存中取出下一条或下几条指令放到指令队列缓冲器中,EU执行完一条指令后,可立即执行指令队列缓冲器中的下一条指令。因此,取指令和执行指令可以并行进行。

5)总线控制逻辑

总线控制逻辑的功能是产生微处理器外部三总线(AB、DB、CB)的控制信号,控制微处理器与其他部件交换数据、地址、状态及控制信息。微处理器由总线控制逻辑驱动地址信号和控制信号,读取内存单元的指令或数据。取指令时,送入指令队列的队尾,以备EU执行。EU总是从指令队列的队首得到指令。BIU在EU执行指令且不使用总线时,不断从存储器顺序读取一条或多条指令,将指令队列添满。存取数据时,总线控制逻辑控制从存储器或I/O端口读/写数据。

3. BIU和EU的管理

在EU执行指令的过程中,BIU始终根据指令指针寄存器提供的地址,从存放指令的存储器中预先取出一串指令存放到指令队列中。取来的指令在指令队列中是按字节顺序存放的,这样EU不必等待BIU去取指令,即在EU执行一条指令的同时,BIU就可同时取下一条或多条指令,大大提高了微处理器的执行效率。

在下面两种情况下执行取指令操作:一是当指令队列中出现两个以上的指令字节为空时,自动执行总线操作取指令;二是当程序发生转移时,BIU执行取指令操作,BIU在新的转移地址处取得第一条指令,直接送到EU中去执行,将随后取来的指令重新填入指令队列,冲掉转移前放入指令队列中的指令。

BIU和EU按以下流水线技术原则协调工作,共同完成要求的信息处理任务。

(1)每当8086微处理器的指令队列中有两个空字节时,BIU就会自动把指令取到指令队列中,其取指的顺序是指令在程序中出现的前后顺序。

(2)每当EU准备执行一条指令时,它会从BIU部件的指令队列前部取出指令,然后用几个时钟周期去执行指令。在执行指令的过程中,如果必须访问内存或I/O端口,那么EU就会请求BIU,进入总线周期,完成访问内存或I/O端口的读写操作;如果此时BIU正好处于空闲状态,会立即响应EU的总线请求。

(3)当指令队列已满,且EU又没有总线访问请求时,BIU便进入空闲状态。

(4)在执行转移指令、调用指令和返回指令时,由于待执行指令的顺序发生了变化,指令队列中已经装入的字节被自动消除,因此BIU会接着向指令队列装入转向的另一程序段中的指令代码。

从上述动作管理原则中可以看出,EU与BIU工作不是同步的,而是既相互独立又相互配合的,8086微处理器可在执行指令的同时进行取指操作,也就是说,BIU与EU是并行工作方式,改变了以往计算机取指令、译码、执行指令的串行工作方式,提高了工作效率。