这里有一个非常基本的问题。 寄存器可以同时具有值和地址。如假设我想在值之间交换:5存储在t0中,7存储在t1中 这段代码是否有效:
sw $t0, 0($t0)
sw $t1, 0($t1)
lw $t1, 0 ($t0)
lw $t0, 0 ($t1)
对不起,这可能听起来很愚蠢
答案 0 :(得分:1)
并非真正适用于所有值,因为sw
和lw
需要正确对齐(有效地址应为4的倍数)。
也就是说,你的代码只适用于4的倍数值,不管怎么说这样做是个坏主意,因为你基本上会在你指向的地址上写垃圾。
要交换寄存器而不覆盖第三个寄存器,您可以使用以下技巧:
xor $t0, $t0, $t1
xor $t1, $t0, $t1
xor $t0, $t0, $t1