[英]Do you need to clear a register before using la in MIPS?
我们被教导在使用它之前总是清除一个寄存器,或者将它视为它可能已经包含可能影响我们试图在该寄存器上执行的操作的数据。 如果我使用la
指令,它是否会覆盖该寄存器中的任何内容,因此它是否已经有数据无关紧要?
or
操作或and
操作是否能够与la
做同样的事情? 有没有比la
更好的加载地址的方法? 这是我最常看到的那种类型的操作,但我觉得可能在我使用or
代替之前有一次。
我知道有些指令是伪指令,没有那么快或不理想。 首选方法是什么?
la
是一个伪指令,因此取决于每个汇编器是否以及如何实现它。 但我会说它通常实现为lui
+ ori
或lui
+ addiu
。 这两种组合都会影响目标寄存器的所有位,而不依赖于旧值。 (他们以lui
开头)
我们被教导在使用它之前总是清除一个寄存器
这听起来像是奇怪的建议。 如果必须,请清除寄存器,否则不要。 MIPS 没有像 x86 这样的部分寄存器。
在设置其他值之前将寄存器设置为0
只会使源代码混乱并使程序变慢。 连续两次对寄存器进行只写访问是没有意义的。
有没有比 la 更好的加载地址的方法?
不,不是。 这是最方便的方式。 除非汇编器做一些愚蠢的事情,否则它几乎总是和任何手工编码的方法一样有效。 (除了利用lw
指令中的位移位,但 MARS 没有提供除硬编码数字地址之外的方法。请参阅注释。)
而不是使用la
,使用addi
更为常见。 你总是做这两个之一,因为如果你不做它们,变量里面会有垃圾而不是特定的值。 or
or and
只能用在条件语句中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.