1第2章8086微处理器及其系统教材选择8086作为教学主要内容,是因为8086是Intel80X86系列微处理器的基础,具有典型结构,便于教学入门,有利于学生在有限的学时内掌握微处理器的体系结构和编程原理。8086CPU具有16位数据总线和20位地址总线,数据总线与地址总线分时复用,直接寻址范围为1MB。8086的一个突出特点是多重处理能力,用8086CPU与8087数学协处理器以及8089I/O处理器组成的多处理器系统,可大大提高其数据处理和输入/输出能力。80X86是构成IBMPC个人计算机的核心,掌握8086微处理器为更高级微处理器的学习打下坚固的基础。学习8086微处理器要从三个方面进行,即:8086微处理器的组织结构8086微处理器的工作模式8086微处理器的操作时序2.1分析教材内容以下我们以8086微处理器的组织结构、8086微处理器的工作模式和8086微处理器的操作时序三个方面内容为重点进行分析。2.1.1分析重点、难点问题1.8086微处理器的组织结构从程序员的角度看到的8086CPU的结构如图2-1所示。可以看出8086CPU由执行部件(EU)和总线接口部件(BIU)两部分组成。1)执行部件(EU)执行部件由内部寄存器组、算术逻辑运算单元(ALU)与标志寄存器(FR)及内部控制逻辑3部分组成。①内部寄存器组。8086共有8个16位的内部寄存器,分为两组。通用数据寄存器。4个通用数据寄存器AX、BX、CX、DX均可用作16位寄存器也可用作8位寄存器。用作8位寄存器时分别记为AH、AL、BH、BL、CH、CL、DH、DL。•AX(AH、AL):累加器。有些指令约定以AX(或AL)为源或目的寄存器。输入/输出指令必须通过AX或AL实现。•BX(BH、BL):基址寄存器。BX可用作间接寻址的地址寄存器和基地址寄存器,BH、BL可用作8位通用数据寄存器。•CX(CH、CL):计数寄存器。CX在循环和串操作中充当计数器,指令执行后CX内容自动修改,因此称为计数寄存器。2•DX(DH、DL):数据寄存器。除用作通用寄存器外,在I/O指令中可用作端口地址寄存器,乘除指令中用作辅助累加器。图2-18086/8088CPU内部结构图指针和变址寄存器。•BP(BasicPointerRegister):基址指针寄存器。•SP(StackPointerRegister):堆栈指针寄存器。•SI(SourceIndexRegister):源变址寄存器。•DI(DestinationIndexRegister):目的变址寄存器。BP、SP称为指针寄存器,用来指示相对于段起始地址的偏移量。BP和SP一般用于堆栈段。SI、DI称为变址寄存器,可用作间接寻址、变址寻址和基址变址寻址的寄存器。SI一般用于数据段,DI一般用于数据段或附加段。②算术逻辑单元(ALU)及标志寄存器(FR)。算术逻辑单元完成16位或8位算术逻辑运算。运算结果送上ALU内部数据总线,同时在标志寄存器中建立相应的标志。标志寄存器是一个16位寄存器,使用其中的9位作为条件标志和控制标志。条件标志(6位)根据算术逻辑运算结果由硬件自动设定,它们反映运算结果的某些特征或状态,可作为后继操作(如条件转移)的判断依据。控制标志(3位)由用户通过指令来设定,它们可控制机器或程序的某些运行过程。标志寄存器的内容如下:1514131211109876543210OFDFIFTFSFZF--AF--PF--CF条件标志(状态标志)。共6位,用于寄存程序运行的状态信息,这些标志往往用作后续指令判断的依据。此处很重要,请细读。•CF(CarryFlag):进位标志,反映在运算结果的最高位有无进位或借位。如果运算结果的最高位产生了进位(加法)或借位(减法)则CF=1,否则CF=0。•PF(ParityFlag):奇偶标志,反映运算结果中“1”的个数的奇偶性,主要用于判3断数据传送过程中是否出错。若结果的低8位中有偶数个“1”则PF=1,否则PF=0。•AF(AuxiliaryCarryFlag):辅助进位标志,又称半进位标志。加减运算时,若D3向D4产生了进位或借位则AF=1,否则AF=0。在BCD码运算时,该标志用于十进制调整。•SF(SignFlag):符号标志,反映运算结果最高位即符号位的状态。如果运算结果的最高位为1则SF=1(对带符号数即为负数),否则SF=0(对带符号数即为正数)。•OF(OverflowFlag):溢出标志,反映运算结果是否超出了带符号数的表数范围。若超出了机器的表数的范围,即为产生溢出,则OF=1,否则OF=0。对于字节运算,结果范围应是-128~+127,字运算的结果范围是-32768~+32767。机器实际处理时判断是否溢出的方法是根据最高位的进位(CF)与次高位的进位是否相同来确定,若两者不相同则OF=1(表示有溢出),否则OF=0(表示无溢出)。例如:为简化书写以字节操作为例:10001000+10001100二进制运算十六进制运算带符号数运算无符号数运算1000100088H-120136+10001100+8CH+-116+140100010100114H-236276=256+20方框中的1表示结果超出字节部分。运算结果标志位如下:CF=1,PF=1,AF=1,ZF=0,SF=0,OF=1。因为D7位进位为1,D6位进位为0,所以产生溢出,OF=1。由运算结果应为-236也可以看出,显然已经超出了单字节带符号数的表示范围。因此有溢出时,运算结果对带符号数来说是错误的,程序员应做适当处理。如果把运算看作是无符号数运算,CF=1表示最高位有进位,进位的二进制真值相当于28=256,加上本字节结果00010100B即20,显然结果是正确的。因此对于无符号数,进位位是有效结果的一部分,程序员必须在随后的运算中予以正确处理。控制标志(3位)。用于控制机器或程序的某些运行过程。•DF(DirectionFlag):方向标志,用于串处理指令中控制串处理的方向。当DF=1时,每次操作后变址寄存器SI、DI自动减量,因此处理方向是由高地址向低地址方向进行。当DF=0,则SI、DI自动增量,处理方向由低地址向高地址方向进行。该标志由方向控制指令STD或CLD设置或清除。•IF(InterruptFlag):中断允许标志,用于控制CPU是否允许响应可屏蔽中断请求。IF=1为允许响应可屏蔽中断请求,IF=0则禁止响应可屏蔽中断请求。该标志可由中断控制指令STI或CLI设置或清除。•TF(TrapFlag):陷阱标志,用于单步操作。TF=1时,每执行一条用户程序指令后自动产生陷阱,进入系统的单步中断处理程序。TF=0时,用户程序会连续不断地执行,不会产生单步中断。③内部控制逻辑电路。它是EU的内部控制系统,主要功能为从指令队列缓冲器中取出指令,对指令进行译码,并产生各种控制信号,控制各部件的协同工作以完成指令的执行过程。2)总线接口部件(BIU)总线接口部件负责CPU与存储器、I/O设备之间传送数据、地址、状态及控制信息,它4由段寄存器(CS、DS、SS、ES)、指令指针寄存器(IP)、地址加法器、内部暂存器(对用户透明,用户无权访问)、指令队列缓冲器及I/O控制逻辑等部分组成,分别介绍如下:①段地址寄存器(CS、DS、SS、ES)。8086CPU内部数据结构是16位的,即所有的寄存器都是16位的,而外部寻址空间为1MB,即需要20位地址线。为了能用内部寄存器中的16位地址来寻址1MB空间,8086将1MB空间以16字节为一个内存节(Paragraph),共分成64K个节如图2-2(a)所示。用于存放段地址的寄存器称为段寄存器,根据其主要用途,分为代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES。代码段寄存器CS:代码段是存放程序代码的存储区域,代码段寄存器用来存放代码段存储区域的起始地址。数据段寄存器DS:数据段是存放程序中所使用的数据的存储区域,数据段寄存器用来存放程序的数据存储区的起始地址。堆栈段寄存器SS:堆栈是按照后进先出原则组织的一段特殊存储区域,主要用于子程序调用时断点和返回地址的保存和恢复,也可用于数据的传送。堆栈段寄存器用来存放堆栈存储区的起始地址。由堆栈段寄存器SS与堆栈指针寄存器SP来确定当前堆栈指令的操作地址。附加段寄存器ES:附加段是为某些字符串操作指令存放目的操作数而设置的一个附加的数据段,附加段寄存器用来存放该附加数据段存储区域的起始地址。图2-2存储器的分段、物理地址形成及存储地址分配注意!8086系统的物理地址是一个20位的地址,物理地址的获得方法是:将段寄存器的内容左移4位(即×16),与逻辑地址(又称偏移地址或有效地址,即对段首的偏移量)相加,得到20位物理地址(如图2-2(b)所示)。程序运行期间,段寄存器内容很少变化,段地址不变。偏移地址从0000H~FFFFH变化时,对应64KB的空间,所以一个程序段空间最大可达64KB。64KB内存空间称为一个内存段(简称为段)。各段可以互不重叠(如图2-2(c)所示),也可将某几个段安排在同一个64KB的空间上(如图2-2(d)所示),或使某些段重迭部分存储空间,如使代码段从20000H单元开始,数据段从21000H单元开始。②地址加法器。用于产生20位物理地址。两个加数,一个来自段寄存器并左移4位,另一位来自IP或内部暂存器。内部暂存器的内容根据不同的寻址方式,可以通过内部总线由5内部寄存器提供,也可由输入/输出控制电路从存储器中读取。③指令指针寄存器(IP)。又称程序计数器,是16位寄存器。IP中存放当前将要执行的指令的有效地址,每取出一条指令IP自动增量,即指向了下一条指令(亦即下次要执行的指令),因此可以说IP总是指向将要执行的指令。④指令队列缓冲器。是一个与CPU速度相匹配的高速缓冲寄存器。8086缓冲器为6字节,。在EU执行指令的同时,BIU可以从内存中取出下一条或下几条指令放到指令缓冲器中,EU执行完一条指令后,可以立即从指令缓冲器中执行下一条指令。因此取指令和执行指令可以并行进行,从而提高了总线的利用率,也提高了处理器总的处理速度。当遇到转移、调用及返回指令时,要清除指令队列缓冲器中的指令,从内存中取新的指令,以适应新的指令执行顺序。⑤输入/输出控制电路(总线控制逻辑)。它是CPU外部三总线(AB、DB、CB)的控制电路,控制CPU与其他部件交换数据、地址、状态及控制信息。3)总线接口部件和执行部件的管理由于指令队列缓冲器的存在,实现了执行部件(EU)与总线接口(BIU)部件的并行工作,因而提高了8086系统的效率。但这两部分又不是完全独立工作的。这两部分的关系在管理上简要说明如下:当8086指令队列中有2字节空闲(8088有一字节空闲)时,总线接口部件就自动将指令从内存中预取到指令队列缓冲器中。每当EU部件要执行一条指令时,它就从指令队列头部取出指令,后续指令自动向前推进。EU要花几个时钟周期执行指令,指令执行中若需要访问内存或I/O设备,EU就向BIU申请总线周期,若BIU总线空闲,则立即响应,若BIU正在取一条指令,则待取指令操作完成后再响应EU的总线请求。当指令队列已满,EU又没有申请总线时,则总线空闲。遇到转移、调用及返回指令时,原先预取到指令队列中的指令已不再有用,BIU就自动清除指令队列中已有内容,从转移、调用或返回的新地址开始,重新从内存中预读取指令并填充指令队列。可见,总线接口部件与执行部件既非同步工作方式,也不是完全无关,而是互相配合工作的。学习以上内容,我们应该掌握8086微处理器的组成及取指令、执行指令并行运行的特点,务必要记住内部各寄存器的名称和其用途,以备学习汇编语言程序设计时使用。3)8086的引脚及其功能8086微处理器芯片为40引脚双列直插封装。为解决功能多而引脚数少的矛盾,许多引脚具有多功能。其实现方法一种是总线复用,即在不同时钟周期内,引脚的作用不同,如地址、数据线的分