我知道当您在SPARC CPU(和MIPS)中读取%r0时,始终返回0,但是我想知道为什么?
这背后是什么设计决定,为什么?
这只是CPU的设计方式。r0
一方面,确保始终设置为零是一种避免非常常见的值的潜在昂贵内存访问的方法。
一方面(读取),预留一个寄存器来包含零值很方便,以便您可以使用它。否则,您将不得不自己将零加载到寄存器中。
许多RISC处理器倾向于支持寄存器中的数据处理,仅访问存储器以进行加载和存储操作。这不是RISC的硬性规定,更多的是趋势。预留一个寄存器使您始终有零个可用可能会很有用-这是一个折衷,因为您少了一个寄存器即可用于通用值,但MIPS设计师显然认为这是值得的。
另一方面(写),由于r0
绑定到零值,因此您可以在其中放置所需内容,并且不会有任何区别-它将保持为零。这意味着如果您想丢弃该值,可以将其用作目标。
同样,这与RISC背后的哲学有关。它往往有利于极少数的指令格式,如MIPS R
,I
和J
格式(寄存器,立即跳)。例如,您可以有一组始终存储结果,然后将其存储到r0
不需要的位置,而不是根据是否要存储结果而具有多种指令格式。
因此,如果您想检查是否将两个寄存器相加会导致溢出,但又不想将结果存储在任何地方,则可以使用:
add $0, $7, $8 ; r0 <- r7 + r8, but r0 remains at 0.
MIPS文档MIPS32 Architecture for Programmers Volume I: Introduction to the MIPS32 Architecture
确认以上内容:
R0硬连线为零值,并且可以用作要丢弃其结果的任何指令的目标寄存器。当需要零值时,R0也可用作源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句