1第2章8086体系结构8086CPU结构8086系统的结构和配置22.18086CPU结构8086CPU的内部结构8086CPU的寄存器结构8086CPU的管脚及功能38086CPU的内部结构组成8086CPU由两部分组成:指令执行部件(EU,ExecutionUnit)总线接口部件(BIU,BusInterfaceUnit)一、8086CPU的内部结构48086CPU的内部结构5指令执行部件(EU)主要由算术逻辑运算单元(ALU)、标志寄存器FR、通用寄存器组和EU控制器四个部件组成,其主要功能是执行指令。6ALU:执行算术、逻辑运算标志寄存器:记录运算结果的特征或存放控制标志通用寄存器:数据暂存、保留地址EU控制器:接受从指令队列来的指令,经过解释,翻译形成各种控制信号,对EU的每个部件实现在规定时间完成规定的操作7总线接口部件(BIU)主要由地址加法器、专用寄存器组、指令队列和总线控制电路四个部件组成。其主要功能是形成访问存储器的物理地址、访问存储器并取指令暂存到指令队列中等待执行,访问存储器或I/O端口读取操作数参加EU运算或存放运算结果等。8地址产生器:由寻址单元的16位偏移地址和段寄存器的内容(左移4位)形成一个20位的实际地址。总线控制电路:8086分配20条总线,要用来传送16位数据信号、20位地址信号和4位状态信号。这些信号必须要分时传送,总线控制逻辑功能就是以逻辑控制方法实现上述信号的分时传送。指针寄存器:IP保存着BIU要取出的下一条指令的偏移地址。指令队列:暂存指令的一组暂存器,由6个8位寄存器组成,采用“先进先出”的原则,顺序存放,顺序地被取到EU中执行。9EU和BIU的操作原则:lBIU中的指令队列有2个或2个以上字节为空时,BIU自动启动总线周期,取指填充指令队列。直至队列满,进入空闲状态。lEU每执行完一条指令,从指令队列队首取指。系统初始化后,指令队列为空,EU等待BIU从内存取指,填充指令队列。lEU取得指令,译码并执行指令。若指令需要取操作数或存操作结果,需访问存储器或I/O,EU向BIU发出访问总线请求。10l当BIU接到EU的总线请求,若正忙(正在执行取指总线周期),则必须等待BIU执行完当前的总线周期,方能响应EU请求;若BIU空闲,则立即执行EU申请总线的请求。lEU执行转移、调用和返回指令时,若下一条指令不在指令队列中,则队列被自动清除,BIU根据本条指令执行情况重新取指和填充指令队列。11BIU与EU是分开的,取指和执行的操作也就分离了,这样,BIU和EU按并行方式重叠操作。似乎取指所需的时间消失了,从而提高整个系统的执行速度。12通用寄存器段寄存器标志寄存器FR指令指针寄存器IP二、8086CPU的寄存器结构131、通用寄存器指令执行部件(EU)设有8个通用寄存器AXBXCXDXSPBPSIDI14通用寄存器AX(AccumulatorRegister)16位,作为累加器使用,可用来存放参加运算的数据和结果,在乘、除法运算中与DX构成双字数据BX(BaseRegister)16位,基址寄存器除可作数据寄存器外,还可放内存的逻辑偏移地址,而AX,CX,DX则不能。15CX(Counter)16位,计数寄存器,是因为它既可作数据寄存器,又可在串指令和移位指令中作计数用。DX(DataRegister)16位,作通用数据寄存器外,还在乘、除法运算、带符号数的扩展指令中有特殊用途。以上四个寄存器均可分成2个8位的寄存器使用,即低八位和高八位。16SI(SourceIndex)源变址寄存器多用于存放内存的逻辑偏移地址,隐含的逻辑段地址在DS寄存器中,也可放数据。DI(DestinationIndex)目标变址寄存器多用于存放内存的逻辑偏移地址,隐含的逻辑段地址在DS寄存器中也可放数据。17BP(BasePointer)基址指针用于存放内存的逻辑偏移地址,隐含的逻辑段地址在SS寄存器中。SP(StackPointer)堆栈指针用于存放栈顶的逻辑偏移地址,隐含的逻辑段地址在SS寄存器中。18寄存器的特殊用途和隐含性质在指令中没有明显的标出,而这些寄存器参加操作,称之为“隐含寻址”。具体的:在某类指令中,某些通用寄存器有指定的特殊用法,编程时需遵循这些规定,将某些特殊数据放在特定的寄存器中,这样才能正确的执行这些指令。采用“隐含”的方式,能有效地缩短指令代码的长度。19寄存器名特殊用途隐含性质在输入输出指令中作数据寄存器用不能隐含AX,AL在乘法指令中存放被乘数或乘积,在除法指令中存放被除数或商隐含AH在LAHF指令中,作目标寄存器用隐含在十进制运算指令中作累加器用隐含AL在XLAT指令中作累加器用隐含在间接寻址中作基址寄存器用不能隐含BX在XLAT指令中作基址寄存器用隐含CX在串操作指令和LOOP指令中作计数器用隐含CL在移位/循环移位指令中作移位次数计数器用不能隐含在字乘法/除法指令中存放乘积高位或被除数高位或余数隐含DX在间接寻址的输入输出指令中作地址寄存器用不能隐含在字符串运算指令中作源变址寄存器用隐含SI在间接寻址中作变址寄存器用不能隐含在字符串运算指令中作目标变址寄存器用隐含DI在间接寻址中作变址寄存器用不能隐含BP在间接寻址中作基址指针用不能隐含SP在堆栈操作中作堆栈指针用隐含202、段寄存器总线接口部件BIU设有4个16位段寄存器CS(CodeSegment),代码段寄存器中存放程序代码段起始地址的高16位。DS(DataSegment),数据段寄存器中存放数据段起始地址的高16位。SS(StackSegment),堆栈段寄存器中存放堆栈段起始地址的高16位。ES(ExtendedSegment),扩展段寄存器中存放扩展数据段起始地址的高16位。213、标志寄存器FR标志寄存器FR中共有9个标志位,可分成两类:状态标志表示运算结果的特征,它们是CF、PF、AF、ZF、SF和OF控制标志控制CPU的操作,它们是IF、DF和TF。22标志寄存器FR23FR中的状态标志CF(CarryFlag):进位标志位CF=l,表示本次运算中最高位(D15或D7)有进位(加法运算时)或有借位(减法运算时)。CF标志可通过STC指令置位,通过CLC指令复位(清除进位标志),还可通过CMC指令将当前CF标志取反。PF(ParityFlag):奇偶校验标志位PF=1,表示本次运算结果中有偶数个“l”,PF=0,表示本次运算结果中有奇数个“1”。24AF(AuxiliaryCarryFlag):辅助进位标志位。AF=l,表示运算结果的8位数据中,低4位向高4位有进位(加法运算时)或有借位(减法运算时),这个标志位只在十进制运算中有用。ZF(ZeroFlag):零标志位ZF=1,表示本次运算结果为零,否则即运算结果非零时,ZF=0。25SF(SignFlag):符号标志SF=1,表示本次运算结果的最高位(第7位或第15位)为“l”,否则SF=0。OF(OverflowF1ag):溢出标志26FR寄存器的控制标志IF(InterruptFlag):中断标志位IF=1,表示允许CPU响应可屏蔽中断。IF标志可通过STI指令置位,也可通过CLI指令复位。DF(DirectionFlag):方向标志位在串操作指令中,若DF=0,表示串操作指令地址指针自动增量;DF=1,表示地址指针自动减量。DF标志位可通过STD指令置位,也可通过CLD指令复位。TF(TrapFlag):单步标志位274、指令指针寄存器IPIP始终存有相对于当前指令段起点偏移量的下一条指令,即IP总是指向下一条待执行的指令。IP中内容可由BIU自动修改。28三、8086CPU的管脚及功能8086是16位CPU。它采用高性能的N—沟道,耗尽型负载的硅栅工艺(HMOS)制造。由于受当时制造工艺的限制,部分管脚采用了分时复用的方式,构成了40条管脚的双列直插式封装。29301、8086的两种工作方式最小模式:系统中只有8086一个处理器,所有的控制信号都是由8086CPU产生。最大模式:系统中可包含一个以上的处理器,比如包含协处理器8087。在系统规模比较大的情况下,系统控制信号不是由8086直接产生,而是通过与8086配套的总线控制器等形成。31最小模式下的引脚说明(1)AD15~AD0(AddressDataBus):分时复用的地址数据总线,双向,三态。在T1状态(地址周期)AD15~AD0上为地址信号的低16位A15~A0;在T2~T3状态(数据周期)AD15~AD0上是数据信号D15~D0。即先输入地址,再输入数据,复用可减少引脚。32(2)A19/S6~A16/S3(Address/Status):地址/状态复用信号,输出。访问内存时,A19~A16上是地址的高4位,与A15~A0构成20位物理地址;访问I/O时,S6~S3上输出状态信息。33S4S3当前正在使用的段寄存器00ES01SS10CS或未使用任何段寄存器11DS34(3)/S7(BusHighEnable/Status):数据总线高8位使能和状态复用信号,输出。在总线周期T1状态,有效,表示数据线上高8位数据有效。当读/写存储器或I/O端口以及中断响应时,与地址线AD0配合使用。在T2~T4状态则输出状态信息S7。S7在8086中是备用状态信号。BHEBHEBHE35AD0总线使用情况0016位数据总线上进行字节传送01高8位数据总线上进行字节传送10低8位数据总线上进行字节传送11无效BHE36(4)(Read)读信号,三态输出,低电平有效,表示当前CPU正在读存储器或I/O端口。(5)(Write)写信号,三态输出,低电平有效,表示当前CPU正在写存储器或I/O端口。(6)M/(Memory/IO)存储器或I/O端口访问信号。三态输出,M/为高电平时,表示当前CPU正在访问存储器,M/为低电平时,表示当前CPU正在访问I/O端口。RDWRIOIOIO37(7)READY准备就绪信号。由外部输入,高电平有效,表示CPU访问的存储器或I/O端口已准备好传送数据。当READY无效时,要求CPU插入一个或多个等待周期Tw,直到READY信号有效为止。38(8)INTR(InterruptRequest)中断请求信号,由外部输入,电平触发,高电平有效。INTR有效时,表示外部设备向CPU发出中断请求,CPU在每条指令的最后一个时钟周期对INTR进行测试,一旦测试到有中断请求,并且当中断允许标志IF=1时,则暂停执行下条指令转入中断响应周期。39(9)(InterruptAcknowledge)中断响应信号。向外部输出,低电平有效,表示CPU响应了外部发来的INTR信号。(10)NMI(Non—MaskableInterruptRequest)不可屏蔽中断请求信号。由外部输入,边沿触发,正跳沿有效。CPU一旦测试到NMI请求信号,待当前指令执行完就自动从中断入口地址表中找到类型2中断服务程序的入口地址,并转去执行。INTA40(11)测试信号。由外部输入,低电平有效。当CPU执行WAIT指令时(WAIT指令是用来使处理器与外部硬件同步),每隔5个时钟周期对TEST进行一次测试,若测试到该信号无效,则CPU继续执行WAIT指令,即处于空闲等待状态;当CPU测到TEST输入为低电平时,则转而执行WAIT的下一条指令。由此可见,TEST对WAIT指令起到了监视的作用。TEST41(12)RESET复位信号。由外部输入,高电平有效。RESET信号至少要保持4个时钟周期,CPU接收到该信号后,停止进行操作,并对标志寄存器(FR)、IP、DS、SS、ES及指令队列清零,而将CS设置为FFFFH。当复位信号变为低电平时,CPU从FFFF0H开始执行程序,由此可见,采用8086CPU计算机系统的启动程序就保持在开始的存储器中。42(13)ALE(AddressLatchEnable)地址锁存使能信号,输出,高电平有效