第二章微型计算机的体系结构2.18086CPU的内部逻辑结构8086是Intel系列的16位微处理器,常用HMOS工艺制造,它有16位数据线和20根地址线,可寻址的地址空间达220即1MB。8088微处理器是准16位,其内部逻辑按16位设计,但外部数据总线只有8条。1.8086的内部结构8086的内部逻辑结构如图2.1所示,从功能上可分为两个独立的功能部件,即总线接口部件(BIU)和执行部件(EU)。两者可以并行工作。EU由以下各部分组成:算术逻辑单元ALU标志寄存器FLAGS(FR)通用寄存器组执行部件控制电路执行部件EU(ExecutionUnit)EU的功能是执行指令。EU从指令队列中取出指令代码,将其译码,发出相应的控制信息。控制数据在ALU中进行运算,运算结果的特征保留在FLAGS中。总线接口部件BIU(BusInterfaceUnit)BIU负责与存储器I/O端口传送信息。BIU从内存中取出指令送到指令队列;当EU需要数据时,BIU与EU配合,从指定的内存或I/O端口取出数据给EU;当运算结束时,BIU将运算结果送入指定的内存单元或外设。BIU与EU的动作管理①当指令队列中有2个空字节时,BIU自动把指令取到指令队列中。当指令队列已满,而EU无总线访问请求时,BIU进入空闲状态。②EU从指令队列的头部取出指令,并执行该指令。在执行中,如需要访问内存或I/O设备,则EU请求BIU取操作数,并直等到需要的操作数到来后,EU才继续操作。若BIU处于空闲态,它立即响应请求,若BIU正在取指令到指令对列,它先完成取指令操作,再响应EU的请求。③EU在执行转移、调用、返回等指令时,指令队列中的指令被清除,BIU重新从存储器中取出指令送入指令队列,EU才继续执行指令。因为EU与BIU并行工作,减少了CPU为取指令而等待的时间,加快了运行速度,也降低了对存储器的存储速度要求。在整个运行期间,BIU总是忙碌的,充分利用了总线,CPU效率很高。BIU的组成:专用寄存器组地址加法器指令队列(6字节)总线控制逻辑2.8086的寄存器结构1)通用寄存器组AX(Accumulator)累加器。I/O指令用它与外设端口传送信息。BX(Base)基址寄存器。在计算内存地址时,常用于存放基地址。CX(Count)计数寄存器。在循环和串操作时,常用作计数器。DX(Data)数据寄存器。上述4个寄存器皆为16位寄存器,但又可将高、低8位分别作为两个独立的8位寄存器使用。SP(StackPointer)堆栈指针寄存器BP(BasePointer)基址寄存器SI(SourceIndex)源变址寄存器DI(DestinationIndex)目的变址寄存器以上4个寄存器只能作为16位的寄存器用。2)段寄存器CS(CodeSegment)SS(StackSegment)DS(DataSegment)ES(ExtraSegment)段寄存器都是16位的寄存器,用于存放端基值(16位的无符号数)3)控制寄存器IP(InstructionPointer)指令指针寄存器。存放预取指令的偏移地址。CPU从代码段中偏移地址位IP的单元中取出指令代码的1个字节后,IP自动加1,指向指令代码的下一个字节存放单元。FLAGS(FlagsRegister)标志寄存器Flags是16位寄存器,但只用其中的9位。这9位包括6个状态标志位和3个控制标志位,如下所示。15OFDF1011IFTF89SFZF67AF45PF23CF01•CF(CarryFlag):进位标志CF=1表示本次运算中,最高位(D7位或D15位)发生进位(加法运算)或借位(减法运算)。•PF(ParityFlag):奇偶标志PF=1表示本次运算结果中有偶数个“1”;PF=0表示有奇数个“1”。•AF(AuxiliaryCarryFlag):辅助进位标志。AF=1表示本次运算D3位向D4位有进位(加法运算)或借位(减法运算)。•ZF(ZeroFlag):零标志。ZF=1表示本次运算结果为0,否则ZF=0。•SF(SignFlag):符号标志。SF=1表示本次运算结果的最高位(D7或D15位)为“1”,否则,SF=0。•OF(OverflowFlag):溢出标志。OF=1表示本次运算结果超出了带符号数范围,即溢出。否则OF=0。8位补码的整数范围是:-128~+127;16位补码的整数范围是:-32768~+32767。关于进位与溢出2个n位的无符号二进制数相加,结果大于2n-1,称为进位。应用CF标志位作判断。2个n位的带符号二进制数相加,结果大于2n-1-1或小于-2n-1,称为溢出,应用OF标志位作判断。上述的n为字长,8086的n为8或16。计算机中使用的二进制数称为机器数。计算机系统中负数一律用补码表示。三个控制标志位为:•DF(DirectionFlag):方向标志。DF=1,使串操作按减地址方式进行;DF=0,使串操作按增地址方式进行。•IF(InterruptFlag):中断标志。IF=1,允许CPU响应可屏蔽中断;IF=0,禁止CPU响应可屏蔽中断。•TF(TrapFlag):单步标志。TF=1,CPU进入单步工作方式;TF=0,CPU正常执行。例如:二进制数无符号数带符号数加数1000001004+4加数20000101111+11和0000111115+15CFOFZFSFPFAF000010二进制数无符号数带符号数加数1000001117+7加数211111011251-5和000000102+2CFOFZFSFPFAF100001二进制数无符号数带符号数加数1000010019+9加数201111100124+124和10000101133-123CFOFZFSFPFAF010101二进制数无符号数带符号数加数110000111135-121加数211110101245-11和01111100124+124CFOFZFSFPFAF1100002.28086CPU的外部引脚及功能8086CPU芯片是40条引脚的双列直插式封装,引脚采用了分时复用方式。8086CPU有两种工作模式,既最大模式和最小模式。有8条引脚在两种工作模式中具有不同的功能。8086CPU的引脚及功能见图2.4。8086的各引脚功能如下:•AD15~AD0(AddressDataBus)分时复用地址/数据线,传送地址时三态输出,传送数据时可双向三态输入/输出。•A19/S6~A16/S3(Address/Status)分时复用地址/状态线,作地址用时,A19~A16与AD15~AD0一起构成访问内存的20位物理地址。当CPU访问I/O端口时,A19~A16保持为“0”。作状态用时,S6~S3输出状态信息。(见表2.1)表2.1S4S3状态编码S4S3段寄存器00ES01SS10CS(I/O,INT)11DSS5指示中断标志状态,当IF=1时,S5=1。S6恒为“0”。•(BusHighEnable/Status)总线高位有效信号。三态输出,低电平有效。在读写存储器或I/O端口时,用作体选信号。(见表2.2)7S/BHEBHE表2.2和AD0编码的含义AD0总线使用情况0016位数据总线上进行字传送01高8位数据总线上进行字节传送10低8位数据总线上进行字节传送11无效BHEBHE•RD(Read):读信号。三态输出,低电平有效。指示CPU正在读内存或I/O端口。•WR(Write):写信号。三态输出,低电平有效。指示CPU正在写内存或I/O端口。•M/IO(Memory/IO):存储器或I/O端口访问信号。M/IO为高电平时,表示当前CPU正访问存储器;M/IO为低电平时,表示当前CPU正访问I/O端口。•READY:准备就绪信号。外部输入,高电平有效。它有效表示内存或I/O端口已准备好传送数据。无效时要求CPU插入等待周期Tw。•INTR(InterruptRequest):中断请求信号。输入,高电平有效。有效时,表示外部向CPU发出了中断请求。•INTA(InterruptAcknowledge):中断响应信号。输出,低电平有效。表示CPU响应了外部发来的INTR信号。•TEST:测试信号。输入,低电平有效。当CPU执行WAIT指令时,每隔5个时钟周期对TEST进行一次测试,仅当TEST有效时,CPU才执行下一条指令。RESET:复位信号。输入,高电平有效。CPU接收到RESET信号后,停止当前操作,并将工作寄存器和指令队列复位到初试状态。•ALE(AddressLatchEnable):地址锁存允许信号。输出,高电平有效。在最小模式系统中作地址锁存器的选通信号。•DT/R(DataTransmit/Receive):数据发送/接收控制信号。用于数据收发器的传送方向。当DT/R为高电平时,表示CPU向外部输出数据,当DT/R为低电平时,表示外部向CPU输入数据。•DEN(DataEnable):数据允许信号,三态输出,低电平有效。在最小模式系统中作为数据收发器的选通信号。•HOLD(HoldRequest):总线请求信号。•HLDA(HoldAcknowledge):总线请求响应信号。以上两条信号线都是用于控制总线。•MN/MX(Minimum/Maximum):工作模式选择信号。输入。MN/MX为高电平,表示CPU工作在最小模式系统中。•CLK(Clock):主时钟信号,由时钟发生器输入,8086CPU的时钟频率通常为8MHz。•Vcc(电源):8086CPU使用单一的+5伏电源。由Vcc输入。关于最小模式与最大模式•最小模式系统在系统中,只有一个8086微处理器,即单处理器系统。•最大模式系统在系统中包含有多个微处理器。比如,除8086以外还有8087数学协处理器和8089输入/输出协处理器。即构成了多处理器系统。2.3存储器的组织1.8086系统中的存储器结构8086CPU有20根地址线,它的可寻址空间为220=1M字节。这1M字节的内存单元按照00000H~FFFFFH来编址。8086系统中,将1M字节的存储空间分成两个512K的存储体,一个存储体中的单元都是偶数地址,称偶体。另一个存储体中的单元都是奇数地址,称作奇体。两个存储体之间采用字节交叉变址方式。1)对访问存储体的控制用地址码A0来区分访问哪一个存储体。A0=0,访问偶体;A0=1,访问奇体。用19位地址码(A19~A1)来确定CPU要访问存储体(奇体或偶体)内的哪一个字节单元。8086系统允许一次访问存储器时读/写一个字节(8位),也可以读/写一个字(相邻的2个字节),此时要求同时访问两个存储体,各读/写一个字节信息。为此,系统用总线高位控制信号BHE和A0共同控制读/写操作。表2.3BHE和A0的联合控制操作BHEA0操作00同时访问两个存储体,读/写一个字的信息01只访问奇地址存储体,读/写高字节的信息10只访问偶地址存储体,读/写低字节的信息11无操作2)存储体与总线之间的连线见图2.63)访问存储体的操作a.从偶地址单元读/写一个字节此时,A0=0,BHE=1,据地址位A19~A1从偶地址存储体中确定某个字节单元的地址,启动该存储体,读/写该地址中一个字节的信息,并通过数据总线的低8位传送数据。b.从奇地址单元读/写一个字节此时,A0=1,BHE=0,据地址位A19~A1从奇地址存储体中确定某个字节单元的地址,启动该存储体,读/写该地址中一个字节的信息,并通过数据总线的高8位传送数据。c.从偶地址开始读/写一个字使偶地址开始的一个字有两个字节(高位字节在奇地址存储体中,低位字节在偶地址存储体中),这两个字节单元的高19位地址码A19~A1相同,只要使A0=0,BHE=0,同时启动两个存储体,可以一次访问存储器读/写一个16位信息。d.从奇地址开始读/写一个字从奇地址开始的一个字,高位字节在偶地址存储体中,低位字节在奇地址存储体中,这两个字节单元的高19位地址码A19~A1并不相同,所以需要两次访问存储器才能读/写这个