【发布时间】:2015-03-02 18:50:32
【问题描述】:
这里有一个非常基本的问题。 寄存器可以同时具有值和地址吗?假设我想在值之间交换: 5 存储在 t0 和 7 存储在 t1 此代码是否有效:
sw $t0, 0($t0)
sw $t1, 0($t1)
lw $t1, 0 ($t0)
lw $t0, 0 ($t1)
对不起,这听起来很愚蠢
【问题讨论】:
标签: mips instructions instruction-set
这里有一个非常基本的问题。 寄存器可以同时具有值和地址吗?假设我想在值之间交换: 5 存储在 t0 和 7 存储在 t1 此代码是否有效:
sw $t0, 0($t0)
sw $t1, 0($t1)
lw $t1, 0 ($t0)
lw $t0, 0 ($t1)
对不起,这听起来很愚蠢
【问题讨论】:
标签: mips instructions instruction-set
并非真的适用于所有值,因为 sw 和 lw 需要正确对齐(有效地址应该是 4 的倍数)。
也就是说,您的代码仅适用于 4 的倍数,无论如何这样做是个坏主意,因为您基本上会在您指向的任何地址上写垃圾。
要在不覆盖第三个寄存器的情况下交换寄存器,您可以使用以下技巧:
xor $t0, $t0, $t1
xor $t1, $t0, $t1
xor $t0, $t0, $t1
【讨论】: