1、2.1 8086微处理器的内部结构,2.1.1 8086基本组成,2.1.2 8086内部寄存器,2.1.3 8086存储器管理,总结,2.1.1 8086基本组成,8086CPU由两个独立的功能部件组成:,总线接口部件BIU(Bus Interface Unit),指令执行部件EU(Execution Unit),地址加法器,1. 指令执行部件EU,主要功能是执行指令,由算术逻辑单元(ALU)、标志寄存器、通用寄存器组和EU控制器等部件组成。,指令执行:,一般情况下指令顺序执行,省去访问存储器取指令的时间。,EU不断地从指令队列中取指令连续执行,如果在指令执行过程中需要访问存储器取操作数,那
2、么EU将访问地址送给BIU后,将要等待操作数据到来后才能继续操作;,转移类指令,相当于goto语句,要将指令队列中的后续指令作废,BIU重新从存储器取出目标地址中的指令代码进入指令队列后,EU才能继续执行指令。,算术逻辑单元(ALU),完成16位或8位的二进制运算,标志寄存器,保存经ALU运算后的结果特征,通用寄存器组,可用来保存运算结果,EU控制器,首先从BIU的指令队列中取指令,并对指令译码,然后根据指令要求向EU内部各部件发出控制命令以完成各条指令的功能,运算结果通过内部总线送到通用寄存器组或BIU的内部寄存器中等待写入存储器。,2. 总线接口部件BIU,主要功能是形成访问存储器的物理地
3、址,负责与外部(存储器或I/O接口)打交道。,由地址加法器、专用寄存器组、指令队列缓冲器和总线控制电路等部件组成;,正常情况下,BIU通过地址加法器形成指令的物理地址,从给定地址的存储器中取出指令代码送指令队列缓冲器中等待执行。,收到EU送来的操作数地址,BIU将立即形成操作数的物理地址,完成读/写操作数或运算结果功能。,遇到转移类指令,BIU将指令队列缓冲器中的尚存指令作废,重新从存储器目标地址中取指令送指令缓冲器中。,指令队列,可存放6字节的指令代码。,一般情况下指令队列中总是填满指令,使EU可不断地得到指令。,16位地址加法器,将逻辑地址变换成物理地址,实际上是进行一次地址加法,将两个1
4、6位的逻辑地址转换为20位的物理地址,以达到可寻址1M字节的存储空间。,总线控制电路,将8086CPU的内部总线与外部总线相连,是8086CPU与外部交换数据的必经之路。包括:,16条数据总线,20条地址总线,若干条控制总线,由于EU和BIU可相互独立工作,大部分的取指令和执行指令操作可以重叠进行,故:,减少了等待取指令的时间。,提高了微处理器的利用率和整个系统的执行速度。,如下图所示:,8086CPU中有14个16位的寄存器,15 8 7 0,AX,累加器,BX,基址寄存器,CX,计数寄存器,DX,数据寄存器,数据寄存器,堆栈指针,基址指针,源变址寄存器,目的变址寄存器,地址指针和 变址寄存
5、器,通用寄存器组,指令指针,标志寄存器,控制寄存器组,代码段寄存器,数据段寄存器,堆栈段寄存器,附加段寄存器,段寄存器组,2.1.2 8086内部寄存器,1. 通用寄存器组,通用寄存器(8个)可分为两组:,数据寄存器(4个);,地址指针和变址寄存器(4个),(1)数据寄存器,即通用寄存器AX、BX、CX和DX,可用来存放16位的数据或地址,也可把它们当作八个8位寄存器(AH、AL、BH、BL、CH、CL、DH、DL)来使用,这时只能存放8位数据,而不能用来存放地址。,数据寄存器的特殊用途:,(2)地址指针和变址寄存器,包括SP、BP、SI、DI四个16位寄存器,在运算过程中存放操作数,但只能以
6、字(16位)为单位使用。,通常用在段内寻址时提供偏移地址:,SP(Stack Pointer)称为堆栈指针寄存器,BP(Base Pointer)称为基址指针寄存器,它们都可以与SS寄存器联用确定堆栈段中的某一存储单元的地址,SP用来指示栈顶的偏移地址,BP可作为堆栈区中的一个基地址以便访问堆栈,SI(Source Index)源变址寄存器,DI(Destination Index)目的变址寄存器,它们一般与DS联用,用来确定数据段中某一存储单元的地址,地址指针和变址寄存器特殊用途:,2. 段寄存器组,8086CPU的BIU中设置4个16位段寄存器:,代码段寄存器CS(Code Segment
7、),数据段寄存器DS(Data Segment),附加数据段寄存器ES(Extra Segment),堆栈段寄存器SS(Stack Segment),设置段寄存器的原因:,8086CPU有20条地址总线,可直接寻址的存储器空间是1M字节,CPU所有的内部寄存器都只有16位,只能直接寻址64K字节,解决办法:,把1M字节的存储空间分成许多逻辑段,每段最长为64k字节,逻辑段可在整个存储空间中浮动。,用段寄存器存储各个逻辑段的首地址的高16位,称为段地址,总之,汇编程序一般将源程序分成四个逻辑段,即:,代码段、数据段、堆栈段和附加段。,地址:,0000 0H,FFFF FH,1050 0H,213
8、0 0H,456A 0H,92A5 0H,CS,DS,SS,ES,CS:存放代码段的段地址,DS:存放数据段的段地址,SS:存放堆栈段的段地址,ES:存放附加段的段地址,各段寄存器的用处:,代码段,存放可执行指令,该逻辑段是必不可少的,数据段和附加数据段,存放参加运算的操作数和运算结果,堆栈段,用作程序执行中需要使用的堆栈,如果程序量或数据量很大,超过64K字节,那么可定义多个代码段、数据段、附加数据段和堆栈段。,4个段寄存器中存放的是当前使用的逻辑段的段地址,必要时可修改这些段寄存器的值以便访问其他同类段。,3. 控制寄存器组(IP,FLAGS),(1)指令指针寄存器IP(Instructi
9、on Pointer),8086CPU中设置的16位指令指针寄存器,存放将要取出的下一条指令在代码段中的偏移地址,在程序运行过程中,BIU可修改IP中的内容,使它始终指向将要取出的下一条指令。,注意:,IP与CS联用, 表示代码段中要执行指令的物理地址;,IP的修改由系统执行,用户一般不能使用或修改,(2)标志寄存器FLAGS(两字节),又称PSW(Processor Status Word)、FR,有9个标志位:,6个状态标志位,表示运算结果的状态,包括CF、PF、AF、ZF、SF和OF,3个控制标志位,用来控制CPU的操作,包括IF、DF和TF,进位标志,奇偶标志,辅助进位标志,零标志,符
10、号标志,单步标志,中断标志,方向标志,溢出标志,各标志位的说明如下:,(1)CF(Carry Flag)进位标志位。,做加法时最高位(字节操作是D7位,字操作是D15位)产生进位,做减法时最高位产生借位,则CF=1,否则CF=0。,(2)PF(Parity Flag)奇偶标志位。,如果操作结果的低八位中含有偶数个1,则PF=1,否则PF=0。,(3)AF(Auxiliary Carry Flag)辅助进位标志位。,做加法时D3位有进位,做减法时D3位有借位,则AF=1,否则AF=0。,(4)ZF(Zero Flag)零标志位。,如果运算结果各位都为零,则ZF=1,否则ZF=0。,(5)SF(S
11、ign Flag)符号标志位。,如果运算结果的最高位(字节操作是D7,字操作是D15)为1,则SF=1,否则SF=0。,(6)OF(Overflow Flag)溢出标志位。,在加或减运算中结果超出8位或16位有符号数所能表示的数值范围时,产生溢出,OF=1,否则OF=0。,(7)IF(Interrupt Flag)中断标志位。,可用指令设置,当IF=1时:,CPU可响应可屏蔽中断请求,IF=0时:,CPU不响应可屏蔽中断请求,(8)TF(Trap Flag)单步标志位。,假如TF=1,则CPU处于单步工作方式。在这种工作方式下,CPU每执行完一条指令就自动产生一次内部中断。,在调试程序DEBU
12、G中,T命令就是利用这种中断。,(9)DF(Direction Flag)方向标志位。,在串处理指令中:,若DF=0,表示串处理指令地址指针自动增量,即串操作由低地址向高地址进行;,DF=1,表示地址指针自动减量,即串操作由高地址向低地址进行。,DF标志位可通过指令预置。(CLD或STD),1. 存储器的分段,8086微处理器有20根地址线,可访问存储器的最大容量为1M字节。,而8086内部所有的寄存器都只有16位,只能寻址64K字节。,因此在8086系统中, 把整个存储空间分成许多逻辑段:,每个逻辑段的容量64K字节,允许它们在整个存储空间中浮动,各个逻辑段之间可以紧密相连,也可以相互重叠,
13、完全重叠或部分重叠,各逻辑段的起始地址(物理地址)必须是能被16整除的地址,例:A1820H,1010 0001 1000 0010 0000B,即低4位二进制码必须是0,2.1.3 8086存储器管理,段的起始地址的高16位被称为该段的段地址,存放在相应的段寄存器中,段内的相对地址被称为偏移地址,可存放在系统中的16位通用寄存器,若已知当前有效的代码段、数据段、附加段和堆栈段 的段基址分别为1000H, 3501H, 7F3BH, EAB0H, 那么它们在存储器中的分布情况如图,若已知:,代码段的段地址为: 1055H,数据段的段地址为: 250AH,附加数据段的段地址为: 8FFBH,堆栈
14、段的段地址为: EFF0H,那么它们在存储器中的分布情况如图所示。,每个段可以独立地占用64K存储区。,64KB,64KB,64KB,64KB,0000 0H,FFFF FH,1055 0H,250A 0H,8FFB 0H,EFF0 0H,CS:,1055H,DS:,250AH,ES:,8FFBH,SS:,EFF0H,存储空间的分段方式可以有多种多样,段与段之间 可以部分重叠、完全重叠或完全分离。,各个逻辑段允许“重叠”,注意:这里所谓的重叠是指段地址空间的重叠,每个区段的大小允许根据实际情况分配,而不一定非要占有64KB的最大段空间。,例如,如果代码段中的程序占有8KB(2000H)存储区,
15、数据段占有2KB(800H)存储区,堆栈段占有256个字节的存储区,此时分段情况如图所示。,8KB,2KB,256B,0000 0H,FFFF FH,CS:,0200H,0200 0H,8KB(10 0000 0000 0000B, 2000H),0400 0H,DS:,0400H,2KB( 1000 0000 0000B, 800H),0480 0H,SS:,0480H,2. 存储器中的逻辑地址和物理地址,采用分段结构的存储器中:,逻辑地址由段地址和偏移地址两个部分构成,无符号的16位二进制数,物理地址由逻辑地址变换得来,一个存储单元对应一个20位的物理地址,物理地址(PA) = 段地址 1
16、0H + 偏移地址(EA),由总线接口部件BIU中地址加法器完成的,0 偏移地址,19 0 物理地址,例:设(CS)=4232H ,(IP)=66H,物理地址(PA) = 段地址 16 + 偏移地址(EA),则物理地址计算如下,4 2 3 2,0,) 6 6,4 2 3 8 6,例:假设 (DS)2234H ,EA22H,程序设计过程中必须遵守的系统内部约定:,访问存储器,偏移地址由有效地址(EA)给出。,默认由DS给出段地址(必要时可强制修改为CS、ES或SS),有效地址(EA)即根据指令中所给定的寻址方式计算出的偏移地址。,注意:如果所采用的寻址方式是通过基址指针BP寻址,则段地址默认由SS提供(可修改)。,对堆栈进行操作,段地址来源于SS,偏移地址来源于SP,串处理指令,取源串,段地址由数据段寄存器DS提供(可修改),偏移地址必须由源变址寄存器SI提供,取目标串,段地址必须由附加段寄存器ES提供,偏移地址必须由目标变址寄存器DI提供。,约定的逻辑地址来源,总结,8086基本组成,内部寄存器及其功能,逻辑地址与物理地址的理解,