指令的执行过程
- 指令周期:一条指令的执行分为不同的阶段
- 数据流:不同阶段要求依次访问的数据序列
- 指令执行方案:如何安排多条指令的执行?
指令周期
-
指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。
-
一个指令周期包含若干机器周期,一个机器周期就是用来完成某个子工作,机器周期又叫CPU周期。
- 一个机器周期又包含若干时钟周期(CPU操作的最基本单位:也称为节拍、T周期或CPU时钟周期)
- 例如某CPU主频:3.0GHz —— 每秒钟发送3G的节拍
-
每个指令周期内机器周期数可以不等,
-
每个机器周期内的节拍数也可以不等。
指令周期流程
如何确定当前是在哪个阶段?——设置触发器
- 设置四个触发器:哪个地方置为1,就代表在哪个阶段了
- 四个工作周期都有CPU访存操作,只是访存的目的不同。
- 取指周期是为了取指令
- 间址周期是为了取有效地址
- 执行周期是为了取操作数
- 中断周期是为了保存程序断点。
举例各种指令 说明指令周期的区别
- 空指令NOP:什么都不做、发呆,所以取出来,分析成功,就发呆。
- 加法指令ADD:比空指令多出一段执行周期
- 乘法指令MUL:就是多次加法和移位,所以比加法耗时更久
- 具有间接寻址的指令:多出一个间接寻址的周期
- 带有中断周期的指令:最后留一段进行中断检查
数据流
1、取指周期
- 1、当前指令地址送至存储器地址寄存器。
- 记:(PC)→ MAR
- 2、CU 发出控制信号,经控制总线传到主存,这里是读信号。
- 记:1→R
- 对R给高电平1,表示进行读
- 对W给高电平1,表示进行写
- 记:1→R
- 3、把主存中MAR所指向的数据,放到MDR中。
- 记:M(MAR) → MDR
- 4、将MDR中的内容(此时是指令)送入IR。
- 记:(MDR) → IR
- 5、CU发出控制信号,形成下一条指令地址
- 记:(PC) + "1" → PC
2、间址周期(有的指令有)
-
Ad是address,表示取IR的地址码
-
将指令的地址码送入MAR
- 记: Ad(IR) → MAR【指令现存于IR】
- 或记:Ad(MDR) → MAR 【此时MDR中也存储了当前的指令信息,因为是从MDR复制给IR】
-
CU发出控制信号,启动主存做读操作,记做:1 → R
-
将MAR所指主存中的内容经数据总线送入MDR
- 记:M(MAR) → MDR
-
有的可能:将有效地址送至指令的地址码字段
- 记:(MDR) → Ad(IR)【因为有的地方把EA拼接到IR中了】
3、执行周期
- 执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。
- 不同指令的执行周期操作不同,因此没有统一的数据流向。
4、中断周期
-
中断:暂停当前在务去完成其他任务。
- 为了完成其他任务后能够恢复当前任务,需要保存断点,一般使用堆栈来保存断点。
-
堆栈保存断点
- 每个进程在主存中都有一个堆栈
- 这里用SP指向栈顶元素,进栈操作是先修改指针,后存入数据。
- 在实际使用中,栈顶是低地址位,栈底是高地址位。
-
1、把PC的值压入栈。进栈:CU控制,SP往顶端挪,将SP减1,修改后的地址送入MAR,指明要存入的地址放在SP-1的位置
- 记做:(SP)-1 → SP,(SP) → MAR
- 本质上是将断点存入某个存储单元,这里就是把SP指向SP-1(高一位)并且把最后的(SP)-1存入了MAR
-
2、CU发出控制信号,启动主存做写操作
-
记做:1 → w
-
已经保存断点了,这里要让PC指向另一个程序的存放地址。
-
-
3、将断点(PC内容)送入MDR
- 记做(PC) → MDR
-
4、CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,
- 记:向量地址 → PC
指令执行方案
一个指令周期:通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
方案1. 单指令周期
对所有指令都选用相同的执行时间来完成。
- 指令之间串行执行
- 控制电路的执行设计方便
- 必然长短不一,指令周期取决于执行时间最长的指令的执行时间,只要设计一样的节拍数量就可以了,但必然有浪费
- 对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
方案2.多指令周期
对不同类型的指令选用不同的执行步骤来完成。
- 指令之间串行执行
- 可选用不同个数的时钟周期来完成不同指令的执行过程。
- 一条条执行
- 需要更复杂的硬件设计。
方案3.流水线方案
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
- 指令之间并行执行。
- 利用效率高
- 原因在于:每个阶段用的硬件不同、资源不同,最终就可以相互协调,让利用效率达到最高。
- 比如取指令阶段用PC、IR、MAR,分析阶段用UC
- 即第一个到分析阶段、第二个就开始进行取指令