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