指令周期
cpu每取出并执行一条指令所需的全部时间,即CPU完成一条指令的时间,称为指令周期。
指令周期被划分为几个不同的阶段,每个阶段所需的时间称为机器周期,称为CPU工作周期或基本周期,通常等于取指时间(或访存时间)。时钟周期是时钟频率的倒数,也可称为节拍脉冲或T周期,是处理操作最基本的单位。一个指令周期由若干个机器周期组成,每个机器周期又由若干个时钟周期组成,如图:
在间接寻址时,需要多访问一次存储器去除有效地址,故其指令执行周期如图
当CPU采用中断方式实现主存与I/O交换信息时,CPU在每条指令的执行周期结束前,都要发出终端查询信号,以检测是否有I/O提出请求;若有请求,则CPU要进入中断响应阶段,又称为中断周期。则一个完整的指令周期包括:取指、间址、执行和中断4个子周期。
完整的指令周期
完整的指令周期流程
指令执行方案
前面讲过,一个指令周期通常要包括几个时间段,每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。对于指令来说,有以下三种方案来安排指令的执行步骤。
1.单指令周期
对所有指令都选用相同的执行时间来完成,成为单指令周期方案。显然,此类方案中指令周期的大小取决于执行时间最长的指令的执行时间,否则执行时间长的指令就不能在一个指令周期内执行完毕。因此,对于那些本来可以在更短时间内完成的指令来说,其指令周期被拉长了,整个系统的运行效率较低。
单指令周期方案的每一条指令都在固定的时钟周期内完成,指令之间串行执行,即下一条指令只能在前一条指令执行结束之后才能启动。
2.多指令周期
对不同类型的指令选用不同的执行步骤来完成,称为多指令周期方案。
多指令周期方案的指令之间仍然串行执行,即下一条指令只能在前一条指令执行结束之后才能启动。但可以选用不同个数的时钟周期来完成不同指令的执行过程,指令需要几个周期就为其分配几个周期,而不再要求所有指令占用相同的执行时间。
3.流水线方案
指令之间可以并行执行的方案,成为流水线方案。流水线方案的目标是力争在每个时钟脉冲周期完成一条指令的执行过程。通过在每一个时钟周期启动一条指令,尽量让多条指令同时运行,单个字处在不同的执行步骤中。
指令的执行过程与信息流
信息流是根据指令要求依次访问的数据序列,在指令执行的不同阶段,要求访问的数据序列是不同的,而且对于不同的指令,他们的数据流往往是不同的。
1.取值周期
指令的地址由程序计数器(PC)给出。因此,取指周期的操作为:按PC内容取出指令,并将PC内容递增。当出现转移情况时,指令地址在执行周期被修改。
取值周期信息流:
1)(PC)->MAR //将要执行指令的地址放到地址缓冲寄存器
2) 1->R //发出读命令(固定写法),但是这个也可以不写
3) M(MAR)->MDR //将要执行的指令从存储器中读到数据缓冲寄存器,其中(MAR)表示地址缓冲寄存器中的内容,所以M(MAR)就表示在主存中此地址的内容,即欲执行指令本身
4) (MAR)->IR //将要执行的指令打入指令寄存器
5) OP(IR)->CU //(IR)表示指令本身,OP(IR)表示指令的操作码,AD(IR)表示指令的 地址码
6) (PC)+1->PC //形成下一条指令的地址
2.间址操作
间址周期是为了取出操作数的有效地址,操作数的地址存放在指令所对应的存储器(或者寄存器)中,然后到其对应的存储器中去取操作数。
间址周期信息流:
1)AD(IR)->MAR //将指令字中的地址码(形式地址)送入地址缓冲寄存器
2) 1->R //发出读命令
3) M(MAR)->MAD //将有效地址送入数据缓冲寄存器
4) MDR->Ad(IR) //将有效地址送至指令的地址码字段
3.中断周期
1) a->MAR //将特定地址a送至MAR,主存发送读命令
2) 1->W; //向主存发送写命令,启动主存做读操作
3) PC->MDR //将断电(PC内容)送入MDR
4) MDR->M(MAR) //保存MDR中的内容,通过数据总线写入MAR的存储单元
5) 向量地址->PC //将向量地址形成部件的输出送至PC,为下一条指令的取指周期做准备
说明:如果程序断点存入堆栈,并且进栈操作是先修改栈指针后存入数据,则需要将(1)改为(SP)-1->SP ,且SP->MAR