80x86微处理器结构及其工作模式

Posted the_scent_of_th_soul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了80x86微处理器结构及其工作模式相关的知识,希望对你有一定的参考价值。

80X86是一系列微处理器

微处理器又称为中央处理单元,即CPU,是一块集成电路芯片。它是微型计算机的核心组成部分。
既然微处理器是微型计算机的核心,那么我们有必要先来简单地讨论一下微型计算机。

微型计算机:

微型计算机是指以微处理器为核心,配上存储器、输入/输出接口电路等所组成的计算机(又称为主机)。

微型计算机系统是指以微型计算机为中心,配以相应的外围设备、电源和辅助电路(统称硬件)以及指挥电路工作的系统软件所构成的系统。即,与一般的计算机系统一样,微型计算机系统也是由硬件和软件两部分组成的。

下面,我将介绍一些微型计算机系统中所涉及的基本概念,可能每个概念之间暂时没有很明显的关联,但是,本着不用就不提的原则,尽量将所提到的知识点都串起来形成一个易于理解的简单知识框架。

就像大脑控制着人工作一样,
CPU控制着整个计算机的运作并进行运算。要想让一个CPU工作就必须向它提供指令和数据。指令和数据在存储器中存放,也就是我们平时所说的内存(以下如果没做特别声明,所提到的存储器就是指内存)。磁盘不同于内存,如果磁盘上面的数据或程序不被读入内存,就无法被CPU使用。

指令和数据是应用上的概念,指令和数据没有任何区别,都是二进制信息。 CPU在工作时把有的信息看作指令,有的信息看作数据,为同样的信息赋予了不同的含义。

存储单元:存储器被划分成若干个存储单元,一个存储单元存储一个字节的信息,也就是8个二进制位。
有以下单位换算:

1B = 8个二进制位
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

每个存储单元从0开始顺序编号,这些编号可以看作存储单元在内存中的地址。如下图是一个拥有128个存储单元的存储器:

CPU工作时经常要从内存中读取数据或者向内存中写入数据,这个过程需要CPU和存储器之间进行地址信息、数据信息和控制信息交互。
那么,CPU是通过什么将这三种信息传到存储器芯片中的呢?电子计算机能处理、传输的信息都是电信号,电信号当然要用导线传送。

在计算机中有专门连接CPU和其他芯片的导线,通常称为总线。总线从物理上来讲,就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为地址总线、控制总线和数据总线三类。
总线可以是带状的扁平电缆线,也可以是印刷板上一层极薄的金属连线。

CPU从内存单元读取数据的过程如下图:

(1)CPU通过地址线将地址信息3发出
(2)CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。
(3)存储器将3号单元中的数据08通过数据线送入CPU。

写操作与读操作类似!如向3号单元写入数据2,则步骤为:

(1)CPU通过地址线将地址信息3发出。
(2)CPU通过控制总线发出内存写命令,选中存储器芯片,并通知它,要向里面写数据。
(3)CPU通过数据总线将数据2送入内存的3号单元中。

下面我们来简单介绍一下这三种总线,

地址总线AB:在对存储器或I/O端口进行访问时,传送由CPU提供的要访问的存储单元或I/O端口的地址信息。AB是单向总线。
一个CPU有N根地址线,则可以说这个CPU的地址总线宽度为N,这样的CPU可以寻找2的N次方个内存单元。

数据总线DB:CPU与内存或其他器件之间的数据传送是通过数据总线来完成的,数据总线的宽度决定了CPU和外界的数据传送速度。8根数据总线一次可传送一个字节。8088CPU的数据总线宽度为8,8086CPU的数据总线宽度为16。
例如,CPU想向内存中写入数据89D8。
因为8088一次只能传送一个字节的数据也就是8位,所以它要分两次传送,第一次传送D8,第二次传送89。但是8086有16根数据总线,可以传送两个字节的数据,所以可一次性将数据89D8传入内存。DB是双向总线

控制总线CB:控制总线是一些不同的控制线的集合。有多少根控制总线就意味着CPU提供了对外部器件的多少种控制,控制总线的宽度决定了CPU对外部器件的控制能力。

我们知道,CPU由运算器(ALU)、控制器(CU)和内部寄存器(R)三部分组成。

控制器:

控制器是全机的指挥中心,它负责把指令逐条从存储器中取出,经译码分析后向全机发出取数、执行、存数等控制命令,以完成程序所要求的功能。控制器包括以下几个部分:

a.指令寄存器IR:用来存放从存储器取出的将要执行的指令码。
当执行一条指令时,先把它从内存取到数据缓冲寄存器DR中,然后再传送到指令寄存器IR中。
b.指令译码器ID:对指令寄存器IR中的指令操作码字段进行译码,以确定该指令执行什么操作。

需要说明的是,指令通常由操作码和操作数两部分组成。操作码表示该指令完成的操作,操作数表示参加操作的数本身或操作数所在地址。

c.可编程逻辑阵列PLA:用于产生取指令和执行指令所需要的各种微操作控制信号,并经过控制总线CB送往有关部件,使计算机完成相应的操作。

内部寄存器:

1)程序计数器PC:程序计数器有时也被称为指令指针(IP),IP一般都是由CPU自动修改加一,使其总是存放下一条要执行的指令所在存储单元的地址。但当遇到跳转等改变程序执行顺序的指令时,PC(IP)将从指令寄存器IR
中的地址字段得到。
2)地址寄存器AR:用来存放正要取出的指令的地址或操作数的地址。
3)数据缓冲寄存器DR:用来暂时存放指令或数据。它是CPU和内存、外部设备之间信息传送的中转站,用来补偿CPU和内存、外围设备之间在操作速度上存在的差异。
4)累加器:用来暂时存放ALU运算结果。
5)标志寄存器FLAGS:有时也称为程序状态字(PSW)。编写程序时,可以通过测试有关标志位的状态(1或0)来决定程序的流向。
6)寄存器阵列:寄存器阵列实际上就相当于CPU内部的RAM,可避免CPU频繁的访问存储器,提高机器的运行速度。不同类型的CPU的寄存器阵列规模大小会有所不同。

CPU还有一个组成部分是运算器(算数逻辑单元ALU),运算器的主要作用就是运算嘛,参加运算的两个操作数一个来自累加器A,一个来自内部数据总线,可以是缓冲寄存器中的内容,也可以是寄存器阵列中某个寄存器中的内容。

在这里我们对内存的描述就只是在需要用到某个概念的时候就简单介绍一下,由于它所含信息量过多,这儿不做详细的说明。

在每个PC机中,都有一个主板。主板上有核心器件和一些主要器件,这些器件通过总线相连。这些器件有CPU、存储器、外围芯片组、扩展插槽等。扩展插槽上一般插有RAM内存条和各类接卡口。

CPU对外部设备都不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展槽上的接卡口。扩展槽通过总线和CPU相连,所以接卡口也通过总线和 CPU相连。CPU通过总线向接卡口发送命令,接卡口根据命令控制外设工作。

好了,对于微型计算机的硬件我们就先简单介绍到这里,主要描述了主机上的CPU所涉及到的一些硬件概念。对于系统中的其他硬件例如,外围设备,以及主机上的存储器、I/O接口与输入输出设备等。

同时,软件也是微型计算机系统不可缺少的组成部分,软件包括系统软件和用户(应用软件)。系统软件是不需要干预的,为其他程序的开发、调试以及运行等建立一个良好环境的程序。它主要包括操作系统和系统应用程序。

微型计算机的工作过程:

1) 把第一条指令所在存储单元的地址赋给程序计数器PC。
2)取址,得到指令
3)对指令的操作码字段进行译码,发出执行指令的微操作控制信号。
4)执行指令,完成指令所规定的操作。

对微型计算机系统做了一些简单的了解以后,我们对微处理器的工作情景也就更为熟悉,让我们先来看一幅处理器内部寄存器的轮廓图。

这块儿说明一下,做图片的时候由于考虑不周,图片比例没调好,显示出来特别小,可以把缩放率调大一点再看图,例如,Ctrl + 四下,哈哈!!

我们注意到上述多次提到段地址、段寄存器,这两个名词中包含者“段”这个概念,下面我们就来简单说明一下,什么是段。
8086CPU用 基础地址(段地址×16)+偏移地址 = 物理地址 的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

为了防止不理解,我这里再重申一遍。也就是说,实际内存中并没有分段,段的划分来自于CPU,只是CPU自己用段地址和偏移地址来表示物理地址而已。

以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段。这里的编程指的是汇编语言编程。需要注意的是,由于段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数。偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

那么,基础地址为什么一定要是 段地址×16不是乘其他数呢?由于地址总线是20位的,所以CPU在对内存访问时,必须提供一个20位的地址信息给地址总线。又因为段地址存放在16位的段寄存器中,所以必须×16(10H),即左移四位才能使之变成20位的基础地址,再加上偏移量就能定位到具体的物理内存单元了。

本来想着用一篇博客的内容就把8086微处理器大致介绍完,但是写着写着才发现牵扯的内容实在太多,一不小心就跑远了。下面我以从功能上划分8086微处理器为结尾,暂时先把简单概念介绍到这里,至于具体的堆栈操作以及中断和工作模式等概念和它们所用到的一些基础的汇编语言指令,只好在下篇再作介绍。

CPU从功能上可分为两大部分:

1.总线接口单元BIU:

总线接口单元BIU的功能是负责完成CPU与存储器或I/O设备之间的数据传送。

2.执行单元EU:

执行单元不与系统外部直接相连,它的功能只是负责执行指令。执行的指令从BIU的指令缓冲队列中直接得到。执行指令时若需要从存储器或I/O端口读写操作数,由EU向BIU发出请求,再由BIU对存储器或I/O端口进行访问。
总之就是,BIU负责与系统外部交互,EU负责一心一意的执行指令。

以上是关于80x86微处理器结构及其工作模式的主要内容,如果未能解决你的问题,请参考以下文章

ucore实验Lab1知识点总结

80x86的保护模式

操作系统学习80x86保护模式内存管理

80386的介绍

内核基础概念

微卡口摄像机