指令周期
cpu从主存中每取出一条指令所需要的全部时间
开始->取指令->对指令译码->执行指令->取下一条指令pc+1
指令周期常常使用若干个机器周期来表示,机器周期又叫cpu周期
一个机器周期包含若干个时钟周期(也被称作节拍,t周期,cpu时钟周期 也是cpu操作的基本单位)
主频3.0Ghz 代表每秒钟会有3.0G个节拍
每个指令周期内机器周期数可以不等,每个机器周期内节拍周期也可以不等
空指令NOP
指令周期只包含取址周期
加法指令ADD
包含取址周期和执行周期
乘法指令MUL
包含取址周期和执行周期,需要比加法指令,使用更多的时间来执行指令,因为乘法本质上就是加法和移位
具有间接寻址的指令
包含取址周期,间址周期和执行周期
带有中断周期的指令
包含取址周期,间址周期和执行周期以及最后的中断周期
四个工作阶段都需要访存操作
指令周期数据流-取址周期
1.将指令地址pc传输到mar
2.cu发出控制信号,经过控制总线传输到主存,是一个读信号,计作1->R # R=【read】
3.将mar所指的主存中的内容经过总线送入mdr,计作M(MAR-)>MDR #M=memory
4.将MDR中的内容(此时是指令)送入IR,计作(MDR->IR)
5.CU发出控制信号,形成下一条指令地址计作:PC+1->PC
指令周期数据流-间址周期
1.将指令的地址吗送入mar,计作Ad(IR)->MAR 或者Ad(MDR)->MAR
2.cu发出控制信号,启动主存做读操作,计作1->R
3.将mar所指主存中的内容经过数据总线送入M(MAR)->MDR
4.将有效地址送入指令地址吗字段计作(MDR)->Ad(IR)
指令周期的数据流-执行周期
执行周期任务是根据ir中的指令字的操作码和操作数通过alu操作产生执行结果
不同指令的操作周期操作不同,因此没有统一的数据流向
指令周期的数据流-中断周期
中断:暂停执行当前程序,转而去执行其他程序,为了可以恢复当前的任务,需要保存断点
一般使用堆栈保存断点,一般用sp表示栈顶地址,假设sp指向栈顶元素,进栈操作是先修改指针后存入数据
1.cu控制将sp-1,修改后的地址送入mar 计作(sp)-1 ->sp, (sp)->mar
本质上是将断电存入某个存储单元,假设其地址为a,可以计作 a->mar 【准备写操作的地址信息】
2.cu发出控制信号,启动主存做写操作,计作1->w #w=write 为了把pc的值写入到栈顶 【准备写操作】
3.将断点pc送入mdr,计作(pc)->mdr 【准备写操作的数据信息】
3.cu将中断控制服务程序的入口地址送入pc 计作:向量地址->pc
指令执行方案
1.单指令方案
对所有指令都选用相同的执行时间来完成。指令之间串形执行;指令周期取决于执行时间最长的指令的执行时间
对于那些本来只需要很短的时间就能完成的指令来说,使用这个会需要较长的时间来完成,会降低整个系统的运行速度
2.多指令周期
对不同类型的指令选用不同的执行步骤来完成,指令之间串行执行,可选用不同个数的时钟周期来完成不同指令的执行过程
需要更复杂的硬件设计
3.流水线方案
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,单各自处在不同的执行步骤中,指令之间并行执行
【类似于低位交叉编址】