少女祈祷中...

第十六章控制器

处理器的结构:

总线与其他结构的连接可以表示为总线与寄存器、控制器、算术逻辑单元的连接

寄存器的分类

  • 用户可见寄存器:允许编程人员通过机器语言或汇编语言访问
  • 控制和状态寄存器:控制器控制CPU的操作,在大多数机器上是用户不可见的(某些在控制或操作系统模式下执行的机器指令是用户可见的)

两者的区分并不严格

用户可见寄存器

  • 通用寄存器(general-purpose register),可被程序员指派各种用途
  • 数据寄存器(data register),仅可用于保持数据而不能用于操作数地址的计算
  • 地址寄存器(address register),可以是自身有某些通用性,或是专用于某种具体的寻址方式,例如:段指针、变址寄存器、栈指针…
  • 条件码寄存器/标志寄存器:CPU硬件设置这些条件位作为操作的结果,至少是部分用户可见的

设计出发点:需要控制寄存器的数量和寄存器的长度

保存和恢复:子程序调用会自动保存所有用户可见的寄存器,并在返回时自动取回,调用和返回指令执行功能的一部分; 子程序调用之外保存则是程序员的责任

控制和状态寄存器

  • 程序计数器(PC):存有待取指令的地址,每次取指令之后就会被CPU更改
  • 指令寄存器(IR):存有最近取来的指令
  • 存储器地址寄存器(MAR):直接与地址总线相连,存有存储器位置的地址
  • 存储器缓冲寄存器(MBR):存有将被写入存储器的数据字或从存储器读出
    的字

注意:ALU可会MBR和用户可见寄存器直接存取

程序状态字:一个或一组包含状态信息的寄存器,包含条件码加上其他状态信息

包含的字段或标志:

  • 符号(Sign):容纳算术运算结果的符号位
  • 零(Zero):当结果是0时被置位
  • 进位(Carry):若操作导致最高位有向上的进位(加法)或借位(减法)时被置位,用于多字算数运算
  • 等于(Equal):若逻辑比较的结果相等,则置位
  • 溢出(Overflow):用于表示算术溢出
  • 中断允许/禁止:用于允许或禁止中断
  • 监管(Supervisor):指出CPU是执行在监管模式中还是在用户
    模式中

其他控制和状态寄存器可能包含:

  • 一个指向含有附加状态信息的存储器块的指针寄存器
  • 在使用向量式中断的机器中,可能提供有一个中断向量寄存器
  • 若栈用于实现某些功能,需要有一个系统栈指针
  • 对于虚拟存储器系统,会有一个页表指针寄存器

X86体系结构:8086的寄存器

  • 数据寄存器:均为16位寄存器
  • 地址寄存器:均为16位寄存器
  • 段寄存器:与其他寄存器联合生成物理地址
  • 标志寄存器:分为控制标准和状态标志
  • 指令指针寄存器IP:保存一个内存地址,取完指令会自增,程序员不能直接对IP进行存取操作

微操作

计算机操作由一系列指令周期构成,每个周期执行一条机器指令,每个指令周期可以看成更小的子周期组成(取值、间址、执行、中断),而子周期可以分为一系列CPU寄存器操作的更小的步骤组成,即微操作

取址周期

出现在每个指令周期的开始,将指令从存储器中读出

微操作分组的原则:事件的流动顺序必须是恰当的,必须避免冲突,满足上述条件下所用的时间单位尽可能少

间址周期

如果指令采用间接寻址,则在指令执行前有一个间址周期

执行周期

对于不同的操作码,会出现不同的微操作序列。

中断周期

在完成执行周期之时,需要确定是否有允许的中断产生

指令周期代码ICC

2位寄存器,明确CPU处于指令周期哪个阶段

  • 00:取指
  • 01:间址
  • 10:执行
  • 11:中断

取指、间址、中断周期各有一个微操作序列,执行周期则对于每个操作码有一
个微操作序列

CPU内部总线

ALU和寄存器都连接到内部总线上

为了数据在该内部总线和各寄存器之间传递,内部总线和寄存器之间有门和控制信号

控制线控制着数据和系统总线(外部)的交换以及ALU的操作

控制CPU的功能需求

CPU的基本元素:ALU,寄存器组,内部数据通路,控制器,外部数据通路

CPU需要完成的四类微操作

  • 在寄存器之间传送数据
  • 将数据由寄存器传送到外部接口(如系统总线)
  • 将数据由外部接口传送到寄存器
  • 将寄存器作为输入和输出,完成算术和逻辑运算

控制器的两个基本任务:定序(使CPU以正确的顺序通过一系列微操作)、执行(使每个微操作得以完成)

控制器的输入:

指令寄存器、时钟、标志、来自控制总线的控制信号

控制器的输出

CPU内的控制信号(用于寄存器之间传送数据和启动特定ALU功能)、到控制总线的控制信号(到存储器/I/O模块的控制信号)

控制信号示例:取址周期

1、传送PC的内容到MAR

  • 打开C2

2、由存储器读一条指令装入MBR,并且递增PC

  • 打开C0
  • 存储器读控制信号CR送到控制总线上
  • 打开C5
  • 控制信号对PC内容加1(指令长度)并把结果存回PC

3、传送MBR的内容到IR

  • 打开C4

控制器实现

  • 硬布线实现:一个组合电路,把输入逻辑信号转换为一组输出逻辑信号
  • 微程序实现:控制逻辑由微程序指定,是一个相对简单的逻辑电路。通过执行每条微指令来产生控制信号

硬布线实现

  • 指令寄存器译码得到操作码,每一操作码有一个唯一的逻辑输入
  • 译码器有n个输入和2^n个输出

时钟:用于使控制器在不同的时间单位发送不同的控制信号(额外使用一个定时器作为控制器的输入,在指令周期结束时通知它重新开始计数)

为每个输出的控制信号设计一个关于控制器输入的布尔表达式,可以通过对输入进行布尔表达式的运算决定输出

假设PQ分别为LCC的两个位:

微程序实现

微程序(固件)介于硬件与软件之间

微指令:每行描述同一个时间内出现的一组微操作。

  • 基本思路:构造一个控制字。这个控制字中的每一位都对应了一根控制线的开关,这些不同的控制线开或关的组合就形成了不同的微操作。(通常每一位就是一个微操作,也有可能一位对应多个微操作)

控制字通常放入存储器单元中,每个字有自己的地址。添加几位指示条件,如果条件为真则顺序执行下一条指令;如果条件为假则跳转到地址字段指示的下一控制字的位置

注意指令与控制字的区别:指令相当于给出操作码,并说明接下来需要对操作数做什么操作,而控制字则是直接控制底层硬件的行为,如发送、接收数据等。控制字处于更底层的位置。指令中的操作码会选择相应的微程序,从而生成相应的控制字

任务:

  • 微指令定序:根据当前的微指令、条件标志和指令寄存器的内容,产生下一微指令的控制存储器地址

  • 微指令执行:产生控制信号:发往CPU内部,送往外部控制总线或其他外部接口

微程序控制器:定序

双地址字段:在每条微指令中提供两个地址字段,选择并发送其中某一个地址或操作码到控制地址寄存器

单地址字段:下一个地址的选择可以是地址字段或下一个顺序地址

可变格式:提供两种完全不同的指令格式,一位字段用于指定哪种格式被使用

微程序控制器:构成

  • 定序逻辑:向控制地址寄存器装入地址,并发出读命令
  • 控制地址寄存器:含有下面即将被读取的微指令地址
  • 控制存储器:存有一组微指令
  • 控制缓冲寄存器:存放被读出的微指令

工作流程:

1、执行一条指令,定序逻辑发出一个读命令给控制存储器

2、当一条微指令由控制存储器读出后,即被传送到控制缓冲寄存器

3、控制缓冲寄存器的内容生成控制信号,并为定序逻辑提供下一条地址信息

4、定序逻辑根据这个地址信息和ALU标志,将新的地址装入到控制地址寄存器

生成新地址的三个选择

  • 顺序:控制地址寄存器+1
  • 跳转:控制缓冲寄存器的地址字段装入控制地址寄存器
  • 转移:根据IR中的操作码向控制地址寄存器装入机器指令例程的第一条微指令