指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。
此处:取指周期=取指令+指令译码
指令周期常用若干机器周期/CPU周期表示,一个机器周期包含若干时钟周期/节拍/T周期/CPU时钟周期,时钟周期是CPU操作的最基本单位
回顾:CPU执行时间=时钟周期数×时钟周期=CPI×指令条数×时钟周期
可以看出,每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。下面进行举例
1.空指令NOP
取指令,不进行操作。即指令周期=取指周期(包含取指周期和分析指令)。包含1个机器周期
2.加法指令ADD
指令周期=取指周期+执行周期
包含2个机器周期,两个机器周期包含的节拍数可能不同
(若为乘法指令,则执行周期更长)
3.具有间接寻址的指令
指令周期=取指周期+间址周期+执行周期
包含3个机器周期,三个机器周期包含的节拍数可能不同
(图:一次间接寻址)
4.带有中断周期的指令
指令周期=取指周期+间址周期+执行周期+中断周期
每一条指令末尾都要检查中断
包含4个机器周期,四个机器周期包含的节拍数可能不同
总结
可以通过触发器判断当前处于那个周期
把PC中的内容从主存取出指令代码并存放到IR中,可能因为取指令进行访存。
数据流向:
①PC指向的内容通过地址总线传送到MAR,即(PC)→MAR
②CU通过控制总线给主存发出控制信号(如:读信号)
③主存储器根据MAR记录的地址信息去存储体中找出该地址对应的二进制数据,通过数据总线将数据放到MDR中,即M(MAR)→MDR
④MDR中的指令通过内部总线放到IR(此处MDR属于CPU),即(MDR)→IR
⑤每取出一条指令,CU发出控制信号,形成下一条指令地址,让PC指向,即(PC)+"1"→PC
或
PC→MAR→地址总线→主存
CU发出控制信号→控制总线→主存
主存→数据总线→MDR→IR
CU发出读命令→PC内容加1
间址周期的任务是取操作数的有效地址,可能因为取有效地址而访存。
数据流向:
①将指令中的地址码Ad送到MAR并送至地址总线,即Ad(IR)→MAR→地址总线
注:此处的IR可改为MDR,二者当前存放相同的内容
②CU通过控制总线发出控制信号(如读命令)给主存,即CU发出控制信号→控制总线→主存
③主存储器根据MAR记录的地址信息去存储体中找出该地址对应的二进制数据,通过数据总线将数据放到MDR中,即M(MAR)→MDR
④将有效地址送至指令的地址码字段,即(MDR)→Ad(IR)
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。可能因为取操作数而访存
不同指令的执行周期操作不同,没有统一的数据流向
暂停当前任务去完成其他任务,可能因为保存程序断电而访存
为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,这里用SP指向栈顶存储单元的地址,堆栈的地址空间从高到低排列,假设SP指向栈顶元素,进栈时SP-1,再存入数据。
数据流向:
PC自动加“1”,指向下一条待执行指令,此时发送中断。为保存断点,需将PC的值压入主存,然后转向指向中断处理程序
①CU控制SP-1,在当前SP指向的地址插入PC,需将SP所指向的地址送MAR并送至地址总线,即(SP)-1→SP、(SP)→MAR
②CU通过控制总线发出控制信号(写命令)给主存,即CU发出写命令→控制总线→主存
③将PC写入主存,即(PC)→MDR→数据总线→主存
④CU将PC改为中断处理程序的第一条指令地址,即CU→PC
一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
可以选用3种方案来安排指令的执行步骤:
所有指令选用相同的执行时间。指令之间串行执行,即下一条指令只能在前一条指令执行结束后才能启动。为保证每条指令都在固定的时钟周期内完成,在设计执行时间时需选择最长指令的执行时间,这样会导致本来可以在更短时间内完成的指令,要使用较长的周期来完成,降低了整个系统的运行速度。
对不同类型的指令选用不同的执行步骤。指令之间串行执行,但不再要求所有指令占用相同的执行时间,即按需分配。但需要更复杂的硬件设计,成本较高。
指令之间可以并行执行的方案。该方案通过在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。其追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程。