第十六章控制器
处理器的结构:
总线与其他结构的连接可以表示为总线与寄存器、控制器、算术逻辑单元的连接
寄存器的分类
- 用户可见寄存器:允许编程人员通过机器语言或汇编语言访问
- 控制和状态寄存器:控制器控制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中的操作码向控制地址寄存器装入机器指令例程的第一条微指令