目录
控制单元功能之一就是完成指令的解释过程,包括取指、分析、响应中断等
一、微操作命令分析
我们知道完成一条指令一共需要4个工作周期:
取指:把指令从给定内存单元中取出
间址:如果寻址的时候采用的是间址寻址的方式,那就利用间址周期去取指令,然后放到指令的地址码部分
执行:完成对操作数的读取和操作
中断:有中断的话,就去响应中断,包括保存断点、形成中断服务程序的入口地址、关中断
在这四个周期中微操作命令要做什么呢?
1、取指
还是熟悉的cpu结构图,不过没有了ALU,因为取指阶段我们不需要
首先取指就要知道指令的地址,该地址保存在PC中,把指令从内存单元中取出时PC就要把这个地址送到MAR,再通过MAR送给地址总线,最后送入存储器,然后控制单元CU向存储器发出读命令,读出来的数据由存储器通过数据总线送到MDR,再送到 IR中,然后IR将这条指令中的操作码部分OP送到CU去译码(操作码知道这条指令到底要干什么),取完之后PC+1进行更新,表示这条指令已经取完了可以准备下一条了
2、间址
说明寻址的时候采用的是间接寻址,我们要通过间址周期吧操作数的地址从存储器取出放入IR中保存那条指令的地址码部分,并且,这个阶段我们的目的就是取址,这个要取的指令所在的内存单元的地址就是由IR中地址码部分给出的,所以先将IR中要取的地址码部分(形式地址)送到MAR,MAR再送到地址总线再传给存储器,控制器要做的是,首先发出一个要将IR中地址码部分送到MAR的控制信号,再向存储器发出读命令,存储器接收到信号以后,就从指定的内存单元中取出这个地址码通过数据总线传给MDR,MDR再传给IR,结束
3、执行
执行周期的指令有所不同,不像前两个周期,指令通常都是定长的,执行周期就不一定了,我们把执行周期的指令主要分为三类:
3.1 非访存指令【执行期间不访问存储器】
(1) CLA : 清除累加器指令,控制器将0送入ACC寄存器中即可实现ACC寄存器内容清0
(2) COM :累加器取反指令,ACC寄存器内容中的每一位按位取反
(3)SGR:算术右移指令,把数据向右移,左边则空出一位,空出的这一位用原来的符号位填充(ACC0-->ACC0),这两个操作同时进行
(4)CSL:循环左移指令,最高位移到最低位,即ACC右边位移到左侧,ACC的0位移到第n位(ACC0-->ACCn)
(5)STP:停机指令,把0送入G标志触发控制器置0即可,当G=1时,表示机器运行;当G=0时,表示停机
3.2 访存指令【需要访问存储器】
(1)加法指令:将ACC寄存器中的内容和X指出的内存单元地址中保存的内容相加,结果也保存在ACC中,所以首先先把“加数"的地址码部分从IR中取出送到MAR,然后给出读命令1---->R ,然后将MAR中的地址所代表的操作数取出放到MDR中中,这样,ACC中保存这“被加数”,MDR中保存着“加数”,二者即可进行相加,结果也保存在ACC
(2)存数指令:把ACC中保存的数据保存到内存单元给定地址X中,首先,把IR中这个数据的地址码部分送给MAR,然后给出写命令1---->W,因为要写的内容在ACC寄存器中,所以ACC中的内容送到MDR中,然后把MDR中的内容保存到MAR指定的内存单元中
(3)取数指令
把内存单元中给定的一个地址的数据取出保存在ACC寄存器中
首先还是把数据的地址码部分从IR中取出送到MAR,然后给出读命令1---->R ,然后把MAR寄存器指定的内存单元读出送到MDR中,然后把MDR中的内容保存到ACC中
3.3 转移指令
(1)无条件转移 JMP X
需要转移的目标地址就是要被取出的这个无条件转移指令的地址码部分,即IR中的地址码部分送给PC,就完成了无条件转移
(2)条件转移(很多,这里举一个例子BAN X)
上一次计算的结果的值如果是一个负值,那么就转移,转移的地址是X,然后执行下一条指令,这个判断的标准就是如果ACC寄存器中A0=1,那么就是负值,A0=0就说明是正值,不跳转,如果要跳转,那么就把IR的地址码部分送给PC,不跳转就是PC-->PC,接着顺序的执行下一条指令
4、 三类指令的指令周期
非访存一定没有间接寻址,不需要访问存储器
访存又分为直接访存和间接访存
直接访存:指令的地址码部分直接给出了操作数的地址
间接访存:一定会有间址周期
5、中断
始终牢记中断三部曲:保存断点——>形成中断程序入口地址——>关中断
其中,形成中断程序的入口地址可采用硬件也可软件(详细参考中断那篇博客)
硬件:
软件:
在执行周期结束时刻,CPU要查询是否有请求中断的时事件发生,如果有则进入中断周期。假设程序断点存至主存的0地址单元,且采用硬件向量法寻找入口地址,则在中断周期需完成如下操作。
1. 将特定地址“0”送至存储器地址寄存器
2. 向主存发写命令,启动存储器作写操作
3. 将PC的内容(程序断点)送至MDR
4. 将MDR的内容(程序断点)通过数据总线写入到MAR(通过地址总线)所指示的主存单元(0地址单元)中
5. 将向量地址形成部件的输出送至PC,为下一条指令的取指周期做准备。
6. 关中断,将允许中断触发器清零(该操作可直接由硬件线路完成)。
如果程序断点存入堆栈,而且进栈操作是先修改指针,后存储数据。
二、控制单元的功能
通过各种微指令来控制计算机系统内部一系列部件
1、 控制单元的外特性
1.1 输入信号
(1)时钟
为了控制单元按一定的先后顺序、一定的节奏发出各个控制信号,控制单元必须受时钟控制(CPU也受)通常各种微操作命令在指定的时间点被发出,即一个时钟脉冲可以发一个或一组操作命令
- 完成每个操作都需占用一定的时间
- 各个操作是有先后顺序的
(2)IR指令寄存器
里面保存的是要执行的指令,这条指令的操作码部分必须要送入CU,进行译码才知道这条指令要干嘛,现行指令的操作码决定了不同指令在执行周期所需完成的不同操作,故指令的操作码字段是控制单元的输入信号,它与时钟配合可产生不同的控制信号。
(3)标志
CU受标志的控制,比如转移指令
CU有时需依赖CPU当前所处的状态(如ALU操作的结果)产生控制信号,因此“标志”也是控制单元的输入信号
(4)外来信号
例如中断请求INTR、DMA请求、HRQ总线请求。
1.2 输出信号
(1)CPU内的各种控制信号
主要用于CPU内的寄存器之间的传送和控制ALU实现不同的操作。
寄存器与寄存器间的数据传输
对正在执行的指令地址进行修改
CPU内部的计算器要完成逻辑运算和数据运算
(2)送至系统总线的信号
例如,命令主存或I/O读/写、中断响应等
三、控制信号举例
1、不采用CPU内部总线的方式(即采用分散连接的方式)
PC指出下一条指令的地址,把这个地址取到放到IR中,然后送到CU中译码,CU有时钟信号作为输入,寄存器AC运算器ALU还有地址寄存器MAR数据寄存器MDR
举例:加法指令在取指周期(采用间接寻址的方式@)
首先操作从PC开始,CU控制下的某个电路假如是C0打开,将PC的内容送给MAR,MAR再经过C1电路送给内存单元的地址线,同时CU发出读命令让CPU开始读,从内存单元中读回来的数据经过C2控制电路放入MDR中, 再由MDR经过C3送到IR中,IR再经过C4将操作码部分送给CU译码,最后,PC记得+1,至此,取指过程结束
加法指令在间址周期
此时,IR和MDR中都保存了刚才要取的那条指令的地址码,但这个地址码只是一个形式地址,不是真的物理地址,我们假设从MDR中取出这个形式地址(IR中取出也可以),MDR经过C5这个电路将形式地址送给MAR,MAR经过C1将形式地址送入存储器的地址线,然后CU发出读命令,读取这个加法指令操作数的物理地址,读出来的地址通过C2送回MDR中,MDR再经C3送给IR,至此,IR中既保存了操作码(蓝色),又保存了地址码部分(黄色)
加法指令在执行周期
这个加法指令,是将内存单元中指定地址的数据和AC寄存器中保存的数据在控制信号作用下完成加和,并把结果保存在AC中
首先要取操作数的地址,操作数的地址仍然保存在MDR和IR中(上次间址周期结束时我们并没有清零),假设还是从MDR中取,经过C5送到MAR,MAR经过C1送到内存单元地址线,CU发出读命令,读出的数据经C2送回MDR,这样,“被加数”在AC中,“加数”在MDR中,然后我们通过C6C7将这两个操作数送入ALU完成加和,加完的结果经过C8保存在AC中
2、采用CPU内部总线方式
为了保存参与运算的两个操作数以及最后运算的结果,我们需要在ALU两端(输入端输出端)加两个寄存器(AC Y),最后的结果保存在Z寄存器中
还是以加法运算的取指周期为例:
PC中的值通过控制信号PCo被送入CPU内部的总线,然后再通过MAR1控制信号将这个值送给MAR,这个时候MAR中保存的就是下一条要执行的指令(这里是加法指令)在内存单元中的地址,MAR再把这个地址送到地址线上,此时CU发出读命令,读出来的数据送入MDR中,MDR通过控制信号MDRo把这个数据也就是这条指令送到总线上,总线再送到IR
别忘记译码和PC+1,并且这些所有的控制信号都是有先后顺序的,必须是前一个执行完下一个才可以开始
间址周期
要做的是从内存单元中把操作数地址取出,形式地址要送给MAR再送给IR。
形式地址现在在MDR中,所以,MDR首先通过MDRo控制信号把形式地址送到总线上,再由总线在控制信号MARo下送给MAR,再由MAR送到地址线上去,CU发出读命令,读出来的数据再送回MDR中,MDR再经总线送到IR地址码中,此时IR的地址码部分存的就是要参与加法运算的操作数的地址
执行周期
参与加法运算的操作数从存储器给定的地址单元中取出
操作数的地址依然在MDR中
四、多级时序系统
1、机器周期
机器周期可看作是所有指令的执行过程中的一个基准时间,机器周期取决于指令的功能及器件的速度。
确定机器周期时,通常要分析机器指令的执行步骤及每一步骤所需的时间。通常以访问一次存储器的时间定为基准时间较为合理,这个基准时间就是机器周期。由于不论执行什么指令,都需要访问存储器取出指令,因此在存储字长等于指令字长的前提下,取指周期也可看作机器周期。
2、 时钟周期
一个大的指令周期被分为若干个机器周期,每一个机器周期又被分为若干个节拍,节拍是计算机中最小的时间周期,在一个节拍上我们可以发出一个或几个的微操作命令
每个机器周期下的节拍数可能相等,也可能不等如下图
3、多级时序系统
4、机器速度与机器主频的关系
机器速度与机器主频的关系,只有在两台机器都是采用非流水线的情况下,如果机器周期相同,时钟周期也相同,才可以认为它们的速度之比等于主频之比,如果不满足都是非流水线,比如一台机器流水线,一台机器非流,那么即使机器周期时钟周期都相同,也不能认为速度之比等于主频之比
五、控制方式
产生不同微操作命令序列所用的时序控制方式
1、同步控制方式
一定有定宽定距的时钟作为基准并在指定的节拍下完成
(1)采用定长的机器周期
缺点:容易造成时间浪费,比如假设我们在取指周期设有4个节拍,当进入执行周期时,这个操作比较简单1个节拍就可完成,那么就会有三个节拍的时间浪费掉
(2)采用不定长的机器周期
每个机器周期内的街拍书可以不等。通常把大多数微操作安排在一个较短的机器周期内完成,而对某些复杂的微操作,采用延长机器周期或增加节拍的方法来解决。
(3)采用中央控制和局部控制相结合的方法(可回顾总线那篇)
这种方案将机器的大部分指令安排在统一的、较短的机器周期内完成,称为中央控制,而将少数操作复杂的指令中的某些操作采用局部控制方式来完成。
在设计局部控制线路时需要注意两点:
1、使局部控制的每一个节拍T*的宽度与中央控制的节拍宽度相同;
2、将局部控制节拍作为中央控制中机器节拍的延续,插入到中央控制的执行周期内,使机器以同样的节奏工作,保证了局部控制和中央控制的同步。
2、异步控制方式
异步控制方式不存在基准时标信号,没有固定的周期节拍和严格的时钟同步,采用应答方式,执行每条指令和每个操作需要多少时间就占用多少时间。结构比同步控制方式复杂。
3、联合控制方式
同步控制和异步控制相结合就是联合控制方式。这种方式对各种不同指令的微操作实行大部分统一(大部分采用同步控制)、小部分区别对待(有时有一些微操作所用的时间很难确定,那么就可以采用异步控制)的办法。
通常取指、间址、中断周期中的微操作命令都是可以确定的采用同步,但执行周期例外,其中,大部分执行周期中的微操作命令时间都是可以确定的,但如果是执行I/O操作的,那么很难确定采用异步
4、人工控制方式
人工控制是为了调机和软件开发的需要,在机器面板或内部设置一些开关或按键,来达到人工控制的目的。
(1)Reset:让机器恢复到起始状态
(2)连续和单条指令执行转换开关:比如进行程序调试的时候,可以一条一条走,也可以连续
(3)符合停机状态:比如某个寄存器里保存了一个停机条件(某个内存单元的地址),当计算机要用到这个地址的时候,就拿这个地址和停机条件比对,如果相等就停机(或其他操作比如引入故障)