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


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

微子程序

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

状态 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 状态外,所有状态都被消除了。

更新于: 2021年7月27日

960 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告