2014-03-30 4 views
-2

Я пытаюсь преобразовать следующую строку кода C++ для сборки MIPS:Перевод с ++ для 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 
+0

какую платформу вы кодируете? Каков тип 'a2'? перегружен ли оператор индексирования? –

+0

Рассматривали ли вы компиляцию кода и проверку результата? –

ответ

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 

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

Смежные вопросы