先决条件 – 执行、阶段和吞吐量
每个指令周期涉及的寄存器:
- 内存地址寄存器(MAR) :它连接到系统总线的地址线。它指定内存中用于读取或写入操作的地址。
- 内存缓冲寄存器(MBR) :它连接到系统总线的数据线。它包含要存储在内存中的值或从内存中读取的最后一个值。
- 程序计数器(PC) :保存下一条要获取的指令的地址。
- 指令寄存器(IR) :保存最后提取的指令。
指令周期——
指令周期的每个阶段都可以分解为一系列基本的微操作。在上述示例中, Fetch、Indirect、Execute 和 Interrupt Cycles各有一个序列。
间接循环之后总是执行循环。中断周期总是跟在提取周期之后。对于获取和执行周期,下一个周期取决于系统的状态。
我们假设有一个新的 2 位寄存器,称为指令周期代码(ICC)。 ICC 根据处理器所处的周期部分来指定处理器的状态:-
00:获取周期
01 : 间接循环
10 : 执行循环
11 : 中断循环
在每个周期结束时,适当地设置ICC。上面的指令周期流程图描述了微操作的完整序列,仅取决于指令序列和中断模式(这是一个简化的例子)。处理器的操作被描述为一系列微操作的性能。
不同的指令周期:
- 获取周期 –
在取指周期开始时,要执行的下一条指令的地址在程序计数器(PC) 中。
-
第 1 步:程序计数器中的地址被移动到内存地址寄存器(MAR),因为这是连接到系统总线地址线的唯一寄存器。
-
第二步:将MAR中的地址放到地址总线上,现在控制单元在控制总线上发出READ命令,结果出现在数据总线上,然后复制到内存缓冲寄存器(MBR)中。程序计数器加一,为下一条指令做准备。(这两个动作可以同时执行以节省时间)
-
第三步:将MBR的内容移到指令寄存器(IR)中。
-
因此,一个简单的Fetch Cycle由三个步骤和四个微操作组成。象征性地,我们可以将这些事件序列写成如下:-
-
这里的“I”是指令长度。符号 (t1, t2, t3) 表示连续的时间单位。我们假设一个时钟可用于计时目的,并且它会发出规则间隔的时钟脉冲。每个时钟脉冲定义一个时间单位。因此,所有时间单位的持续时间相等。每个微操作都可以在单个时间单位的时间内完成。
第一个时间单位:将 PC 的内容移动到 MAR。
第二时间单位:将 MAR 指定的内存位置的内容移动到 MBR。由 I 增加 PC 的内容。
第三个时间单位:将 MBR 的内容移动到 IR。
注意:第二个和第三个微操作都发生在第二个时间单位。 - 间接循环——
获取指令后,下一步是获取源操作数。源操作数是通过间接寻址方式获取的(它可以通过任何寻址方式获取,这里是通过间接寻址方式完成的)。不需要获取基于寄存器的操作数。一旦操作码被执行,可能需要一个类似的过程来将结果存储在主存储器中。发生以下微操作:-
-
步骤1:指令的地址字段传送到MAR。这用于获取操作数的地址。
第 2 步:从 MBR 更新 IR 的地址字段。(因此它现在包含直接寻址而不是间接寻址)
第 3 步:IR 现在处于状态,就好像没有发生间接寻址一样。注意:现在 IR 已准备好执行周期,但它会暂时跳过该周期以考虑中断周期。
- 执行周期
其他三个周期( Fetch、Indirect 和 Interrupt )简单且可预测。它们中的每一个都需要简单、小且固定的微操作序列。在每种情况下,每次都重复相同的微操作。
Execute Cycle 与它们不同。例如,对于具有 N 个不同操作码的机器,可以发生 N 个不同的微操作序列。
让我们举一个假设的例子:-
考虑添加指令:
-
这里,这条指令将地址X的内容添加到寄存器R中。对应的微操作是:-
-
我们从包含 ADD 指令的 IR 开始。
第一步:将IR的地址部分加载到MAR中。
步骤2:从MBR更新IR的地址字段,因此读取参考内存位置。
步骤 3:现在,ALU 添加 R 和 MBR 的内容。让我们举一个复杂的例子:-
-
这里,X 位置的内容加 1,如果结果为 0,则跳过下一条指令。对应的微操作顺序为:-
-
此处,如果(MBR) = 0,则PC 递增。此测试(MBR 是否等于0)和动作(PC 递增1)可以作为一个微操作来实现。
注意:此测试和动作微操作可以在更新值 MBR 存储回内存的同一时间单元内执行。 - 中断周期:
在执行周期完成时,进行测试以确定是否发生了任何启用的中断。如果发生允许的中断,则发生中断循环。这个循环的性质从一台机器到另一台机器变化很大。
让我们来看看一系列的微操作:-
-
第一步:将PC的内容传送到MBR,以便保存返回。
第 2 步:MAR 加载了 PC 内容要保存的地址。
PC 装入中断处理程序的起始地址。
第三步:MBR,包含PC的旧值,存储在内存中。注意:在步骤2中,两个动作作为一个微操作实现。但是,大多数处理器提供多种类型的中断,可能需要通过一个或多个微操作来获取 save_address 和routine_address,然后才能将它们分别传输到 MAR 和 PC。