目录
1. 指令周期
中断是被安排在指令的最后一个阶段的,中断的意思就是暂停现在的任务去完成其它的任务,但即使是要暂停现在的任务,也应该把现在这条指令执行完成。所以中断周期是安排在这条指令执行结束的,但是中断的响应是要在这条指令结束前安排好的。如果不这样,则这条指令执行结束就会自动取下一条指令,又进入一个新的指令周期。
2. 指令周期流程
通过这个流程就可以使具有不同长度的指令系统运行起来。
整个机器可以处于不同的周期阶段,如何判断现在处于哪个周期?
===> 提供一个硬件结构,叫做触发器。
下面进入每个周期内需要完成的一些工作。
3. 取指周期数据流
在取指令开始的时候,PC 存放的是当前指令的地址;取指完成后,PC 中存放的是下一条指令的地址。
区别在于 是取指令开始的阶段还是取指令结束的阶段。
4. 间址周期数据流
间址周期的任务就是取有效地址,有效地址是由 形式地址和寻址特征决定的。
为什么有个或? 因为在取指周期阶段是先把指令放在 MDR 里面,再传到 IR;进入到间址周期, MDR 中内容是暂时还没有改的,里面存的也还是之前的内容。所以 "有个或" 。
第三步结束后,就取到了操作数的有效地址。这是为指令的执行,也就是下一个阶段做准备的,这个时候 MDR 中还是一个地址
接下来,不同的教材有区别: 一种做法是将这个地址放到指令的地址码字段,即 有效地址还是放在 IR 中,下一阶段,只需将 IR 中的地址作为有效地址取寻址即可。 另一种做法是,既然已经放到了 MDR,下一步直接到 MDR 中取有效地址即可。
所以这一步的安排不同,下一阶段的数据流可能是有区别的。关键还是要理解整个过程是怎么实现的,每一步传输的是一个什么样的数据,是地址还是操作对象,一般来说写前面三步即可。
5. 执行周期数据流
6. 中断周期
只是先暂停任务,去完成其它任务。为了恢复当前任务,需要保存断点。【断点是本来要执行的下一条指令,即 PC的内容】
一般使用 堆栈结构来保存断点,SP 表示栈顶地址。
假设 SP 指向栈顶元素,进栈操作是先修改指针后存入数据。【如果是栈顶元素上一个位置,则是先存入数据,再移动指针】
调整指针是通过 减1 实现,和平时的方向是相反的,因为在主存中选一片区域做堆栈的时候,是从高地质向低地质去扩增的。所以进栈用减法,出栈用加法。
第3步完成后,
就完成了中断操作的第一个任务:保存断点(即暂停当前任务);下一步是要去完成其它任务,怎么开始完成其它任务?
把任务要执行的第一条指令地址(即中断服务程序的入口地址)放到 PC 中。这个地址是由向量形成部件产生的(中断章节具体介绍),故该地址又被称为 向量地址。 这样下一步, CPU 还是根据 PC 中的内容去寻找下一条指令,所以就切入到了一个新的程序的运行。
7. 指令的执行方案
单指令周期:具体来说,就是不分取指阶段、执行阶段等,而是将指令周期作为一个阶段,就相当于每个指令周期都是一个机器周期。这种模式下,指令和指令之间是串行执行的。因为所有的指令需要统一 一个时间,所以指令周期 取决于执行时间最长的指令的执行时间。
流水线方案基本思路:间隔一定时间启动就启动一条指令,原理是:在不同的机器周期(不同的小步骤下),一条指令所需要的硬件资源是不同的,所以这样的安排相当于多条指令在并行执行,只不过在不同的阶段在使用不同的硬件。