控制单元(CU)是提供完成计算机指令全部操作的微操作指令序列部件.用下图来描述其外部特性:
输入信号
- 时钟。
上述的所有操作都具有下面的两点特点:- 完成每个操作都要占用一定的时间
- 各个操作都是有先后顺序的
因此,为了让CU按一定的顺序,一定节拍发出各种控制信号,CU必须受到时钟的控制。也就是说,每一个时钟脉冲发送一个或者一组的操作命令 。
- 指令寄存器(IR)
现行指令的操作码,决定了不同指令在执行周期所需要完成的不同操作,因此,指令的操作码字段就是CU的输入信号。,并且与时钟配合,产生不同的控制信号。 - 标志
为什么标志也是CU的输入信号呢?这是因为CU有时候要依赖CPU当前所处的状态(比如ALU操作产生的结果)来产生控制信号,因此,标志也是CU的输入信号。 - 来自系统总线的控制信号
比如:中断请求,DAM请求。 - 送到系统总线的信号(输出信号)
比如:命令I/O或者主存进行读写,对中断的响应等等 - CPU内部的控制信号(输出信号)
主要用于CPU内部寄存器之间的传送,以及控制ALU实现不同的操作。
常见的操作控制器
操作控制器一般分为两种:硬布线控制器,微程序控制器
硬布线控制器的微操作
为了便于讨论,假设CPU内有4个寄存器,MAR与地址总线相连,存放欲访问的存储单元地址。MDR与数据总线相连,存放欲写入存储器信息或者近期从存储器中读出的信息。PC存放现行指令的地址,且有计数功能,IR存放现行指令。
1. 取址周期
PC ->MAR//将现行指令的地址,送到MAR
1->R //向主存发送读指令,进行读操作
M(MAR) ->MDR //通过地址总线,将MAR所指的主存单元,通过数据总线,送到MDR
MDR ->IR //将MDR的内容送到IR
OP(IR)->CU //j将指令的操作码部分,送到CU进行译码操作
(PC)+1->PC //PC自动加一,形成下一条指令地址
2. 间址周期
一旦取值周期结束,CPU便检查IR中的内容,以确定是否有间址操作,如果有,那么MDR的形式地址(记为Ad(MDR)),送到MAR中,然后通过地址总线,此时CU向存储器中发出读命令,以获取有效地址,并将读到的数据存入MDR。微操作如下:
Ad(IR) ->MAR //将指令的形式地址送到MAR
1-->R //cu发出读命令
M(MAR)->MDR //将MAR指向的主存单元内容,也就是有效地址,通过数据总线送到MDR中
MDR->Ad(IR)//将EA送到寄存器的地址字段
3.执行周期
不同指令的执行周期大不相同,这里主要分析非访存类跟访存类以及转移类指令。
3.1 非访存类(即在执行周期内不访存)
指令 | 意义 | 微操作 |
---|---|---|
CLA | 清除ACC指令 | 0->ACC |
COM | ACC取反指令 | !ACC ->ACC |
SHR | 算术右移一位 | L(ACC)->R(ACC), ACC。->ACC。(符号位不变) |
CSL | 循环左移一位 | R(ACC)->L(ACC), ACC。->ACCn |
STP | 停止机器运行 | 0->G(G为运行标记触发器,1运行,0停机) |
3.2 访存类
这一类比较多,用markdown画的表格不好看,那么我就拍一张
4. 中断周期
在执行周期结束时刻,CPU要查询是否有请求中断事件发生,如有,则进入中断周期。在中断周期,由中断隐指令自动完成断点保护,寻找中断服务程序入口地址以及硬件关中断操作,假设程序的断点存到了主存的0单元处,采用硬件向量法寻找入口地址,则微操作如下:
0->MAR //将地址‘0’,送入MAR中
1->W //C发出写指令
PC ->MDR //将PC的内容(即程序的断点 )。送到MDR
MDR->M(MAR) //将MDR的内容,写入到MAR所指示的主存单元(即0)中
向量地址 ->PC //为下一条指令取指周期做准备
0->EINT //中断触发器清0
如果程序断点存入的是栈中,那么进栈的操作为,先修改栈指针,再存取数据,也就是上面的第一步改为:
(SP)-1 ->SP
SP ->MAR