如果要立即打印算术运算的结果,为什么在执行运算时仍将结果存储在另一个寄存器中并复制到$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, 50
和move $a0, $t0
比addi $t0, $zero, 50
和add $a0, $zero, $t0
更具可读性。
关于assembly - 立即以mips格式打印算术运算结果时,将其直接存储到$ a0更好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53945545/