Я пытаюсь преобразовать следующую строку кода C ++ в сборку MIPS:
cout << a2[i]
Это код, который я пробовал, но я получаю неправильные результаты.
* Переменная i сохраняется в $ t5.
li $v0, 1
la $a0, a2
sll $t5, $t5, 2
add $a0, $a0, $t5
srl $t5, $t5, 2
lw $a0, 0($a0)
syscall
Я немного заржавел, когда дело доходит до MIPS. Тем не менее, я помню некоторые вещи.
Обычно вам не следует использовать регистры $ a, если вы не передаете аргументы функции (как вы это делаете с syscall).
Итак, в этих двух случаях я бы использовал временные регистры вместо:
la $a0, a2
add $a0, $a0, $t5
становится
la $t0, a2
add $t1, $t0, $t5
а потом:
lw $a0, 0($t1)
syscall
И вы, вероятно, можете также опустить это:
srl $t5, $t5, 2
Кроме этого, я хотел бы спросить, какой неправильный вывод вы получаете?
Других решений пока нет …