Перевод c ++ в MIPS-сборку

Я пытаюсь преобразовать следующую строку кода 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

-2

Решение

Я немного заржавел, когда дело доходит до 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

Кроме этого, я хотел бы спросить, какой неправильный вывод вы получаете?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]