一、基本概念
指令周期:取出并执行一条指令所需要的时间(解释一条指令所需要的时间)
每条指令的指令周期不同
有些指令周期就没有执行周期——例如空操作(NOP)
有些指令的取指周期和执行周期是等长的——add mem
有些指令的执行周期就比较长——mul mem
具有间址寻址的指令周期
因为寻址方式的不同,可能是间址寻址,所以在执行周期中要取出操作数,需要进行两次访存,那么这个时候,如果我们将指令周期划分为:取址周期,间址周期,执行周期
那么,这个时候,间址周期执行的是将操作数的地址从主存中取出,执行周期执行的是取出操作数并执行相应的操作并把结果保存在给定的寄存器当中。
带中断的指令周期
如果程序执行的过程中有中断,那么就要添加一个中断周期:如果有中断请求的话,我们需要去响应中断:保存断电,形成中断服务程序的入口地址,硬件关中断
二、指令周期流程
在指令周期中,至少包含了1个周期:取址周期
在取址周期后,需要判断是否有间址周期,如果没有就进入到了执行周期,在执行周期过程中,需要判断有没有中断程序,如果有,就响应中断:保存断点,生成中断服务程序入口,硬件关断点;如果没有,就进入下一个取址周期
三、CPU工作周期的标志
由于处在不同的指令周期,控制器需要做不同的操作,所以控制器在指令周期的不同时段,需要发出不同的控制命令。控制器也要知道当前处于指令周期的哪一个阶段。
四、指令周期的数据流
1.取址周期数据流
目标:需要将PC中的地址取出,并存在IR(指令寄存器中)
步骤:先将PC中的指令地址送到MAR(主存地址寄存器)中,再通过地址总线送到存取器中,然后CU通过控制总线将存储器中的数据读出来并通过数据总线将数据送到MDR中,然后再送到IR中。但是,这样还没有完,CU还会将PC+1,使得PC指向下一条指令所在的地址
2.间址周期数据流
间址周期说明IR中或者是MDR中保存的是操作数的地址。
假设我们的操作数的地址保存在了MDR中:
首先,MAR先从MDR中将数据地址的地址读出,然后通过地址总线传到存储器中,CU发出控制信号,并通过控制总线将地址读出通过数据总线放回到MDR中
3.执行周期数据流
不同指令执行周期数据流不同
4.中断周期数据流
我们要知道中断周期我们做了什么操作:
保存断点
生成中断服务程序入口地址
硬件关闭断点
CU决定了把中断保存在内存单元的哪一个地址(保存断点是一个写操作)
首先,我们需要保存断点,但是有谁知道断点需要保存在哪里呢——CU,所以第一步是将CU中的地址传到MAR再通过地址总线传到存储器中,那么,我们是要保存当前断点的地址,当前断点的地址在哪里有呢——PC,所以第2步我们需要将PC的地址传到MDR通过数据总线传到存储器中。而中断程序的入口地址是由CU给出,CU直接将入口地址放入PC中
来源:oschina
链接:https://my.oschina.net/u/4360424/blog/4292118