1.8086 CPU内部结构
图2-2所示为8086 CPU的内部结构框图。从功能上来看,8086 CPU由两个独立的工作部件组成:总线接口部件(Bus Interface Unit,BIU)和执行部件(Execution Unit,EU)。微型计算机工作时,总是先从存储器中取指令,需要时再取操作数,然后执行指令,送出结果,BIU完成取指令、读操作数和送出结果的过程。EU从BIU的指令队列中取出指令并执行,不必访问存储器或I/O端口。CPU若要访问存储器或I/O端口,也是由EU向BIU发出访问所需要的地址,在BIU中形成物理地址,然后访问存储器或I/O端口,取得操作数后送到EU,或将结果送到指定的内存单元或I/O端口。BIU和EU这两个部件并行地工作,能使大部分取指令操作与执行指令操作重叠进行,由于EU执行的是BIU已从存储器取出的指令,所以在大多数情况下取指令的时间“消失了”,大大提高了系统的工作效率。

图2-2 8086 CPU的内部结构框图
(1)执行部件(EU)
EU不与外部总线打交道,只负责指令的译码和执行,包括ALU(算术逻辑单元)、寄存器组、EU控制器等,主要进行8位及l6位的二进制运算,其中ALU完成8位或16位的二进制运算,16位暂存器可暂存参加运算的操作数,EU控制器进行时序控制和取指令控制,4个通用寄存器(AX、BX、CX、DX)和4个专用寄存器(基址指针寄存器BP、堆栈指针寄存器SP、源变址寄存器SI、目的变址寄存器DI)分别用来存放一些数据或地址信息,标志寄存器为PSW,用来存放ALU的运算结果特征。
(2)总线接口部件(BIU)
BIU是和总线打交道的接口部件。具体来看,它负责完成取指令送指令队列,配合执行部件的动作,从内存单元或I/O端口取操作数,或者将操作结果送内存单元或者I/O端口。BIU的组成主要有16位段寄存器DS、CS、ES、SS,16位指令指针寄存器IP,20位地址加法器,总线控制电路等。20位地址加法器将16位逻辑地址变换成存储器读/写所需的20位物理地址。指令队列缓冲器(简称指令队列)预存6B的指令代码。总线控制电路发出总线控制信号,实现存储器读/写控制和I/O读/写控制,它将8086 CPU的内部总线与外部总线相连,是8086 CPU与外部打交道不可缺少的路径。
2.8086 CPU存储器结构
图2-3所示为8086 CPU的内部寄存器结构,包括13个16位的寄存器和1个16位的状态标志寄存器。按其用途可分为四类。

图2-3 8086 CPU的内部寄存器结构
(1)通用寄存器组
8086微处理器中设置了一些通用寄存器,操作数可以直接存放在这些寄存器中,既减少了访问存储器的次数,又缩短了程序的长度,使得程序占用内存空间少,提高了数据处理速度。8086的通用寄存器分为数据寄存器、指针和变址寄存器两组。
①数据寄存器。用来存放操作数或中间结果。包括4个16位的寄存器AX、BX、CX和DX,也可将每个寄存器的高字节和低字节分开作为两个8位寄存器使用,即AH、BH、CH、DH和AL、BL、CL和DL。16位数据寄存器主要用于存放数据和地址,而8位寄存器只能存放数据。
②指针和变址寄存器。用来存放地址的偏移量(被寻址存储单元相对于段起始地址的距离,也称偏移地址)。包括16位的指针寄存器SP、BP和变址寄存器SI、DI。SP和BP用于堆栈段操作,SP用来保存当前栈顶的偏移地址,故称为堆栈指针寄存器;BP用来存放堆栈段一个数据区基址的偏移地址,故称为基址指针寄存器。SI和DI用来存放当前数据段的偏移地址,源操作数的偏移地址存放在SI中,称其为“源变址寄存器”;目的操作数的偏移地址存放于DI中,称为“目的变址寄存器”。
通用寄存器在一定场合有其特定的用法,表2-1给出了一些通用寄存器在指令中的特定用法。
表2-1 通用寄存器的特定用法

(2)段寄存器
8086 CPU共有4个16位段寄存器,它们存放段地址,各段寄存器的具体含义如下。(https://www.xing528.com)
CS:代码段寄存器,存放代码段的起始地址。CS与IP决定了当前指令的逻辑地址。
DS:数据段寄存器,存放数据段的起始地址。DS与SI决定了字符串操作时目的操作数的地址。
SS:堆栈段寄存器,存放堆栈段的起始地址,SS与SP决定了当前堆栈的顶部。所谓堆栈,是以“后进先出”规则保存信息的一种存储机构。8086 CPU堆栈段地址在SS寄存器中,堆栈当前偏移地址在SP寄存器中,SP的初值代表了堆栈区的大小。
ES:附加段寄存器,存放附加数据段起始地址。ES与DI决定了字符串操作时目的操作数的地址。
(3)指令指针寄存器IP
指令指针寄存器IP用来存放下一条指令在CS中的偏移量。当CPU从代码段中取出指令代码的一个字节后,IP自动加1,指向指令的下一个字节。当发生中断或调用时BIU自动将IP的偏移量压入堆栈保存,并调整IP的内容。程序不能直接访问IP,但可通过中断、转移等指令来修改IP的内容。
(4)标志寄存器FR
16位的标志寄存器FR用来显示微机的运行结果或控制机器的操作,只用了其中的9位,其中,6位作状态标志,是CF、PF、AF、ZF、SF和OF;3位作控制标志,是DF、IF和TF,设置情况见表2-2。
表2-2 8086 CPU标志寄存器的设置情况

①状态标志位。CF(Carry Flag)进位标志位:运算中发生进位或借位时,CF=1,否则CF=0。STC指令可置CF=1,CLC指令可置CF=0,CMC指令可对CF求反,循环指令也会影响该标志位。
AF(Auxiliary Carry Flag)辅助进位标志位:当进行字节操作,在运算结果的低4位向高4位有进位(加法)或有借位(减法)状况时,或者当进行字操作,低字节向高字节有进位(加法)或借位(减法)时,AF=1,否则AF=0。该标志一般在BCD码运算中作为是否进行十进制调整的判断依据。
OF(Overflow F1ag)溢出标志位:当运算结果超出机器数的表示范围时,OF=1,否则OF=0。例如:带符号数的操作数,当按字节运算超出-128~+127,或按字运算超出−32768~+32767范围时,OF=1。
SF(Sign Flag)符号标志位:在进行有符号数的算术运算时,当运算结果为负时,SF=l,否则SF=0。
ZF(Zero F1ag)零标志位:运算结果为零时,ZF=1;否则ZF=0。
PF(Parity Flag)奇偶标志位:当运算结果的低8位“1”的个数为偶数时,PF=l;否则PF=0。
②控制标志位。用来控制CPU的某些特定操作,可编程设置。
DF(Direction Flag)方向标志位;用来控制数据串操作指令步进方向。当DF=0时,变址地址指针SI、DI作增量操作,即由低地址向高地址进行串操作,字节操作增量为1,字操作增量为2;当DF=1时,作减量操作,即由高地址向低地址进行串操作。STD指令可置DF=1,CLD指令可置DF=0。
IF(Interrupt F1ag)中断允许标志位:控制可屏蔽中断的标志。当IF=1时,允许CPU响应可屏蔽中断请求,即允许外部从INTR引脚发来的中断请求;当IF=0时,禁止响应。STI指令可置IF=1,CLI指令可置IF=0。
TF(Trap F1ag)陷阱标志位:这是为程序调试而提供的CPU单步工作方式。当TF=1时,CPU每执行完—条指令就产生一个内部中断,转去执行一个中断服务程序,以便对每条指令的执行结果进行跟踪调查。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
