8086微处理器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086/8088微处理器
8086是全16位微处理器,内、外数据总线都是16位。

8088是准16位微处理器,内数据总线是16位,外数据总线是8位。

二者除外数据总线位数及与此相关的部分逻辑稍有差别外,内部结构和基本性能相同,指令系统完全兼容。

1. 内部结构
8086/8088微处理器从功能上可分为两个独立的处理单元:执行单元EU(Execution Unit)和总线接口单元BIU(Bus Interface Unit)。

其内部结构如图2.1所示。

执行单元EU由8个16位的通用寄存器、1个16位的标志寄存器、1个16位的暂存寄存器、1个16位的算术逻辑单元ALU及EU控制电路组成。

8个通用寄存器中,AX、BX、CX、DX为数据寄存器,用于存放参与运算的数据或运算的结果,它们中的每一个既可以作为一个16位寄存器使用,又可以将高、低8位分别作为两个独立的8位寄存器使用。

作为8位寄存器时,它们的名称分别为AL、AH、BL、BH、CL、CH、DL、DH。

这些寄存器除了用作通用寄存器外,通常还有各自特殊的用法: AX作累加器,所有的I/O指令及一部分串操作必须使用AX或AL来执行,另外还有一些指令使用AX及由AX 分出的AL、AH作为缺省的操作数,如乘、除法指令;BX作基址寄存器,在计算内存地址时,常用于存放基址;CX作计数寄存器,可以在循环、重复的串操作及移位操作中被作为计数器来使用;DX作数据寄存器,在一些I/O指令中用来保存端口地址。

指针寄存器SP和BP分别为堆栈指针寄存器和基址指针寄存器,作为通用寄存器的一种,它们可以存放数据,但实际上,它们更经常、更重要的用途是存放内存单元的偏移地址。

而变址寄存器DI和SI则主要用于变址寻址方式的目的变址和源变址。

图2.1 8086/8088CPU内部结构示意图
总线接口单元BIU由4个16位的段寄存器(CS、SS、DS、ES)、1个16位的指令指针寄存器IP、1个与EU通信的内部暂存器、1个指令队列、1个计算20位物理地址的地址加法器∑及总线控制电路组成。

其中,4个段寄存器分别用于存放代码段(CS)、堆栈段(SS)、数据段(DS)和附加段(ES)的段基址的高16位。

指令指针寄存器IP类似程序计数器PC,它总是指向下一条待预取指令在现行代码段中相对于代码段基址的偏移量。

地址加法器∑用于将段基址与偏移量按一定的规则相加,形成系统所需的20位物理地址,它的输出直接送往地址总线。

指令队列是一组先进先出的寄存器组,用于存放预取的指令。

8088的指令队列长度为4个字节,8086为6个字节。

总线控制电路用于产生所需的控制和状态信号。

执行单元EU负责分析和执行指令,即EU控制电路从BIU的指令队列中取出指令操作码,通过译码电路分析要进行什么操作,发出相应的控制信号,包括控制数据经过“ALU数据总线”的流向等。

如果是运算操作,操作数经暂存寄存器送入ALU,运算结果经ALU数据总线送到相应寄存器或通过内部暂存器由BIU送入内存单元或外设,同时将运算结果的特征保留在标志寄存器FLAGS中。

如果执行指令需从外界取数据,则EU向BIU发出请求,由BIU通过外部数据总线访问存储器或外部设备,通过BIU的内部暂存器向“ALU数据总线”传送数据。

BIU负责执行所有的“外部总线”操作,即当EU从指令队列中取走指令时,BIU即从内存中取出后续指令代码放入队列中;当EU需要数据时,BIU根据EU给出的地址,从指定的内存单元或外设中取出数据供EU使用;当运算结束时,BIU将运算结果送给指定的内存单元或外设。

2. 指令流水线和存储器分段管理机制
在8086/8088的设计中,引入了两个重要的结构概念:指令流水线和存储器分段。

这两个概念在以后升级的Intel系列微处理器中一直被沿用和发展。

1) 指令流水线
众所周知,在传统的8位微处理器(如8080A、Z-80)中,取指令操作码、分析、执行指令操作是串行进行的。

即取第K条指令操作码,分析和执行第K条指令;再取第K+1条指令操作码,分析和执行第K+1条指令;以后依次类推。

而在8086/8088CPU中,EU和BIU是两个独立的功能部件,指令队列的存在使它们并行工作,即取指令操作码、分析、执行指令操作重叠进行,从而形成了两级“指令流水线”结构。

如图2.2所示,这种“流水线”技术的引入,减少了CPU为取指令而必须等待的时间,提高了CPU的利用率,加快了整机的运行速度,另外也降低了对存储器存取速度的要求。

图2.2 8086/8088的指令“流水”操作
2) 存储器分段管理机制
8086/8088有20根地址线,可寻址的存储空间为1MB,而它的内部寄存器包括指令指针、堆栈指针等只有16位,这就是说它能处理的地址信息仅16位,即最大寻址空间只有64KB。

为解决这一矛盾,达到寻址1MB存储空间的目的,8086/8088采用了一种巧妙的存储器分段方法,即将1MB的物理存储空间分成若干逻辑段,每个逻辑段的最大长度为64KB。

这样,一个具体的存储单元就可以由此单元所在段的起始地址和段内偏移地址来标识。

段的起始单元地址被称为段基址,它是一个能被16整除的数,即段基址的低4位总是为“0”;而段内偏移地址是指此单元相对于所在段的段基址的偏移量。

BIU中的4个16位段寄存器(CS、SS、DS、ES)分别用以指示4个现行可寻址段的段基址,它们实际存放着段基址的高16位,其中,CS指示现行代码段、SS指示现行堆栈段、DS指示现行数据段、ES指示现行附加数据段。

借助这4个段寄存器,CPU同一时刻可以对4个现行逻辑段进行寻址,但在不同的时候,CPU可以通过预置段寄存器的内容来访问不同的存储区域。

要注意,这种存储空间的分段方式不是唯一的,各段之间可以连续、分离、部分重叠或完全重叠。

这主要取决对各个段寄存器的预置内容。

这样一来,一个具体的存储单元既可以属于一个逻辑段,也可以同时属于多个逻辑段。

图2.3 物理地址生成示意图
采用存储器分段管理后,存储器地址有物理地址和逻辑地址之分。

物理地址是1MB存储器空间中的某一单元地址,用20位地址码表示,其编码范围为00000H~FFFFFH。

CPU访问存储器时,地址总线AB上送出的是物理地址,编制程序时,则采用逻辑地址。

逻辑地址由段基址和段内偏移地址(段基址:偏移地址)两部分组成,两者都是16位。

CPU访问存储器时,需在BIU的地址加法器中进行逻辑地址到物理地址的变换,变换关系为:
物理地址=段基址×16+偏移地址
变换过程如图2.3所示。

相关文档
最新文档