第2章8086系统结构概述8086CPU结构8086存储器组织8086系统配置概述网上评价:1978年,8086处理器诞生了。这个处理器标志着x86王朝的开始,从8086开始,才有了目前应用最广泛的PC行业基础。虽然从1971年,英特尔制造4004至今,已经有32年历史;但是从没有像8086这样影响深远的神来之作。微处理器的主要功能微处理器结构受到的限制16位微处理器的结构特点8086CPU概况微处理器的主要功能进行算术运算和逻辑运算同存储器和I/O接口交流信息少量暂存数据寄存指令、指令译码、执行指令提供整个系统所需的定时和控制信号可响应I/O设备的中断请求微处理器的主要功能(软件角度)赋值运算算术表达式、关系表达式和逻辑表达式无条件转移、条件转移、循环数组和其他数据结构子程序输入和输出微处理器结构受到的限制由于工艺技术和成本的限制,微处理器的结构受到以下几个方面的限制:引脚数限制芯片面积限制器件速度限制8086CPU概况引脚数目:40芯片封装类型:双列直插式数据总线数目:16地址总线数目:20直接寻址的空间:220=1MB主频:5MHz8086CPU内部结构8086CPU结构框图总线接口部件(BIU)指令执行部件(EU)8086CPU结构框图CSDSSSESIP内部寄存器654321AXBXCXDXSPBPSIDI暂存器标志寄存器EU控制器总线控制电路指令队列ΣALUALU数据总线(16位)队列总线(8位)20位地址总线数据总线16位通用寄存器8086总线BIUEU总线接口部件BIU功能BIU结构BIU工作过程BIU功能BIU是8086CPU与外部(存储器和I/O接口)的接口,提供16位数据总线和20位地址总线,完成所有外部总线操作形成20位物理地址取指令、指令排队读/写操作数总线控制BIU结构16位段寄存器(4个)CS:代码段寄存器DS:数据段寄存器ES:附加段寄存器SS:堆栈段寄存器16位指令指针寄存器IP:存放下一条将要执行指令的偏移地址20位物理地址加法器:将16位逻辑地址转换为存储器的20位物理地址6字节指令队列:预存6字节的指令代码总线控制部件:发出总线控制信号BIU工作过程1.取指令2.指令排队,等待EU取指令3.从存储器或I/O端口读写操作数4.向存储器或I/O端口输出EU的运算结果5.修改指令指针IP,指向下一条指令的偏移地址。当EU执行转移、调用或返回指令时,则BIU清除指令队列,从转移指令的新地址取得指令,并立即送给EU执行,然后从后续的指令序列中取指令填满队列指令执行部件EU功能EU结构EU工作过程EU功能指令解码(DecodeInstruction)执行指令(ExecuteInstrunction)EU结构算术逻辑单元ALU:完成8位或16位二进制运算,16位暂存器暂时存放操作数标志寄存器:存放ALU运算结果特征寄存器组:4个通用的16位寄存器AX、BX、CX、DX;4个指针和变址寄存器BP、SP、SI、DIEU控制器:取指令控制和时序控制部件EU工作过程1.EU从BIU的指令队列的输出端取指令2.进行指令译码3.若执行指令需要从存储器或I/O端口去取操作数,则EU将操作数的偏移地址通过内部的16位数据总线送给BIU,与段基地址一起,在BIU的地址加法器中形成20位物理地址,申请访问存储器或I/O端口,取得操作数送给EU4.EU根据指令要求向EU内部各部件发出控制命令,完成执行指令的功能。8086CPU寄存器结构(重点)通用寄存器指针和变址寄存器段寄存器指令指针寄存器标志寄存器PSW通用寄存器寄存器名英文名中文名用途AXAccumulator累加器算术运算;在乘除运算中用来存放操作数;和I/O设备之间传送信息BXBaseaddress基址寄存器做通用寄存器用;在计算存储器地址时,用作基址寄存器CXCounter计数器做通用寄存器用;保存计数值DXDataregister数据寄存器做通用寄存器用;DX:AX组合可表示双字;DX也用来存放I/O端口地址指针和变址寄存器寄存器名英文名中文名用途SPStackpointer堆栈指针存放堆栈栈顶的偏移地址,只能访问堆栈栈顶的信息BPBasepointer基址指针可作为堆栈区中的一个基址以访问堆栈中的信息,可以访问堆栈中任何位置的信息SISourceindex源变址寄存器SI、DI单独使用时,同DS联用,用来确定数据段中某一存储单元的地址;在串处理指令中,SI和DS联用,DI和ES联用,具有自动递增和自动递减的功能,用于在DS和ES中寻址的目的DIDestinationindex目的变址寄存器段寄存器寄存器名英文名中文名用途CSCodesegment代码段寄存器存放代码段段基地址DSDatasegment数据段寄存器存放数据段段基地址,存放程序中经常使用的数据ESExtrasegment附加锻寄存器存放附加段段基地址,存放程序中不经常使用的数据SSStacksegment堆栈段寄存器存放堆栈段段基地址指令指针寄存器寄存器名英文名中文名用途IPInstructionpointer指令指针在程序运行时,保存下一条将要执行的指令的偏移地址,与CS联用确定下一条指令的物理地址在内存中,指令和数据没有任何区别,都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。那么,CPU根据什么将内存中的信息看作指令?CPU将CS:IP指向的内存单元中的内容看作指令,因为,在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。标志寄存器PSW寄存器名英文名中文名用途PSWProgramStatusWord标志位寄存器或程序状态字存放条件码标志、控制标志和系统标志OFDFIFTFSFZFAFPFCFPSW格式:1511109876420条件标志条件标志用来记录程序中运行结果的状态信息,它们根据有关指令的运行结果由CPU自动设置,这些状态信息往往作为后续条件转移指令的转移控制条件,包括6位:OF:溢出标志,在运算过程中,如操作数超出了机器数的表示范围,称为溢出,OF=1,否则OF=0SF:符号标志,记录结果的符号,结果为负SF=1,否则SF=0ZF:零标志,运算结果为0,ZF=1,否则ZF=0CF:进位标志,进行加法运算时从最高位产生进位,或减法运算从最高位产生借位CF=1,否则CF=0AF:辅助进位标志:本次运算结果,低4位向高4位产生进位或借位,AF=1,否则AF=0PF:奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件,当结果操作数中低8位1的个数为偶数时PF=1,否则PF=0控制标志DF:方向标志,用在串处理指令中控制处理信息的方向。当DF=1时,每次操作后,SI和DI减小,使串处理从高地址向低地址进行,用指令STD设置当DF=0时,每次操作后,SI和DI增大,使串处理从低地址向高地址进行,用指令CLD设置系统标志系统标志用于可屏蔽中断、程序调试等的控制。TF:陷阱标志(单步标志),调试程序时,可设置单步工作方式,TF=1时,CPU每执行完一条指令,就自动产生一次内部中断,使用户能跟踪程序进行调试IF:中断标志,IF=1时,CPU响应可屏蔽中断;IF=0时,即使外部设备有中断申请,CPU也不响应。STI指令使IF=1,CLI指令使IF=0使用寄存器时注意以上介绍的寄存器均为16位寄存器通用寄存器AX、BX、CX、DX都可以拆分为两个8位寄存器:AH和AL、BH和BL、CH和CL、DH和DL,“H”表示高位字节,“L”表示低位字节其他的寄存器不能拆分,BX寄存器如果作为指针使用,也不能拆分指令指针寄存器IP、标志寄存器PSW和堆栈指针SP的内容只能由系统更改,用户不能更改代码段寄存器CS和指令指针寄存器IP配对使用;堆栈段寄存器SS和堆栈指针寄存器SP配对使用用户只能用4个寄存器存放存储单元的偏移地址:SI、DI、BX和BPBP寄存器在默认的情况下用于访问堆栈段8088CPU简介8088CPU是8086CPU的姊妹版8088CPU的内部数据总线宽度是16位,外部数据总线宽度是8位,所以8088CPU称为准16位微处理器。8088CPU的外部地址总线的宽度为20位。8088CPU与8086CPU的区别8088的指令队列长度是4个字节,队列中只要出现一个空闲字节,BIU就会自动访问存储器,取指令来补充队列。8088CPU中,BIU的总线控制电路与外部交换数据的总线宽度,总线控制电路与专用寄存器之间的数据总线宽度都是8位,而EU的内部总线是16位,这样对16位数的读/写操作要两个读/写周期才能完成。8088外部数据总线只有8条,所以分时复用的地址/数据总线为AD7~AD08088中,用IO/M信号代替M/IO信号8088中,只能进行8位数据传输,无BHE信号8086存储器组织(重点)8086存储器地址的分段8086存储器的分体结构堆栈8086存储器地址的分段在存储器中是以字节为单位存储信息的,每个存储单元由唯一的地址来确定。8086系统有20根地址线可寻址1MB字节的存储空间,即对存储器寻址要20位物理地址,而8086为16位机,CPU内部寄存器只有16位,即只能存储16位地址。因此8086系统把整个存储空间分成许多逻辑段,每段容量不超过64KB(即65536字节)。段和段之间可以是连续的,也可以是分开的或重叠的。任何一个单元的实际地址,都是由段基地址和段内偏移地址两部分组成。存储器地址分段示意图分段的策略:把整个1M的地址空间分为65536X16的矩阵,每一行16字节为一小段(paragraph)。如下所示:0000000001……0000F0001000010……0001F………………………………1234012341……1234F………………………………FFFF0FFFF1……FFFFF最左边的一列就可以作为段的起始地址,而段寄存器是16位的,无法存放20位的地址,所以在存放时,只考虑最高16位,最低的4位均为0,不存放。物理地址的形成段基地址:存放在段寄存器(CSDSESSS)中的地址,表示段的起始。偏移地址:相对于段的起始地址的偏移量,可以用BXBPSIDISPIP存放。逻辑地址:存储器的逻辑地址由段基地址和偏移地址组成,程序设计时采用逻辑地址。物理地址:存储器的绝对地址,范围为00000H~FFFFFH,是CPU访问存储器的实际寻址地址,按下式进行计算:偏移地址段基地址物理地址16举例已知DS=10E4H,ES=10F4H,SS=21F0H,CS=31FFH,画出此时存储器地址分段图段寄存器DS装入数据12ABH,写出段的起始地址和结束地址。CS:IP的组合为34ABH:1230H,写出要执行指令的存储器物理地址。SS:SP的组合为2900H:4A00H,写出堆栈栈顶的物理地址。已知DS=101AH,BX=3200H,写出数据段中该存储单元的物理地址。逻辑地址的来源操作类型隐含段地址替换段地址偏移地址取指令CS无IP堆栈操作SS无SPBP为间址SSCSDSES有效地址EA存取变量DSCSESSS有效地址EA源字符串DSCSESSSSI目的字符串ES无DI问题16位机内存管理为什么采用分段管理?有什么意义?程序的重定位、浮动地址的编码和提高内存的利用率和代码的重用率等物理地址的含义,存储单元的物理地址是唯一的吗?逻辑地址的构成,存储单元的逻辑地址是唯一的吗?如何由逻辑地址得到物理地址?8086存储器的分体结构8086系统中,1MB的存储空间分成两个存储体:偶地址存储体和奇地址存储体,各为512KB。8086系统存储器与总线的连接奇偶存储体