第2章 16位和32位微处理器本章重点 :l CPU的编程结构l 标志寄存器的含义l CPU的操作时序l CPU的中断分类和中断向量l 硬件中断和软件中断的区别,软件中断的特点l微处理器的性能指标:l① 字长l② 主频 由于制造工艺的原因,微处理器的结构受到几个方 面的限制: 1. 引脚数限制 2. 芯片面积限制 3. 器件速率限制由于上述限制,使16位微处理器基本结构具有如下 特点:2. 单总线、累加器结构 3. 可控三态电路 4. 总线分时复用1. 引脚功能复用2.1 16位微处理器8086Intel 8086 CPU是16位微处理器,外型为双列直 插式,有40个引脚8086型微处理器的时钟频率为5 MHz;它有16根数据线和20根地址线,直接寻址空间 为220Byte,即为1MB8088 CPU内部结构与8086基本相同,但对外数 据总线只有8根,称为准16位微处理器2.1.1 8086 的编程结构微型计算机工作时,总是先从存储器中取指 令,需要的话再取操作数,然后执行指令,送结果 8086CPU由总线接口部件BIU和指令执行部件EU 组成,BIU和EU是并行工作的总线接口部件BIU 完成取指令,读操作数、送结果,所有与外部的操 作由其完成。
而指令执行部件EU从BIU的指令队列 中取出指令,并且读出指令,不必直接访问存储器 或I/O端口一、8086 的编程结构1. 总线接口部件BIU(Bus Interface Unit) 总线接口部件BIU是8086 CPU与外部(存储器 和I/O端口)的接口,它提供了16位双向数据总线和 20位地址总线,完成所有外部总线操作 BIU具有下列功能:地址形成、取指令、指令 排队、读/写操作数和总线控制它由下列各部分组 成: (1)4个16位段地址寄存器 (2)16位指令指针寄存器IP:存放下一条要执行指令的偏移地址 (3)20位物理地址加法器:将16位逻辑地址变换成20位物理地址,实际上完成加法操作例2-1 若当前SS=3500H,SP=4000H,说明堆栈段在 存储器中的20位物理地址 解:物理地址=SS*16+SP=39000H(4)6字节指令队列:预放6个字节的指令代码 (5)总线控制逻辑:发出总线控制信号2. 指令执行部件EU(Execution Unit) 指令执行部件EU完成指令译码和执行指令它由下列各部分组成:(1)算术逻辑运算单元ALU:完成8位或16位的二进制运算,16位暂存器可暂存参加运算的操作数。
(2)标志寄存器FR:存放ALU运算结果特征 (3)寄存器组 (4)EU控制器:取指令控制和时序控制部件 3. 8086 CPU的工作过程 第一步:先执行读操作,根据 CS:IP在地址加法器中形成20位 物理地址:CS*16+IP,再从中 取出指令=》先进先出的6字节 指令队列中,等待执行第二步:EU从指令队列中取出指 令,并分析译码,向各部件发出 控制命令,以完成执行指令的功 能EU对指令译码,分析和执行 时,此时EU不需要用总线,BIU 乘机可将后续指令=》指令队列, 将队列填满第三步:当指令队列已满,EU未向BIU 申请读/写存储器或I/O操作时,BIU处于 空闲周期如EU执行8位乘法操作时, 需70~77个T周期,取指令占2个总线周 期(8个T),这段时间内,BIU就可去 取指令将指令队列填满,而后续的62~69 个T周期内,就处于空闲状态第四步:在指令的执行过程中,若需要对 存储单元或I/O端口进行存取数据,EU就 要求BIU去完成相应的总线周期 例如:从内存中取数据指令: MOV AX,[BX]从I/O端口取数据指令: IN AL,30H第五步:若在指令的执行过程中,遇到 JMP或CALL指令时,将队列中的内容 作废,按新的转移地址去取指令,除这 种情况外,取指和执行指令都能同时进 行,大大提高了CPU的利用率。
流水线:在执行指令的同时,预取下一 条指令的技术二、寄存器结构寄存器结构在计算机中起了重要的作用,它的 存取速度比存储器快得多,这样可以相当于存储单 元,用来存放运算过程中所需要的操作数地址、操 作数及中间结果8086微处理器内部包含有4组16位 寄存器,它们分别是通用寄存器组,专用寄存器组, 段寄存器,指令指针及标志位寄存器 1. 通用寄存器组8086/8088 CPU在指令执行部件EU中有4个16 位通用寄存器,它们是AX,BX,CX,和DX,用 以存放16位数据或地址也可分为8个8位寄存器来 使用,低8位是AL、BL、CL和DL,高8位为AH、 BH、CH和DH,只能存放8位数据,不能存放地址 通用寄存器通用寄存器 AXAX((Accumulator RegisterAccumulator Register))累加器一般用来存放参加运算的数据和累加器一般用来存放参加运算的数据和 结果,在乘、除法运算、结果,在乘、除法运算、I/OI/O操作、操作、BCDBCD 数运算中有不可替代的作用数运算中有不可替代的作用 BXBX((Base RegisterBase Register))基址寄存器除可作数据寄存器外,还可基址寄存器除可作数据寄存器外,还可 放内存的逻辑偏移地址,而放内存的逻辑偏移地址,而AXAX,,CXCX,, DXDX则不能。
则不能CXCX((CounterCounter))将它称作计数寄存器,是因为它既可作将它称作计数寄存器,是因为它既可作 数据寄存器,又可在串指令和移位指令中数据寄存器,又可在串指令和移位指令中 作计数用作计数用 DXDX((Data RegisterData Register))DXDX除可作通用数据寄存器外,还在乘、除可作通用数据寄存器外,还在乘、 除法运算、带符号数的扩展指令中有特殊除法运算、带符号数的扩展指令中有特殊 用途 2. 专用寄存器组(基数指针寄存器组)8086/8088 CPU中,有一组4个16位寄存器,它们 是基址指针寄存器BP,堆栈指针寄存器SP,源变址寄 存器SI,目的变址寄存器DI这组寄存器存放的内容 是某一段内地址偏移量,用来形成操作数地址,主要 在堆栈操作和变址运算中使用 SISI((Source IndexSource Index))源变址寄存器多用于存放内存的逻辑偏移地址,隐源变址寄存器多用于存放内存的逻辑偏移地址,隐 含的逻辑段地址在含的逻辑段地址在DSDS寄存器中,也可放数据寄存器中,也可放数据 DIDI((Destination IndexDestination Index))目标变址寄存器多用于存放内存的逻辑偏移地址,目标变址寄存器多用于存放内存的逻辑偏移地址, 隐含的逻辑段地址在隐含的逻辑段地址在DSDS寄存器中也可放数据。
寄存器中也可放数据 BPBP((Base PointerBase Pointer))基数指针寄存器用于存放内存的逻辑偏移地址,隐基数指针寄存器用于存放内存的逻辑偏移地址,隐 含的逻辑段地址在含的逻辑段地址在SSSS寄存器中寄存器中 SPSP((Stack Pointer Stack Pointer ))堆栈指针寄存器用于存放栈顶的逻辑偏移地址,隐堆栈指针寄存器用于存放栈顶的逻辑偏移地址,隐 含的逻辑段地址在含的逻辑段地址在SSSS寄存器中寄存器中3. 段寄存器8086/8088 CPU可直接寻址1MB的存储器空间, 直接寻址需要20根地址线,而所有的内部寄存器都是 16位的,只能直接寻址64KB,因此采用分段技术来解 决将1MB的存储器空间分成若干个逻辑段,每段最 长64KB,这些逻辑段在整个存储空间中可浮动4个 段寄存器给出相应逻辑段的首地址,称为“段基址” 总线接口部件总线接口部件BIUBIU设有设有4 4个个1616位段寄存器位段寄存器 CSCS((Code SegmentCode Segment),),代码段寄存器中存放程代码段寄存器中存放程序代码段起始地址的高序代码段起始地址的高1616位。
位 DSDS((Data SegmentData Segment),),数据段寄存器中存放数数据段寄存器中存放数据段起始地址的高据段起始地址的高1616位 SSSS((Stack SegmentStack Segment),),堆栈段寄存器中存放堆堆栈段寄存器中存放堆栈段起始地址的高栈段起始地址的高1616位 ESES((Extended SegmentExtended Segment),),扩展段寄存器中存扩展段寄存器中存放扩展数据段起始地址的高放扩展数据段起始地址的高1616位4. 指令指针寄存器IP8086/8088 CPU中设置了一个16位指令指针寄存 器IP,用来存放将要执行的下一条指令现行代码段中 的偏移地址程序运行中,它由BIU自动将其修改, 使IP始终指向下一条将要执行的指令的地址,因此它 是用来控制指令序列的执行流程的,是一个重要的寄 存器8086程序不能直接访问IP,但可以通过某些指 令修改IP的内容 ┊ MOV BX,CX MOV AX,[BX] ADD AX,DX┊正在执行 IP指向下一条5. 标志寄存器FR 16位标志寄存器PSW用来存放运算结果的特征, 常用作后续条件转移指令的转移控制条件。
其中7位没 有用,9个标志位分成两类:一类是状态标志,表示运 算后结果的状态特征,它影响后面的操作状态标志 有6个:CF、PF、AF、ZF、SF和OF另一类是控制 标志,用来控制CPU操作,控制标志有3个:TF、IF 和DF CF:进位标志本次运算中最高位有进位或借位时,CF=1;否则CF=0 例2-2 800AH与800BH两数相加1000 0000 0000 1010+1000 0000 0000 10111 0000 0000 0001 0101CF=1PF:偶校验标志本次运算结果低8位中有偶数个“1”时,PF=1;否则PF=0 例2-3 810AH与800BH两数相加1000 0001 0000 1010+1000 0000 0000 10111 0000 0001 0001 0101CF=1,PF=0AF:辅助进位标志本次运算结果,若最低4位向较高4位有进位或借位时,AF=1;否则AF=0 例2-4 810AH与800BH两数相加1000 0001 0000 1010+1000 0000 0000 10111 0000 0001 0001 0101CF=1,PF=0,AF=1ZF:全零标志。
本次运算结果为0时,ZF=1;否则ZF=0 例2-5 810AH与800BH两数相加1000 0001 0000 1010+1000 0000 0000 10111 0000 0001 0001 0101CF=1,PF=0,AF=1,ZF=0SF:符号标志本次运算结果的最高位为1时,SF=1;否则SF=0它反映了本次运算结果是正还是负(通常“1”:负) 例2-6 810AH与800BH两数相加1000 0001 0000 1010+1000 0000 0000 10111 0000 0001 0001 0101CF=1,PF=0,AF=1,ZF=0,SF=0OF:溢出标志本次运算结果超出范围而产生溢出时,OF=1;否则OF=0 例2-7 810AH与800BH两数相加1000 0001 0000 1010 -----负数+1000 0000 0000 1011 -----负数1 0000 0001 0001 0101 -----正数?CF=1,PF=0,AF=1,ZF=0,SF=0,OF=1TF:单步标志调试程序时可实现跟踪 IF: 中断标志IF=1,允许CPU响应可屏蔽中断;否则不允许响应。
DF:方向标志在串操作指令中,用于 控制内存地址是自动增加还是减小。