530 likes | 787 Views
第 2 章 80X86 微处理器. 本章重点: 掌握 CPU 内部寄存器的结构与功能,了解 CPU 引脚功能; 了解最小 / 最大模式的概念和系统组建,了解系统总线形成; 理解 CPU 总线读 / 写时序。 本章难点: 8086/8088CPU 引脚功能; 最小 / 最大模式; CPU 总线读 / 写时序。. 主 编 : 马争 副 主 编 : 汪亚南 作 者 : 石建国 , 师向群 , 孟庆元 电子制作 : 孟庆元 , 李佃宝. 2 . 1 微处理器的性能指标和技术特点 2.1.1 微处理器的主要性能指标.
E N D
第2章80X86微处理器 本章重点: • 掌握CPU内部寄存器的结构与功能,了解CPU引脚功能; • 了解最小/最大模式的概念和系统组建,了解系统总线形成; • 理解CPU总线读/写时序。 本章难点: • 8086/8088CPU引脚功能; • 最小/最大模式; • CPU总线读/写时序。
主 编 : 马争 • 副 主 编 : 汪亚南 • 作 者 : 石建国,师向群,孟庆元 • 电子制作 : 孟庆元,李佃宝
2.1 微处理器的性能指标和技术特点2.1.1 微处理器的主要性能指标 1、主频 • 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。 2、外频 • 外频是CPU的基准频率,单位也是MHz。CPU的外频决定着整块主板的运行速度。在台式机中,所说的超频,都是超CPU的外频,一般情况下,CPU的倍频都是被锁住的。 3、倍频系数 • 倍频系数是指CPU主频与外频之间的相对比例关系。
4、位和字长 • 位:在数字电路和计算机技术中采用二进制,代码只有“0”和“1”,其中无论是 “0”或是“1”在CPU中都是一“位”。 • 字长:计算机技术中对CPU在单位时间内(同一时间)能一次处理的二进制数的位数叫字长。 5、高速缓存Cache • 高速缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大。
6、CPU内核电压和I/O工作电压 • 从586CPU开始,CPU的工作电压分为内核电压和I/O电压两种,通常CPU的核心电压小于等于I/O电压。 7、指令集和扩展指令集 • CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。
2.1.2、新一代微处理器的技术特点 1、超流水线和超标量技术 • 流水线是Intel首次在486芯片中开始使用的。流水线的工作方式就象工业生产上的装配流水线。超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。 • 超标量是通过内置多条流水线来同时执行多个处理器,其实质是以空间换取时间。
2、独立的指令cache和数据cache • 80486片内有8KB的Cache,而Pentium有2个8KB的Cache,指令和数据各使用一个Cache,使Pentium的性能大大超过80486微处理器。 3、重新设计的浮点运算单元 • Pentium的浮点单元在80486的基础上进行了彻底的改进,每个时钟周期能完成一个或两个浮点运算。 4、分支预测 • 循环操作在软件设计中使用十分普通,而且每次在循环中对循环条件的判断占用了大量的CPU时间,为此,Pentium提供一个称为分支目标缓冲器BTB(BranchTargetBuffer)的小Cache来动态地预测程序分支,提高循环程序运行速度。
2.2 8086/8088微处理器内部结构 2.2.1 8086/8088微处理器的内部结构 • 8086CPU的内部结构框图如图所示。从功能上讲,它由两个独立的逻辑单元组成,即执行单元EU和总线接口单元BIU。 • 1.执行单元EU • 执行单元EU中的各部件通过一个16位的算术逻辑单元(ALU)总线连接在一起,在内部实现快速数据传输。
2.总线接口单元BIU • 总线接口单元BIU的功能是根据执行单元EU的请求,负责完成CPU与存储器或I/O设备之间的数据传送。 • 3.执行部件EU和总线接口部件BIU的动作管理 • 由于总线接口单元BIU和执行单元EU两部分是按流水线方式并行工作的,在EU执行指令的过程中,BIU可以取出多条指令,放进指令流队列中排队。这样,当EU执行完一条指令后,就可以立即执行下一条指令,从而减少了CPU为取指令而等待的时间,提高了运算速度。
2.2.3 8086/8088CPU内部寄存器 • 8086/8088CPU内部有14个16位寄存器,为了便于说明,一般又把它们分为3个组。
1.通用寄存器 • 通用寄存器可分为两组:数据寄存器和地址指针与变址寄存器。 (1)数据寄存器 • AX—AH(高)、AL(低)累加器ADD • BX—BH(高)、BL(低)基址寄存器BASE • CX—CH(高)、CL(低)计数器COUNT • DX—DH(高)、DL(低)数据寄存器DATA (2)地址指针和变址寄存器 • 这组寄存器在功能上的共同点是,在对存储器操作数据寻址时,用于形成20位物理地址码的组成部分。BP--基数指针寄存器 • SP(StackPointer)堆栈指针和BP(BasePointer)基址指针,通常用来作为16位地址指针。 • SI(SourceIndex)和DI(DestinationIndex)变址寄存器用来存放段内偏移地址的全部或一部分。
2.段寄存器 • CS--16位的代码段寄存器 • DS--16位的数据段寄存器 • ES--16位的附加(扩展)段寄存器 • SS--16位的堆栈段寄存器 3.控制寄存器 (1)指令指针IP • 相当于程序计数器PC,用于控制程序中指令的执行顺序。一般情况下,每取一次指令码,IP就自动加1,从而保证指令的顺序执行。IP实际上是指令机器码存放单元的地址指针,IP的内容可以被转移类指令强迫改写。 (2)标志寄存器F • 8086/8088CPU设立了一个16位的标志寄存器,共9个标志。其中6个是状态标志,3个是控制标志。
①CF(CarryFlag)进位标志。 • 如果作加法时最高位(对字节操作是D7位,对字操作是D15位)产生进位或作减法时高位产生借位,则CF=1,否则CF=0。 • ②PF(ParityFlag)奇偶标志。 • 如果操作结果的低8位中含有偶数个1,则PF=1,否则PF=0。 • ③AF(AuxiliaryCarryFlag)辅助进位标志。 • 如果在作加法时D3位向D4位的进位,则AF=1,否则AF=0。这个标志用于实现BCD码算术运算结果的调整。 • ④ZF(ZeroFlag)全零标志。 • 如果运算结果各位都为零,则ZF=1,否则ZF=0。
⑤SF(SignFlag)符号标志。 • 它总是和结果的最高位(字节操作时是D7,字操作时是D15)相同。因为在补码运算时最高位是符号位,所以运算结果为负时,SF=1,否则SF=0。 • ⑥OF(OverflowFlag)溢出标志。 • 当进行带符号的补码运算时,算术运算的结果超出了机器所能表达的带符号数的范围,就会产生溢出,这时溢出标志位OF=1;若OF=0,表示运算结果无溢出发生。 • 控制标志是一种用于控制CPU工作方式或工作状态的标志。
①DF(DirectionFlag)方向标志。 • 方向标志DF用于控制字符串操作指令的步进方向,当DF=1时,字符串操作指令将从高地址到低地址的方向对字符串进行处理;若DF=0时,则相反。 • ②IF(InterruptEnableFlag)中断允许标志。 • 它是控制可屏蔽中断的标志,若IF=1,表示允许CPU接受外部从INTR引线上发来的可屏蔽中断请求信号;若IF=0,则禁止。IF的状态不影响非屏蔽中断(NMI)请求,也不影响CPU响应内部的中断请求。 • ③TF(TrapFlag)陷阱标志或单步操作标志 • 陷阱标志是为了调试程序而设置的。若TF=1,则使8086/8088CPU处于单步工作方式;当TF=0时,CPU正常执行程序。
2.3 8086/8088CPU的外部引脚及功能 2.3.1 8086/8088CPU的外部引脚 • 8086/8088CPU均采用双列直插式的封装形式,具有40条引脚。
2.3.2 8086/8088CPU的工作模式 • 8086/8088CPU有两种工作方式:最大模式(MX)和最小模式(MN)。最小模式适用于单微处理器组成的小系统,系统中只有一个CPU;最大模式适用于多微处理组成的大系统,系统中含有2个或2个以上的CUP,其中一个主处理器,其它为协处理器。
1.地址/数据总线AD15~AD0(双向、三态) • 这是分时复用的存储器或I/O端口和数据总线。传送地址时三态输出,传送数据时可双向三态输入/输出。 2.地址/状态线A19/S6~A16/S3(输出、三态) • 这些引线也是采用多路开关的分时输出,在存储器操作的总线周期的第一个时钟周期(T1状态)时,输出20位地址的高4位(A16~A19),而在其他的时钟周期,输出状态信号。S3和S4表示正在使用的是哪个段寄存器,S5指示IF的当前状态,S6则输出低电平("0"),以表示8086/8088当前连在总线上。
3.控制总线 (1)总线高字节允许/状态,BHE/S7(输出、三态) • 在总线周期的第一个时钟周期,输出总线高字节允许信号BHE,其余时钟周期,输出状态S7,但目前S7并没能定义。若BHE=1,表示数据传送只在AD0~AD7上进行。 • 对于8088,不需要BHE信号。该引脚表示SS0,它在最小模式中表示状态,而在最大模式时它始终为高电平("1")。 (2)读控制信号线(输出、三态) • 当RD有效(低电平时),表示CPU正在进行读存储器或读I/O端口的操作。到底是对内存单元还是对I/O端口读取数据,取决于M/IO(8086)或IO/M(/8088)信号。 (3)准备好信号READY(输入) • 它是由被访问存储器或I/O端口发来的响应信号。当READY=1时,表示所寻址的存储单元或I/O端口已准备就绪,马上就可以进行一次数据传送;当READY=0时,表示所寻址的存储单元或I/O端口尚未准备就绪,要求CPU自动插入一个或几个TW等待状态,直到READY线出现高电平才进行数据传送。
(4)等待测试信号TEST(输入) • 这个测试信号是由WAIT指令来检查的。当CPU执行WAIT指令时,每隔5个时钟周期对该线的输入进行一次测试;若TEST=1时, CPU停止取下一条指令而进入等待,重复执行WAIT指令,直至TEST=0。 (5)可屏蔽中断请求信号INTR(输入) • 若IF=1(即中断未被屏蔽)时,则CPU响应中断,并且CPU通过执行中断响应周期转去执行中断服务程序;若IF=0则中断被屏蔽。 (6)非屏蔽中断请求信号NMI(输入) (7)复位信号RESET(输入) • 复位信号RESET将使8086/8088CPU立即结束它的当前操作。CPU要求复位信号至少要保持高电平4个时钟周期,才能结束它正在进行的操作。
(8)系统时钟CLK(输入) • 它为微处理器提供基本的定时脉冲。 (9)最小/最大模式信号MN/MX(输入) • 当MN/MX引脚接+5V时,则CPU工作于最小模式;若该引脚接地时,则CPU工作于最大模式。 (10)其他控制信号(24~31)引脚 • 这些控制线的性能将根据控制线MN/MX所处的状态而确定。 4、电源线VCC和地线GND • 电源线VCC接入的电压为+5V±10%,有两条地线GND,均应接地。
2.3.3 8086CPU与8088CPU的区别 • 8086是16位数据总线,而8088是8位数据总线,在处理一个16位数据时,8088需要二步操作而8086只需要一步操作; • 引脚功能有所不同,8086的M/IO高电平为存储器操作,低电平为外设IO操作,8088则正好相反; • 由于8088只有8位数据线,因此没有BHE引脚。
2.4 8086/8088CPU系统结构 2.4.1 8086/8088CPU的总线周期 • 1.总线周期 • 通常把8086/8088CPU经外部总线对存储器或I/O端口进行一次数据的输入或输出过程,称为总线操作。而把执行该操作所需要的时间,称为总线周期或总线操作周期。 • 8086/8088CPU的总线周期至少由4个时钟周期组成。
2.空闲状态TI(IdleState) • 在两个总线周期之间,存在着BIU不执行任何操作的时钟周期,这些不起作用的时钟周期称为空闲状态, 3.等待状态TW(WaitState)
2.4.2 8086/8088CPU最小模式时的系统结构 1.8086/8088CPU最小模式时的引脚功能 • 所谓最小模式,就是在系统中只有8086/8088一个CPU,而所有的总线控制信号都由CPU直接产生,因此系统中的总线控制电路被减到最少。 • 在最小模式下的各引脚定义如下: • INTA:中断响应信号 • ALE: 地址锁存允许信号 • DEN: 数据允许信号 • DT/R:数据收发信号 • M/IO:存储器/输入输出控制信号 • WR: 写信号 • HOLD:总线保持请求信号 • HLDA:总线保持响应信号
2.8086/8088最小模式下连接的特点 (1)MN/MX端接+5V,决定了8086/8088工作在最小模式。 (2)有一片时钟发生器8284A,作为时钟发生器。 (3)有三片8282或74LS373,用来作为地址锁存器。 (4)当系统中所连接的存储器和外设比较多时,需要增加系统数据总线的驱动能力,这时,要用两片8286/8287作为总线收发器。 3.8086/8088CPU最小模式时系统的总线结构 当把8086/8088的33脚MN/MX接+5V时,8086/8088CPU就处于最小工作方式了。
2.4.3 8086/8088最大模式时的系统结构 • 而最大模式是相对最小模式而言的,此时系统中有两个或多个微处理器,其中有一个是主处理器8086/8088,其它的处理器称为协处理器,它们协助主处理器工作。 1.8086/8088最大模式时的引脚功能 • 最大模式时,8086/8088 CPU不直接提供用于存储器或I/O端口读写命令等控制信号,而是将当前要执行的总线操作类型编码为3个状态位(S0、S1、S2)输出,由总线控制器8288CPU对3个状态位信息进行译码,产生相应的控制信号。而24~31控制引脚的其余引脚提供8086/8088CPU最大模式时系统所需的其他信息。
2.最大模式下的连接特点 (1)最大模式下多了8288总线控制器。 (2)在最大模式系统中,一般还会有中断优先级管理部件。 3.8086/8088CPU最大模式时系统总线结构 • 如果将8086/8088的MN/MX接地,CPU就工作在最大模式了。 • 在最大的模式系统中需要总线控制器来产生总线控制信号,因为最大模式系统包含有多个处理器,各个处理器之间需要共享总线,就必须解决主处理器和协处理器之间的协调工作问题。总线控制器8288就是用来完成这种功能的。 4.总线控制器8288 • 最大模式系统与最小模式系统的主要区别是增加了总线控制器8288,使总线控制功能更加完善。
2.5 8086的时序 2.5.1 8086CPU最小模式时的总线时序 1.学习时序的目的 • 深入分析典型的操作时序其目的在于: (1)深入理解微处理机的内部操作原理; (2)有利于在编程序时适当选用指令,以缩短指令的存储空间和指令的执行时间; (3)有助于更好地解决CPU与存储器以及各种外设之间的时序配合问题; (4)当微型机用于实时控制时,必须估计CPU完成操作所需的时间,以便与控制过程相配合。
2.8086CPU最小模式时的总线周期时序 (1)写总线周期时序
(2)读总线周期时序 最小模式下的总线读操作时序
(3)中断响应周期时序 典型的8086中断时序图
2.5.2 8086CPU最大模式时的总线时序 • 最大模式下的时序与最小模式有所不同,这里不再详述,只是与最小模式下的时序进行比较。
1.读总线周期与写总线周期时序 • 与最小模式时的不同之处有3点: • 第一,用于8282锁存器入8286收发器的控制信号、读写控制信号和INTA信号在最大模式系统中均由8288总线控制器根据CPU输出的3个状态位S0、S1、S2产生; • 第二,最小模式系统下的M/IO、RD和WR信号由存储器读命令MRDC,I/O读命令IORC,存储器写命令MWTC,先行存储定命令AMWC,I/O写命令IOWC和先行I/O写命令AIOWC代替; • 第三,8288输出的数据允许信号DEN的极性与最小模式下CPU产生的DEN相反,使用时经反相加到8286的OE端。 2.中断响应周期时序 • 在最大模式时,INTA由8288输出。在中断响应周期中,除了从第一个总线周期的T2到第二个总线周期的T2,在LOCK引脚上输出低电平信号外,其他均与最小模式时的中断响应周期时序一致。
2.6 8086/8088的存储器组织 • 存储器的基本存储单元是一个二进制位(bit),每8位组成一个字节(Byte),每相邻的2个字节可组成一个字(16位)。 • 存储器以字节为单位存储信息。为区别不同的字节存储单元,每个单元都被指定一个唯一的编号,称为该单元的物理地址(简称PA)。地址编号从0开始,按顺序加1,一般用十六进制数表示。因此PC机的内存是以字节单元为单位对内存进行编址。
2.6.1 8086/8088的存储器地址空间 • 8086/8088地址线有20根,存储器的最大存储空间为1MB(220),因此存储器地址范围为00000H~FFFFFH
1.存储器分段与 8086存储空间 • 8086/8088 CPU的寄存器是16位,最大值为FFFF即64K,而8086/8088的内存最大可达1M,显然用一个寄存器不能寻找大于64K的地址,因此采用了段地址加偏移地址的寻址方式CS:IP,这样最大寻址范围扩大到FFFFF,即1MB,从而满足了早期DOS操作系统的需要。 • 分段方法:把1MB内存划分成若干个存储区域,每个区域称为一个逻辑段(每个段都在一个连续的存储区域内,容量最大64KB)。8086/8088规定每个段的段起始地址必须能被16整除,其特征是:20位段起始地址的最低4位为0(用16进制表示为××××0H)。
2.存储器单元物理地址的形式 (1)存储单元地址 • 段基址:一个逻辑段的起始地址,形如XXXXH。 • 偏移地址:段内一个存储单元到达段地址的距离(16位)。 • 物理地址PA:存储单元的实际地址(20位)。 • 段基址和偏移地址是逻辑地址,即在程序指令中引用和操作的地址;物理地址是在20位地址总线上产生的地址。 (2)存储单元物理地址的计算 • 物理地址=段基址×10H+偏移地址 • 指令单元地址=CS×10H+IP • 堆栈操作单元地址=SS×10H+SP/BP • 数据单元地址=DS×10H+地址表达式 • 例:某单元的逻辑地址为4B09H:5678H,则该存储单元的物理地址为:物理地址(PA)=段基址×10H+EA=4B09H×10H+5678H=4B090H+5678H=50708H • 一个存储单元,可以用不同的逻辑地址表示,但其物理地址是唯一的。
2.5.3 8086/8088 CPU系统中的部分系统物理地址空间 1、部分系统专用存储空间 • 中断矢量区:00000H~003FFH共1K字节,用以存放256种中断类型的中断矢量,每个中断矢量占用4个字节,共256×4=1024=1K • 显示缓冲区:B0000H—BOF9FH约4K字节,是单色显示器的显示缓冲区,存放文本方式下所显示字符的ASCII码及属性码;B8000H—BBF3FH约16K字节,是彩色显示器的显示缓冲区,存放图形方式下屏幕显示象素的代码。 • 启动区:FFFF0H—FFFFFH共16个单元,用以存放一条无条件转移指令的代码,转移到系统的初始化部分。
2、堆栈 (1)堆栈的概念 • 堆栈(stack)是一种数据结构,它的特殊之处在于只能允许在链表的一端(称为栈顶,英文为top)进行添加和删除操作,因而按照后进先出(LIFO-Last In First Out)的原理工作。堆栈数据结构支持两种基本操作:压栈(push)和弹栈(pop): • 压栈(入栈)PUSH:将对象或者数据压入栈中,更新栈顶指针,使其指向最后入栈的对象或数据。 • 弹栈(出栈)POP:返回栈顶指向的对象或数据,并从栈中删除该对象或数据,更新栈顶。
(2)堆栈的功能及工作过程 • 功能:保存断点地址和重要数据。 • 工作过程:以8086汇编语言为例 • 入栈操作:以PUSH AX为例 • (SP-1)<- 高字节AH • (SP-2)<- 低字节AL • 出栈操作:以POP BX为例 • 低字节单元BL <-(SP) • 高字节单元BH <-(SP+1) • SP <- SP+2