微机原理与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 微处理器的结构及工作原理

2.1.1 微处理器的基本结构

图2-1是经过简化的既易于理解又保持了CPU主要特征的简单微处理器的内部的基本结构,图中虚线左边是CPU,它包含运算器ALU、控制器和寄存器组三部分,各部分由内部总线相连。该机内部寄存器为8位,机器字长因而也为8位,表现在外部数据总线DB也是8位;虚线右边是容量为256个存储单元(每个存储单元存放一个8位的二进制数)的存储器,故指示存储单元的地址总线AB也只有8位(28=256)。

图2-1 简单微处理器结构

微处理器CPU是整个微型计算机的核心部件,由运算器和控制器组成,其主要任务是进行各种算术运算、逻辑运算,并指挥、组织和协调计算机各个部件的工作。CPU一般具有以下基本功能:

· 指明将要执行的指令所在的存储单元的地址,取出指令并进行译码;

· 执行算术和逻辑运算,暂存少量数据;

· 传输数据,包括在CPU内部传输数据及与外界交换数据;

· 对各部件进行控制,包括对CPU内部的控制和对CPU以外部件的控制;

· 响应其他部件发出的中断请求和总线请求等。

CPU中各主要功能部件简单叙述如下:

1.寄存器组

寄存器是CPU的组成部分,用来存放数据和地址。存放的数据包括参与运算的源操作数、操作的中间结果以及最终结果。寄存器组中每个寄存器都有指定的名称和编号,有些寄存器在程序执行过程中可承担多种任务,称为通用寄存器,某些通用寄存器还兼作一些指定的用途;有些寄存器则专门作某种特定的用途,称为专用寄存器。显然寄存器越多,程序的设计越灵活方便,可以减少程序执行过程中访问内存的次数,从而提高程序运行的速度和效率。

累加器A(Accumulator)和标志寄存器F(Flag)是寄存器组中极为重要的两个寄存器。进行算术、逻辑运算的操作数主要就是来自于累加器,并且运算后的结果一般也送回累加器。CPU与内存单元交换数据时,累加器也是基本的源寄存器或目标寄存器。

标志寄存器F则主要用来保存ALU运算或CPU其他操作指令执行后结果的某些特征和状态,它的某些位还用做控制标志。

2.算术逻辑单元ALU

在微型计算机中,任何数学运算都可以用加法和移位这两种基本操作来实现,所以ALU主要由加法器、移位电路、门控制电路组成。它在指令译码器产生的操作控制信号作用下,完成各种算术运算、逻辑运算或其他操作。ALU有两个输入端,接受两个待处理的操作数,执行运算后,运算结果从输出端送到某个寄存器,或者经数据总线送到片外的存储器中保存起来,同时,运算结果的某些特征位则送标志寄存器中。

浮点运算单元FPU(Floating Point Unit)主要负责浮点运算和高精度整数运算。有些FPU还具有向量运算的功能,另外一些则有专门的向量处理单元。

3.控制器

计算机从开始工作到一系列操作的完成,都是根据预先编好的程序自动进行的。程序中每一条指令均指明了机器做什么和怎样做。为了完成一条指令所规定的操作,机器的有关部件、线路要相应地完成一系列基本动作,而这些基本动作又必须按时间先后次序,互相配合,有节奏地完成。计算机要完成这样复杂的动作,必须要有控制器统一指挥才行。控制器是指挥全机工作的控制中心,控制器源源不断地从内存储器取来指令,并对之译码,产生计算机各部件所需要的操作控制信号。为了完成上述功能,控制器至少必须包括下列电路:

(1)程序计数器PC(Program Counter)

程序计数器PC又称指令指示器IP(Instruction Pointer),是用来表征和计算指令序号的计数器,控制对指令的读取。程序在内存储器中是按指令的顺序预先存放的,在多数情况下,PC按顺序计数,CPU按PC 指出的顺序,逐条逐字节从内存中取出指令,分析并执行指令。每当取出一个字节的指令后,PC自动加1,PC中的内容就是下一个指令字节所在的存储单元的地址。当遇到转移类指令、调用指令和返回指令时,指令执行的结果是将要转移的目标地址送入PC中,CPU按照PC中新的内容取指令,从而实现了程序的转移。

PC的位数取决于微处理器所能寻址的存储空间,例如寻址空间为256个字节,PC为8位(28=256);寻址空间为64K字节,则PC须为16位(216=64K)。

(2)地址寄存器AR(Address Register)

地址寄存器存放存储单元地址或I/O端口地址,而该存储单元或端口中存放将要执行的指令,或将要读写的数据。

(3)数据寄存器DR(Data Register)

数据寄存器用来存放读或写的数据,这些数据可能是参加运算的数据、结果或者是指令、地址等。

(4)指令寄存器IR(Instruction Register)和指令译码器ID(Instruction Decoder)

指令寄存器接收从存储器中取出的指令代码,再把该指令代码送到指令译码器。指令译码器对指令进行分析、译码,确定指令的操作类别、条件及如何寻找操作数,从而在不同时刻产生各种不同的操作控制信号去控制各部件协调工作。

(5)时序

微处理器是一个非常复杂的系统,各种控制信号间有着非常严格的时间关系。时序系统的作用就在于将各种控制信号严格定时,使多个控制信号在时间上相互配合完成特定的功能。

① 时序的概念

大多数处理器执行一条指令都要经过取指令、指令译码和执行指令这3个步骤。取指令过程就是将存放在主存储器中的指令代码读到微处理器的指令寄存器中的过程。每执行一条指令,微处理器的时序控制器都要发出一系列特定的控制信号。微处理器的时序就是指微处理器执行各种指令的动作过程及其在时间上的对应关系。

② 取指周期和总线周期

微处理器取出并执行一条指令,都要完成一系列的操作。由于指令的操作功能不同,执行一条指令所需要的时间也不尽相同。为分析方便,可将一条指令的执行过程分为若干个不同的基本操作,完成每一个基本操作所需的时间称为机器周期。任何一条指令的第一个机器周期都是取指令的过程,故称为取指周期。而微处理器完成的每一个基本的动作都是在时钟脉冲的作用下,一步一步完成的,故每个时钟周期是微处理器处理动作的最小的时间单位,称为T周期或T状态。时钟周期可通过微处理器的时钟主频计算得到。通常把CPU通过总线对微处理器外部(存储器或I/O接口)进行一次访问所需时间称为一个总线周期。一个总线周期一般包含4个时钟周期。

一个取指周期包括若干个机器周期,一个机器周期由若干个时钟周期组成。

时序部件产生计算机系统各个部件所需要的时序信号。

4.总线(BUS)

微处理器采用内部总线结构,内部总线是各部件(如运算器、寄存器、控制器、Cache等)之间传输信息的公共通道。系统总线是连接CPU、存储器或I/O端口等部件之间的总线,在总线上流动的信息大致可分为两类:一类是数据和程序,数据包括程序运行所需的原始数据和程序运行的结果以及这些数据的地址信息。另一类是控制器向各部件发出的控制命令以及各部件发给控制器的状态信息。微处理器利用三组总线即数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus)分别传输指令及指令执行过程中相关的数据、地址信息和控制信息。

(1)数据总线

数据总线是在CPU、存储器或I/O端口等部件之间传递数据的通道,每次传输一个“计算机字”,因此,其宽度(根数)通常与计算机的字长一致。无论对CPU、存储器还是I/O端口来说,数据总线是有“进”有“出”的,所以数据总线的传输是双向的。

(2)地址总线

地址总线是寻找、传输存储单元或I/O端口的地址信息的总线。因此,地址总线是CPU用来确定与哪一个存储单元或I/O端口进行信息交换的依据,任何读/写操作都要明确操作数所在的地址。一般来说,CPU对指令信息进行译码、分析,从而获得这个地址,因此地址总线是由CPU输出给存储器或I/O端口。地址总线的根数决定了CPU当前可直接寻址空间的大小。8位地址总线可寻址256个存储单元或I/O端口(28=256),16位地址总线可寻址空间为64KB(216=64KB),20位地址总线可寻址空间为1MB(220=1MB)。

(3)控制总线

CPU控制器发往各部件的控制信号线以及各部件发给CPU的状态信号线构成了“控制总线”,因此控制总线中某些线的方向是由CPU向外,称为输出控制线,也有些线是指向CPU,称为输入控制线。甚至有个别控制线在某种状态下是输入,在另一种状态下是输出,因此,控制线总体上是“双向”的,但就控制总线中某一根来说,在一种确定状态下,只能表示一种信息,其传输是单向的。

5.CPU的高速缓存

CPU缓存(Cache Memory)位于CPU与内存之间,它的容量比内存小但交换速度快。目前缓存有三级,一级缓存的容量在4KB到46KB之间,二级缓存的容量则分为128KB、256KB、512KB、1MB、2MB等,三级缓存容量达到12MB。一级缓存容量各产品之间相差不大,而二级缓存容量则是提高CPU性能的关键。双核心CPU的二级缓存比较特殊,和以前的单核心CPU相比,最重要的就是两个内核的缓存所保存的数据要保持一致,否则就会出现错误。Pentium D和Pentium EE的二级缓存都是CPU内部两个内核具有互相独立的二级缓存,Core Duo使用的核心为Yonah,它的二级缓存则是两个核心共享2MB的二级缓存,实现了真正意义上的缓存数据同步,大幅度降低了数据延迟,减少了对前端总线的占用。

CPU内核集成了一级缓存和二级缓存。一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。两者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。Intel公司在推出Pentium 4处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为12KµOps,表示能存储12K条微指令。

在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异。目前,较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的一种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

2.1.2 处理器的基本工作原理

1.存储程序的概念

计算机无论做什么事情,也无论事情复杂与否,都必须执行相应的程序。

程序是人们为解决某个实际问题而事先设计好的具体的操作步骤,由指示计算机执行具体操作的有序命令(即指令)序列组成,并被存储在存储器中,计算机的整个工作过程就是周而复始地从存储器中取出指令、分析指令和执行指令。典型的指令有传输、移位、算术运算、逻辑运算、停机等等。一种型号的计算机所能执行的所有指令的集合就是该种计算机的指令系统,不同计算机的指令系统也不尽相同。指令系统表征了计算机的基本操作,反映了机器功能的强弱,是在设计计算机时就确定下来的。

2.指令的执行过程

要解决某一问题,必须对其进行具体分析,提出解决问题的方法和步骤,即算法;然后用该计算机指令系统中的指令来描述该算法,即设计程序。

程序设计一般分为3级:机器语言程序设计、汇编语言程序设计和高级语言程序设计。机器语言程序是计算机能够理解和直接执行的程序,由一系列二进制编码组成;汇编语言程序是用助记符语言表示的程序,计算机不能直接“识别”,需经过称为汇编程序的翻译把它转换为机器语言方能被执行。机器语言指令与汇编语言指令基本上一一对应,都是面向机器的。而高级语言是不依赖于具体机型只面向过程的程序设计语言,用它编写的程序,需经过编译程序或解释程序的翻译方能被执行。

下面我们用汇编语言进行程序设计,计算8H+1BH=?。尽管计算极其简单,但没有相应的程序计算机是不会自己去处理的。

有三条用汇编指令形式表示的程序为:

  MOV AL,08H

  ADD AL,1BH

  HLT

第一条指令MOV AL,08H是把立即数08H送入累加器AL;第2条指令ADD AL,1BH是把AL中的内容(即上一条指令操作结果AL=08H)同立即数1BH相加,结果为08H+1BH=23H存入AL中;第三条指令HLT为暂停指令。可见这三条指令的功能为把08H和1BH相加后存放在AL中。

微处理器只能识别机器码,因此上述指令必须以机器码形式表示如下:

    MOV AL,08H—10110000 B(B表示二进制码)
                 00001000 B
    ADD AL,1BH—00000100 B
                 00011011 B
    HLT        —11110100 B

三条指令共5个字节,存放在内存储器中000H~004H 5个存储单元中,如图2-2所示。

图2-2 指令在内存中的存放示意图

(1)取第一条指令操作码的操作过程。操作过程如图2-3所示。

图2-3 取第一条指令操作码的操作过程

首先将第一条指令第一字节的地址000H赋予IP,然后进入第一条指令的取指操作(实际上是取操作码)。

① IP的值000H送入地址寄存器AR。

② IP的内容自动加1,即000H变为001H。

③ 地址寄存器AR将地址码000H通过地址总线送到存储器,经译码后选中000H单元。

④ 微处理器给出读命令

⑤ 所选中的000H单元内容B0H送上数据总线。

⑥ 数据总线上的数据B0H送上数据寄存器DR。

⑦ 因是取指操作,取出的是指令操作码B0H,即由DR送到指令寄存器IR。

⑧ IR中的操作码经指令译码器ID译码后,通过PLA发出执行该指令的有关控制命令。

第一条指令的操作码B0H经译码后知道这是一条把立即数08H送累加器AL的指令,立即数08H在指令的第二字节中,则执行第一条指令就是从内存中取出指令第二字节(即08H)送入AL。

(2)执行第一条指令(即取第一条指令第二字节)的操作过程。操作过程如图2-4所示。

① 将IP的内容001H送入AR。

② IP的内容自动加1(002H)。

③ AR通过地址总线AB把地址码001H送到内存储器,经地址译码后选中相应的存储单元。

④ 微处理器给出读命令

⑤ 所选中的001H单元内容08H送上数据总线DB。

图2-4 执行第一条指令的操作过程

⑥ DB上的数据08H送上数据寄存器DR。

⑦ 由指令操作码的译码可知,指令要求把第二字节的数据送入累加器AL,则DR上的数据08H通过内部总线送到AL。则第一条指令的执行过程全部完成。

然后,进入第二条指令的取操作码阶段,以及第二条指令的执行阶段,如图2-5和图2-6所示。具体过程不再赘述。

图2-5 取第二条指令操作码的操作过程

图2-6 执行第二条指令的操作过程

至此,该程序段的主要工作(08H+1BH=23H送入AL)已经完成,第三条指令HLT只是告诉微处理器进入“暂停”阶段。这是通过第三条指令HLT的机器码F4H的取指、译码后实现的,具体操作过程同前述有关操作。