Zar*_*z89 3 assembly mips cpu-architecture sparc cpu-registers
我知道当你在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也可以用作源.