第八章 CPU

  本章从分析CPU的功能和内部结构入手, 详细讨论机器完成一条指令的全过程,以及为了进一步提高数据的处理能力,开发系统的并行性所采取的流水技术。此外,本章还进一步概括了中断技术在提高整机系统效能方面的作用。

第一节 CPU的功能和结构


一、CPU的功能

  CPU是由运算器和控制器组成的, 在这里我们重点介绍控制器的功能。
  对于冯·诺依曼结构的计算机而言,一旦程序进入存储器后,就可由计算机自动完成取指令和执行指令的任务,控制器就是专用于完成此项任务的,它负责协调并控制计算机各部件执行程序的指令序列,其基本功能是取指令、分析指令和执行指令。

  1.取指令
  控制器必须具备能自动地从存储器中取出指令的功能。为此,要求控制器能自动形成指令的地址,并能发出取指令的命令,将对应此地址的指令取到控制器中。第一条指令的地址可以人为指定,也可由系统设定。

  2.分析指令
  分析指令包括两部分内容,其一,分析此指令要完成什么操作,即控制器需发出什么操作命令;其二,分析参与这次操作的操作数地址,即操作数的有效地址。

  3.执行指令
  执行指令就是根据分析指令产生的“操作命令”和“操作数地址”的要求,开成操作控制信号序列(不同的指令有不同的操作控制信号序列),通过对运算器、存储器以及I/O设备的操作,执行每条指令。
  此外,控制器还必须能控制程序的输入和运算结果的输出(即控制主机与I/O交换信息)以及对总线的管理, 甚至能处理机器运行过程中出现的异常情况和特殊请求,即处理中断的能力。
  总之, CPU必须具有控制程序的顺序执行(称指令控制)、产生完成每条指令所需的控制命令(称操作控制)、对各种操作实施时间上的控制(称时间控制)、对数据进行算术运算和逻辑运算(数据加工)和处理中断等功能。

二、CPU结构框图

  CPU由四大部分组成:地址寄存器, 用于存放当前指令的地址;指令寄存器,用来存放当前指令和对指令的操作码进行译码;控制部件,能发出各种操作命令序列;ALU, 用来完成算术运算和逻辑运算;为了处理异常情况和特殊请求,还必须有中断系统。其结构如下图所示。

  若将其进一点细化,则得到下图:

三、CPU的寄存器

  1.用户可见寄存器
  通常CPU执行机器语言访问的寄存器为用户可见寄存器, 按其特征又可分为以下几类:
  (1)通用寄存器。通用寄存器可由程序设计者指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器。基址寻址所需的基址寄存器、变址寻址所需的变址寄存器和堆栈寻址所需的栈指针,都可用通用寄存器代替。寄存器间接寻址时还可用通用寄存器存放有效地址的地址。
  (2)数据寄存器。数据寄存器用于存放操作数,其位数应满足多数数据类型的数值范围,有些机器允许使用两个连读的寄存器存放双倍字长的值。还有些机器的数据寄存器只能用于保存数据,不能用于操作数地址的计算。
  (3)地址寄存器。地址寄存器用于存放地址,其本身可以具有通用性,也可用于特殊的寻址方式,如用于基址寻址的段指针(存放基地址)、用于变址寻址的变址寄存器和用于堆栈寻址的栈指针。地址寄存器的位数必须足够长,以满足最大的地址范围。
  (4)条件代码寄存器。这类寄存器中存放条件码,它们对用户来说是部分透明的。条件码是CPU根据运算结果由硬件设置的位(bits), 如算术运算会产生正、负、零或溢出等结果。条件码可被测试,作为分支运算的依据。此外,有些条件码也可被设置,如最高位进位标志C,可用指令对它置位和复位。将条件码放到一个或多个寄存器中,就构成了条件码寄存器。
  在调用子程序前,必须将所有的用户可见寄存器的内容保存起来,这种保存可由CPU自动保存, 也可由程序员编程保存,视不同机器不同处理。

  2.控制和状态寄存器
  CPU中还有一类寄存器用于控制CPU的操作或运算。在一些机器里,大部分这类寄存器对用户是透明的。如以下四种寄存器在指令执行过程中起重要作用。
  ·MAR存储器地址寄存器,用于存放将被访问的存储单元的地址;
  ·MDR存储器数据寄存器, 用于存放欲存入存储器中的数据或最近从存储器中读出的数据;
  ·PC程序计数器,存放现行指令的地址,通常具有计数功能。当遇到转移类指令时,PC的值可被修改;
  ·IR指令寄存器,存放当前欲执行的指令。
  通过这四个寄存器,CPU和主存可交换信息。 例如,将现行指令地址从PC送至MAR, 启动存储器作读操作,存储器就可将指定地址单元内的指令读至MDR,再由MDR送至IR。
  在CPU内部必须给ALU提供数据,因此ALU必须可直接访问MDR和用户可见寄存器,ALU的外围还可以有另一些寄存器,这些寄存器用于ALU的输入/输出以及用于和MDR及用户可见寄存器交换数据。
  在CPU的控制和状态寄存器中,还有用来存放程序状态字PSW的寄存器,该寄存器用来存放条件码和其他状态信息。在具有中断系统的机器中还有中断标记寄存器。

  3.举例
  不同机器的CPU中,寄存器组织是不一样的,下图画出了Z8000、8086和MC68000三种机器的寄存器组织。

  Zilog Z8000有16个16位的通用寄存器, 这些寄存器可存放地址、数据,也可作为变址寄存器,其中有两个寄存器被用作栈指针,寄存器可被用作8位和32位的运算。 Z8000中有5个与程序状态有关的寄存器:其中1个用于存放状态标记,2个用于程序计数器,2个用于存放偏移量。确定一个地址需要两个寄存器。
  Intel 8086采用不同的寄存器组织,尽管某些寄存器可以通用,但它的每个寄存器大多是专用。它有4个16位的数据寄存器,即AX(累加器),BX (基址寄存器),CX(计数寄存器)和DX(数据寄存器),也可兼作8个8位的寄存器(AH、AL、BH、BL、CH、CL、DH、DL)。另外还有2个16位的指针(栈指针SP和基址指针BP)和2个变址寄存器(源变址寄存器SI和目的变址寄存器DI)。在一些指令中,寄存器是隐式使用的,如乘法指令总是用累加器。8086还有4个段地址寄存器(代码段CS,数据段DS,堆栈段SS和附加段ES)以及指令指针IP(相当于PC)和状态标志寄存器F。
  Motoro1a MC68000的寄存器组织介于Zilog和Inte1微处理器之间,它将32位寄存器分为8个数据寄存器(D0~D7)和9个地址寄存器(A0~A7′)。数据寄存器主要用于数据运算,当需要变址时,也可作变址寄存器用。寄存器允许8位、16位和32位的数据运算,这由操作码确定。地址寄存器存放32位地址(没有段),其中两个(A7和A7′)也可用作堆栈指针,分别供用户和操作系统使用。针对当前执行的模式,这两个寄存器在某个时刻只能用一个。此外,MC68000还有一个32位的程序计数器PC和一个16位的状态寄存器。
  与Zilog的设计者类似,Motorola设计的寄存器组织也不含专用寄存器。

四、控制单元CU和中断系统

  控制单元CU是提供完成机器全部指令操作的微操作命令序列部件。现代计算机中微操作命令序列的形成方法有两种,一种是组合逻辑设计方法,为硬联线逻辑;另一种是微程序设计方法,为存储逻辑。
  中断系统主要用于处理计算机的各种中断。