1本教案内容第2章8086CPU结构与功能1.微处理器的外部结构2.微处理器的内部结构3.微处理器的功能结构4.微处理器的寄存器组织5.微处理器的存储器和I/O组成28086/8088CPU内部共有14个16位寄存器,用于提供运算,控制指令执行和对指令及操作数寻址。掌握每个寄存器的作用以及用法,是学好汇编语言程序设计的基础。14个寄存器按其用途可分为三大类:通用寄存器(8个)段寄存器(4个)控制寄存器(2个)2.4微处理器的寄存器组织3一.通用寄存器(8个)8个16位通用寄存器分为两组:地址指针和变址寄存器(4个)数据寄存器(4个)2.4微处理器的寄存器组织4存放数据16位8位DXDLDHCXCLCHBXBLBHAXALAH累加器Accumulator基址寄存器(地址寄存器)BaseRegister计数器CountRegister数据寄存器DataRegister1.数据寄存器(4个)2.4微处理器的寄存器组织52.地址指针和变址寄存器(4个)均为16位,也能存放数据均为地址寄存器DISIBPSP堆栈指针寄存器StackPointer基址指针寄存器BasePointer源变址寄存器SourceIndex目的变址寄存器DestinationIndex2.4微处理器的寄存器组织6二.段寄存器堆栈信息数据(数值、字符等)代码(指令码)在微机系统的内存中通常存放着三类信息:指示CPU执行何种操作。程序处理的对象或结果。被保存的返回地址和中间结果等。代码段数据段堆栈段2.4微处理器的寄存器组织78086/8088CPU有4个段寄存器。分别是:代码段寄存器。指向当前的代码段,指令由此段取出。CodeSegment数据段寄存器。指向当前的数据段。DataSegment附加数据段寄存器。指向当前的附加数据段。ExtraSegment堆栈段寄存器。指向当前的堆栈段。StackSegmentSSESDSCS16位2.4微处理器的寄存器组织8指令指针寄存器相当于一般微处理器中的程序计数器(PC:ProgramCounter)。它始终指向CPU下一条要取指令所在存贮器单元的偏移地址(段地址由CS提供)。用户不能更改IP的值,只有CPU执行转移指令,子程序调用指令和子程序返回指令以及中断处理时,IP才作相应的改变。四.控制寄存器(2个)1.指令指针寄存器(IP:InstructionPointer)(16位)2.4微处理器的寄存器组织9标志寄存器相当于一般微处理器中的程序状态字寄存器(PSW)。16位,但有用的只有9位,其中:2.标志寄存器(FLAG)状态标志:CF,PF,AF,ZF,SF,OF,共6位控制标志:TF,IF,DF,共3位如下图所示:OFDFIFTFSFZFAFPFCF15141312111098765432102.4微处理器的寄存器组织10CF(CarryFlag)进位标志。如果加法时最高位(对字节操作是D7位,对字操作是D15位)产生进位或减法时最高位产生错位,则CF=1,否则CF=0。状态标志反映的是ALU运算后结果的状态AF(AuxiliaryCarryFlag)辅助进位标志。如果在加法时D3位有进位或减法时D3位有借位,则AF=1,否则AF=0。这个标志位用于实现BCD码算术运算结果的调整。2.4微处理器的寄存器组织11ZF(ZeroFlag)零标志位。如果运算结果各位都为零,则ZF=1,否则ZF=0。SF(SignFlag)符号标志。它总是和结果的最高位(字节操作时是D7,字操作时是D15)相同,因为在补码运算时最高位是符号位,所以运算结果为负时,SF=1,否则SF=0.2.4微处理器的寄存器组织12OF(OverflowFlag)溢出标志。在加或减运算中结果超出8位或者16位有符号数所能表示的数值范围(-128∽+127或-32768∽+32767)时,产生溢出,OF=1,否则OF=0。PF(ParityFlag)奇偶标志。如果操作结果的低8位中含有偶数个1,PF=1,否则PF=0。2.4微处理器的寄存器组织13例1:若CPU执行5439H+476AH加法运算指令:那么,指令执行后有:SF=1,ZF=0,PF=1,AF=1,CF=0,OF=10101010000111001B0100011101101010B1001101110100011B+2.4微处理器的寄存器组织14例2:若CPU执行543AH-FE00H减法运算指令;那么,指令执行后有:SF=0,ZF=0,PF=1,AF=0,CF=1,OF=00101010000111010B1111111000000000B0101011000111010B-2.4微处理器的寄存器组织152.4微处理器的寄存器组织溢出=进位?01100100B01100100B11001000B+10101011B11111111B10101010B+那么,指令执行后有:CF=0,OF=1100+100≠-56-85+(-1)=-86那么,指令执行后有:CF=1,OF=0溢出≠进位16控制标志用来控制CPU的操作特征(运行状态)DF(DirectionFlag)方向控制标志。可由指令置1/清0CLD;DF=0在进行字符串操作时,CPU每执行一条串操作指令,对源或(与)目的操作数的地址会自动进行一次调整,其调整准则为0,自动递增。STD;DF=1DF=1,自动递减。2.4微处理器的寄存器组织17IF(InterruptEnableFlag)CLI;IF=0,CPU处于关中断状态。1时,CPU能响应外部可屏蔽中断请求;当IF=IF对外部非可屏蔽中断请求以及CPU内部的中断不起作用.可由指令置1/清0:外部可屏蔽中断允许标志。STI;IF=1,CPU处于开中断状态。0时,CPU不能响应外部可屏蔽中断请求。2.4微处理器的寄存器组织18TF(TrapFlag)陷井标志。没有专门的置1/清0指令。当TF=1时,CPU每执行完一条指令便自动产生一个内部中断(类型为1),转去执行一个中断服务程序,用户可以借助中断服务程序来检查每条指令执行的情况,称为单步工作方式,常用于程序的调试。2.4微处理器的寄存器组织19一.存储器地址空间和数据存储格式8086/8088的存储器都是以字节(8位)为单位组织的。有20条地址总线,字节(1MB)。每个字节对应一个唯一的地址,地址范围为0~-1(用16进制表示为00000~FFFFFH),如图所示。2022022.5微处理器的存储器和I/O组织20存储器二进制地址十六进制地址0000000000000000000000000000010000200003000000000000000000010000000000000000001100000000000000000010FFFFEFFFFF1111111111111111111111111111111111111110≈≈……2.5微处理器的存储器与I/O组织21存储器内两个连续的字节,定义为一个字,低字节(低8位)存放在低地址中,高字节(高8位)存放在高地址中。各位的编号方法是最低位(LSB)为位0,一个字节中,最高位(MAS)编号为位7;一个字中最高位的编号为位15。这些约定如图所示2.5微处理器的存储器与I/O组织2215141312111098765432107654321076543210(高字节)(低字节)地址=N+1字地址地址=N2.5微处理器的存储器与I/O组织23字数据在存储器中存放的格式如图所示字单元的地址一个字单元一个字节单元高字节低字节D15~D8D7~D0字数据在存储器中存放格式示意图2.5微处理器的存储器与I/O组织248086/8088允许字从任何地址开始。字的地址是偶地址时,称字的存储是对准的,若字的地址是奇地址时,则称字的存储是未对准的。8086CPU数据总线16位,对于访问(读或写)字节的指令,需要一个总线周期。对于访问一个偶地址的字的指令,也只需要一个总线周期。而对于访问一个奇地址的字的指令,则需要两个总线周期(CPU自动完成)。2.5微处理器的存储器与I/O组织258088CPU数据总线8位,无论是字,还是字节数据存取操作,也无论是偶地址的字,还是奇地址的字,每一个总线周期只能完成一个字节的数据存取操作。对字数据所组成的连续两个总线周期是由CPU自动完成的。2.5微处理器的存储器与I/O组织26从前面的介绍可知,二.存储器的分段和物理地址的形式1.为什么要分段8086/8088CPU有20条地址线(A19∽A0),能寻址外部存贮空间为=1MB,而在8088/8086CPU内部能向存贮器提供地址码的地址寄存器有六个,均为16位,所以用这六个16位地址寄存器任意一个给外部存贮器提供地址,只能提供=64K个地址,所以,对1MB地址寻址不完。这六个16位地址寄存器分别为:2021622.5微处理器的存储器与I/O组织27为了使8088/8086CPU能寻址到外部存贮器1MB空间中任何一个单元,8088/8086巧妙地采用了地址分段方法(将1MB空间分成若干个逻辑段),从而将寻址范围扩大到了1MB。基址寄存器DISIBPBX基址指针寄存器源变址寄存器堆栈指针寄存器目的变址寄存器指令指针寄存器SPIP2.5微处理器的存储器与I/O组织281MB的存贮空间中,每个存贮单元的实际地址编码称为该单元的物理地址(用PA表示)。2.怎么分段各逻辑段的起始地址必须能被16整除,即一个段的起始地址(20位物理地址)的低4位二进制码必须是0。把1MB的存贮空间划分成若干个逻辑段,每段最多64KB。2.5微处理器的存储器与I/O组织29一个段的起始地址的高16位自然数为该段的段地址.显然,在1MB的存贮空间中,可以有个段地址.每个相邻的两个段地址之间相隔16个存贮单元。在一个段内的每个存贮单元,可以用相对于本段的起始地址的偏移量来表示,,这个偏移量称为段内偏移地址,也称为有效地址(EA)。段内偏移地址也用16位二进制编码表示.所以,在一个段内有=64K个偏移地址(即一个段最大为64KB)。1621622.5微处理器的存储器与I/O组织30在一个64KB的段内,每个偏移地址单元的段地址是相同的.所以段地址也称为段基址。由于相邻两个段地址只相隔16个单元,所以段与段之间大部分空间互相覆盖(重叠)。存贮器段的划分与段的覆盖示意图如下图所示。2.5微处理器的存储器与I/O组织31存贮器段的划分与段的覆盖示意图≈≈…………段0段1段2100201001010000000200001000000段地址2.5微处理器的存储器与I/O组织32段地址和段内偏移地址都是无符号的16位二进制数,常用4位十六进制数表示。这种方法表示的存贮器单元的地址称为逻辑地址。如下图所示。2.物理地址(PA)的形成逻辑地址的表示格式为:段地址:偏移地址2.5微处理器的存储器与I/O组织33…………XXXXXHXXXXH:XXXXH段地址:段内偏移地址逻辑地址20位物理地址2.5微处理器的存储器与I/O组织34其中段地址有段寄存器提供:一个存储单元用逻辑地址表示后,CPU对该单元的寻址就应提供两部分地址段地址段内有效地址CS——提供当前代码(程序)段的段地址DS——提供当前数据(程序)段的段地址ES——提供当前附加数据段的段地址SS——提供当前堆栈段的段地址2.5微处理器的存储器与I/O组织35②段内偏移地址由下列地址寄存器提供:BXBPSIDICPU对存储器进行数据读/写操作时,由这些寄存器以某种寻址方式向存储器提供段内偏移地址。CPU取指令时,由IP提供所取指令代码所在单元的偏移地址。IPSP堆栈操作时,提供堆栈段的段内偏移地址2.5微处理器的存储器与I/O组织36已知某存储单元的逻辑地址,怎样求该单元的物理地址PA:物理地址=段地址10H+段内偏移地址8086/8088CPU中的BIU单元用来完成物理地址的计算,其计算方法如图所示。2.5微处理器的存储器与I/O组织37∑物理地址的形成19016位段基址16位段内偏移地址