为什么MIPS CPU在寄存器文件中有32个寄存器?可能或多或少?如果我们修改寄存器文件的大小会有什么影响?
为什么MIPS CPU在寄存器文件中有32个寄存器?可能或多或少?如果我们修改寄存器文件的大小会有什么影响?
Answers:
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。
它没有必要,但它与其他设计决策是一个很好的妥协。
首先,MIPS中的指令长度为32位(大多数MIPS,有64位版本)。(你可以在这里看到很多详细信息)。在许多MIPS指令中,您必须提供三个寄存器,例如两个源和一个目标(例如,r4 = r2 + r4)。MIPS架构允许5位指定每个寄存器,32是您可以用5位表示的最大数量,因此没有必要为您提供更多无法访问的寄存器。
如果MIPS允许您有6位来选择寄存器,那么您可以使用多达64个不同的寄存器,但这些额外的位必须来自某处,可能通过减少操作或寻址模式的数量。
还有其他方法,有些处理器使用bank切换,这基本上是说“我现在正在使用这32个寄存器,但我也有这个特殊的SWITCH指令,让我把这些其他32个寄存器拉出来使用一段时间在切换回之前“它对于某些应用程序很方便,但对于其他一些应用程序而言在概念上很难。