如果要立即打印算术运算的结果,为什么在执行运算时仍将结果存储在另一个寄存器中并复制到$a0中,而不是直接使用$a0?这是更好的做法吗?还是有些武断?

我从其他人那里看到的常见过程是:

addi $t0, $zero, 50

li $v0, 1
add $a0, $zero, $t0
syscall

如果这样做,会潜在地引起问题吗?
addi $a0, $zero, 50

li $v0, 1
syscall

最佳答案

这取决于。

如果syscall修改了$a0的值,并且在系统调用后仍需要该值,则需要以某种方式保留它。

但是,SPIM和MARS中的syscall模拟不会修改任何寄存器,除非文档中明确列出了那些寄存器。因此,如果您要在其中运行代码,通常就不必担心保留$a0的值。

另一种可能性是,编写该代码的人还有其他一些稍后将要执行的代码-并且该代码假定该值位于$t0中。

也可能是多余的指令完全没有意义。没有更多的背景就不可能说。

顺便说一句,li $t0, 50move $a0, $t0addi $t0, $zero, 50add $a0, $zero, $t0更具可读性。

关于assembly - 立即以mips格式打印算术运算结果时,将其直接存储到$ a0更好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53945545/

10-11 20:34