简述8086计算机工作原理,8086/8088CPU的基本结构与其工作原理

2023-05-16

之前,我们给出了计算机系统模型,它并不特别针对某一种具体的计算机系统,只是为读者快速搭建一个深入计算机系统底层的框架。并且,在上一章中,着重介绍的是整个计算机系统的基本组成以及它的工作原理。由于CPU是计算机系统中的核心部件,机器指令的执行是由它来完成的,因此,细化理解CPU的基本结构以及它的工作原理成为学习指令系统的基础。本章将针对8086/8088CPU芯片,介绍其基本构成与工作原理,为学习下一章的80868088CPU指令系统做好准备。读者应当注意,这一章的内容组织与之前所学习的不同,一方面,它着重介CPU这一个功能模块的结构和原理,而不是整个计算机系统;另一方面,它针对的是特定型号的CPU芯片,而不是一般化的模型。

ead533cbaea8344307065f307dda0251.pngCPU

8086、8088两种CPU芯片的区别主要在于数据引脚的数量,也即它们所连接的数据总线宽度。8086能够连接16位数据总线,一次总线操作最多可以读取一个字(在80868088中为16位)的数据量,而8088只能连接8位数据总线,一次总线操作最多只能读取一个字节(8位)。但这两种CPU芯片的内部结构几乎是完全一致的,CPU内部能够并行处理的最大二进制位数都是一个字。接下来我们将了解8086/8088CPU芯片的基本结构与它们的工作原理。想要知道芯片的基本结构即工作原理,我们需要知道以下六点。1.基本的流水线结构从图4.1.1可以看到,CPU内部结构分为BIU和EU两个功能模块。其中BIU的全称为 Bus Interface Unit,即总线接口单元,其主要功能是实现CPU与系统总线的信号连接、数据交换。所有与总线操作相关的时序过程都由BIU模块执行,其中最频繁的是内存单元、端口的数据读写操作;所有有关物理地址的计算机过程也由BIU完成。EU的全称为Execute Unit,即执行单元,它的主要功能为解释并执行指令。将CPU分为两个功能模块的目的在于读取指令与执行指令这两个步骤能够在时间上重叠,从而基本实现流水线结构。

2.指令队列

指令队列这一部件位于BIU模块,它具有多个字节的存储单元。每次BU模块启动读取下一条指令的操作后,将所读取到的指令(字节数随不同指令而变化)暂存在指令队列中。只要总线出现空闲,BIU模块就会自动启动读取指令的时序操作,直到指令队列填充满为止。位于EU中的控制器会将指令队列中的机器指令操作码字段读取出来,并译码生成相应控制信号,从而执行指令。指令队列中的机器指令被读取的顺序按照先进先出FIFO的队列结构原则,最先由BIU保存在指令队列中的指令,最先被EU读出执行。应当注意,读取指令这一时序过程与执行指令无关,它是由BIU自动启动的,因而指令队列与我们后面将要介绍的寄存器组不同,它们不能被机器指令访问。换言之,我们在设计汇编语言程序时,不能操作指令队列,它是由CPU自动管理的。

3.控制器控制器位于CPU的EU模块,它是CPU的控制中心,无论是作用于CPU内部的控信号,还是CPU发送到系统总线的控制信号,几乎全部在这里产生,而产生控制信号的依据则来源于对机器指令操作码字段的译码。由于本教材只说明CPU工作的基本原理,因此指令译码器的原理与设计方法请读者参阅《计算机组成原理》相关教材。控制器按照机器指令规定的时序产生控制信号,如果控制信号需要发送到控制总线,则控制器将这些控制信号传送到BU模块的总线控制逻辑这一部件,由总线控制逻辑将控制信号传递到控制总线。4.地址加法器地址加法器位于BIU模块,它的功能是由逻辑地址计算物理地址,并最终由该器件将物理地址传送到BIU的总线控制逻辑,再由总线控制逻辑将物理地址传送到地址总线。在说明地址加法器的运算原理前,我们将先说明逻輯地址的概念,以及CPU对内部存储器的分段管理方式。我们已经说明了8086/8088CPU能支持的地址总线宽度以及物理地址范围,8086/8088CPU能支持的地址总线宽度为20位,对于内部存储器而言,其寻址范围为1M字节,而访问端口时仅使用地址总线的低16位,因而端口寻址范围为64K字节。在CPU内部,所有寄存器的二进制位数最大为16位,因此,没有哪一个寄存器能够存放20位的物理地址。那么,我们如何在CPU内部表达外部存储单元的物理地址呢?为了协调CPU内外地址位数的差异,8086/8088CPU采用了对存储器的分段管理方式,并使用逻辑地址为CPU内部的物理地址表达形式。首先,解释段的概念,一个段是指位于内部存储器中的一块连续存储空间,它由物理地址连续的多个字节单元构成。那么,何谓逻辑地址?它与物理地址的关系又是怎样的呢?逻辑地址由两个16位的地址分量构成,其中一个为段基址,另一个为偏移量,两个分量均为无符号数编码。逻辑地址转换为物理地址运算过程可表示:

段基址=段基值 * 16

物理地址=段基址+偏移量

8f1513e8e6e7d6d19acdd50615a5cab3.png

首先,16位的段基址左移4位,低位补充4个0,相当于乘以24,得到20位的段基址。段基址为20位,已经可以理解为物理地址,但它仅是一个段的起始地址,要使CPU能够定位段内的所有内存单元,那么必须在段基址的基础上加上偏移量。偏移量的含义为距离段基址的偏移字节数。偏移量指定不同,那么所访问的内存单元也就不同。应当注意,20位的段基址与16位的偏移量相加,是低位对齐的加法,加法结果即为20位物理地址。我们还应当注意,任意指定一个确定的逻辑地址,那么经过式(4.1.1)转换后得到的物理地址是唯一的,换言之,给定一个逻辑地址,就能唯一地定位一个内存单元。但是相反的转换过程并不能得到唯一的结果,给定一个物理地址,我们并不能得到唯一的段基址、偏移量分解,好在这种逆转换在系统内是没有用途的,地址加法器也只实施由逻辑地址到物理地址的转换那么,既然在CPU内部使用的是逻辑地址,相应地,我们在进行汇编语言程序设计时所使用的内存单元地址也就是逻辑地址,而非物理地址。物理地址仅在CPU执行总线操作时出现,换言之,物理地址存在于程序的执行阶段,而非程序的设计阶段。对端口地址而言,由于其仅使用地址总线的低16位,因此,逻辑地址等同于物理地址,我们不去区分它们地址加法器所完成的操作就是将逻辑地址转换为物理地址后,提交给总线控制逻辑。这样的地址转换可能发生在BU读取指令时,也可能发生在EU执行指令时,还可能发生在其他的时序过程中。最后,读者也许会问:段基值与偏移量分别保存在CPU的什么位置呢,它们是怎样计算得到的呢?CPU中提供了一个段寄存器组,段基值就是由这一组16位段寄存器提供的。而偏移量的获取方式则丰富得多,也复杂得多,它们既可以来自于机器指令中的位移量字段,也可以来自于指令指针寄存器,或者有几种分量相加而得到。有关偏移量的获取方式,我们将在以后分析寻址方式时详细讨论。

f0aac8672edf6048d3add20b883e1c0b.png地址

5.运算器运算器位于CPU的EU模块,用于完成机器指令要求的算术运算、逻辑运算功能,是CPU内的运算中心,最大支持双操作数运算,例如两个操作数相加或相减等,它除了完成机器指令指定的数据运算外,还可用于生成逻辑地址中的偏移量分量。若为数据运算,其操作数可能来源于数据寄存器、内存单元、指令中的立即数;若为偏移量运算,其操作数均解释为偏移量分量,来源于地址指针寄存器、指令中的位移量。如果机器指令有这样的要求,运算器会将运算过程和运算结果的某些性质按照标志位的形式保存到标志寄存器。有关运算器的详细原理,我们将在第5章学习基本指令系统时体会到6.总线控制逻辑总线控制逻辑位于BIU模块,用于控制在适当的时刻向总线传递相应信号,或从总线上接受相应信号,CPU只能通过总线控制逻辑才能与系统总线实现信号交互。由于总线控制逻辑是CPU自动进行管理的,我们的指令没办法直接操作该器件,因此在这里不详述其原理,读者可参阅《计算机组成原理》相关教材。

这就是CPU的基本原理及其运行的原理

举报/反馈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简述8086计算机工作原理,8086/8088CPU的基本结构与其工作原理 的相关文章

随机推荐