为什么 MIPS CPU 有 32 个寄存器?

为什么 MIPS CPU 有 32 个寄存器?

为什么MIPS CPU的寄存器文件有32个寄存器? 可以多一点还是少一点? 修改寄存器文件的大小会有什么影响?

答案1

MIPS 是一种“RISC”或“加载-存储”架构。

RAM 曾经和 CPU 一样快。因此人们会编写使用 RAM 作为中间或临时存储的程序。早期的 CPU 正是因此而只有几个寄存器(例如 6502、Z80 - 6502 只有 3 个通用寄存器。某些 CPU(如 TMS9900)实际上使用 RAM 作为寄存器)。这使得 CPU 使用更少的晶体管,这意味着它们更便宜、更容易获得良好的收益、更容易开发(70 年代没有基于 CAD 的芯片设计……)

大约在 1985 年,RAM 速度与 CPU 速度相同的现象已不复存在,而且情况越来越糟。

RISC 的出现部分是为了解决这个问题(这是在 CPU 缓存变得像今天这样普遍或庞大之前)——通过拥有一堆寄存器,可以避免在中间计算结果等上花费大量时间处理缓慢的 RAM。

减少可用的寄存器意味着为了达到此目的它必须更频繁地转到速度较慢的 RAM。

我不太清楚为什么 32 被选为“最佳点” - 除了它有 5 位之外,我知道 MIPS 操作码有 3 个 5 位字段,这意味着它们很容易解码(“RISC”哲学的另一个属性) - 并且它实际上是 31,因为第一个寄存器始终返回 0。

答案2

在具有寄存器重命名的系统中,您可以改变物理寄存器的数量,并且只会影响性能。

但是,如果不创建全新的架构,您就无法控制寄存器名称的数量。尝试删除一些名称,使用这些名称的程序就会失败。尝试添加一些名称,5 位编码不再足以描述所有名称。

您可以尝试使用诸如指令前缀之类的技巧来扩展指令集,以包含接受更多或不同名称的扩展指令,同时保持旧编码不变以实现向后兼容性。我不知道有人对 MIPS 这样做,但 AMD64 又名 EM64T 又名 x86_64 使用了基于 x86 的“扩展(大部分)向后兼容”方法。

答案3

它不一定非得如此,但与其他设计决策相比,这是一个很好的妥协。

首先,MIPS 中的指令长度为 32 位(大多数 MIPS,有一个 64 位版本)。(您可以看到很多细节,了解它是如何分解的这里)。在许多 MIPS 指令中,您必须提供三个寄存器,例如两个源和一个目标(例如 r4=r2+r4)。MIPS 架构允许 5 位指定每个寄存器,而 32 是您用 5 位可以表示的最大数字,因此没有必要给您更多您无法访问的寄存器。

如果 MIPS 允许您有 6 位来选择一个寄存器,那么您可以使用最多 64 个不同的寄存器,但这些额外的位必须来自某个地方,可能是通过减少操作或寻址模式的数量。

还有其他方法,一些处理器使用银行转换,基本上就是说“我现在正在使用这 32 个寄存器,但我还有这个特殊的 SWITCH 指令,让我可以拉出另外 32 个寄存器使用一段时间,然后再切换回来”,这对于某些应用程序来说很方便,但对于其他一些应用程序来说在概念上很困难。

相关内容