解释计算机体系结构中减少微指令数量的方法?

在本节中,有两种方法可以利用这种冗余来减少控制单元所需的微指令数量。第一种方法使用微子程序将重复的微操作组合成一个微指令块,由两个或多个执行程序访问。另一种方法使用微码跳转来访问两个或多个例程共享的微指令。

微子程序

正如高级和汇编语言代码使用子程序一样,微定序器也可以使用微子程序。与高级代码一样,微序列器使用微子例程来处理在一个微代码中的多个例程中执行的动作序列。微定序器硬件必须增强以实现微子程序调用和返回。

状态 LDAC1、LDAC2 和 LDAC3 分别执行与状态 STAC1、STAC2 和 STAC3 相同的微操作。在每种情况下,三种状态从内存中获取一个 16 位地址并将其加载到 AR 中。

尽管微子例程直接出现在 FETCH3 之后,但不能从该状态调用它,因为 FETCH3 必须映射到正确的执行例程。微序列器无法生成正确的返回地址。为了解决这个问题,它可以创建虚拟状态 LDAC0 和 STAC0。当 LDAC 或 STAC 指令被解码时,FETCH3 映射到这些状态之一。这些状态不执行微操作并调用微子程序。

微子程序返回到下一个位置,其中包含 LDAC4 或 STAC4。新的状态分配显示在表中。SUB1、SUB2 和 SUB3 分别执行与 LDAC1 (STAC1)、LDAC2 (STAC2) 和 LDAC3 (STAC3) 相同的微操作。

修改了简单 CPU 的状态分配

状态地点
LDAC04
LDAC45
LDAC56
STAC08
STAC49
STAC510
SUB161
SUB262
SUB363

当调用微子程序时,程序的地址由微代码存储器的 ADDR 输出提供。微定序器必须存储返回地址,以便子程序终止后它可以继续。如果地址 X 处的微指令调用微子程序,则该程序必须返回地址 X + 1。

微码跳转

条件跳转指令和无条件跳转指令有几种状态,执行相同的微操作。这是可以预料的,因为如果要进行跳转,则以相同的方式进行处理。这种冗余可以通过创建一个微子程序来消除。它可以修改状态图,以便这些指令直接访问相同的状态。一组状态将执行跳转,另一组将处理未采用的条件跳转。例程将分支到正确的状态。

JUMP1、JUMP2 和 JUMP3 与 JMPZY1、JMPZY2 和 JMPZY3 相同,也与 JPNZY1、JPNZY2 和 JPNZY3 相同,但 JUMP 状态除外。