MIPS store word/load word

Есть действительно простой вопрос здесь. Может ли регистр иметь как значение, так и адрес. Как и в предположении, что я хочу поменять местами значения: 5, хранящиеся в t0, и 7, хранящиеся в t1, работает этот код:

sw $t0, 0($t0)
sw $t1, 0($t1)
lw $t1, 0 ($t0)
lw $t0, 0 ($t1)

Извините это может звучать глупо

1 ответ

Не совсем для всех значений, так как sw а также lw необходимо правильное выравнивание (действительные адреса должны быть кратны 4).

То есть ваш код будет работать только для значений, кратных 4, и в любом случае это будет плохой идеей, потому что вы будете в основном писать мусор по тому адресу, на который указываете.

Чтобы поменять регистры без перезаписи третьего регистра, вы можете использовать следующую хитрость:

 xor $t0, $t0, $t1
 xor $t1, $t0, $t1
 xor $t0, $t0, $t1
Другие вопросы по тегам