Перевести C ++ на MIPS Assembly

Мне нужна помощь с этой последней частью этой проблемы. Я в основном пытаюсь перевести код C ++ на язык ассемблера MIPS.

Предположим, что a находится в $ s0, b в $ s1, c в $ s2, x в $ s4, y в $ s5 и z в $ s6.

Я закончил почти все из них, но я застрял на этих двух, я знаю некоторые части этого, но у меня есть проблемы, соединяющие это в целом. За частями, которые я знаю, последуют хэштеги с кодом сборки. Спасибо за любую помощь.

1.

for(x = 0; x <= z; x++) # x = 0; is: addi $s4, $0, 0
y = y + 1; # addi $s5, $s5, 1
y = 0; # addi $s5, $0, 0

2.

if(y > z)
x = 0; # addi $s4, $0, 0
else x = 1; # else: addi $s4, $0, 1

Вот оригинальные проблемы без хэштегов, если я ошибаюсь:

1.

for(x = 0; x <= z; x++)
y = y + 1;
y = 0;

2.

if(y > z)
x = 0;
else x = 1;

Еще раз спасибо.

Попытка на 2, не уверен, если правильно.

ifLoop:

add $s5, ? , $s6
addi $s4, $0, 0

ifLoop

else:

addi $s4, $0, 1

else

Практика: (Предположим, что массив p находится в $ s7)

p[0] = 0;
int a = 2;
p[1] = a;
p[a] = a;

Моя попытка:

sw $0, 0($s7)
addiu $s0, $0, 2
sw $s0, 4($s7)
sll $t0, $s0, 2
addu $t1, $t0, $s7
sw $s0, 0($t1)

1

Решение

Редактировать: 1. К счастью, это не так уж много отличается без псевдо-инструкций.

addi $s4, $0, 0

forLoop: sle $t1, $s4, $s6  #if x <= z, set $t1 to 1, else 0
addi $s5, $s5, 1
addi $s5, $0, 0
addi $s4, $s4 1
bne $t1, $0, forLoop #repeat loop while $t1 is not 0

Вот # 2. Я просто хотел, чтобы вы попробовали, прежде чем я просто дал ответ. Вы хотите использовать инструкцию slt для установки регистра в 1 или 0. Если 1, сравнение истинно (y> z). Затем используйте bne, чтобы определить, куда перейти. Сравнивая bne с 0, истинный код заканчивается непосредственно под инструкцией bne. В противном случае, перейти к метке.

slt $t2, $s6, $s5 # if z < y, set $t2 to 1, else 0
bne $t2, $0, else # if $t2==1, do the code below, if not, go to else

addi $s4, $0, 0
j continue    # need the jump instruction to skip the else below
else:
addi $s4, $0, 1

continue:
# rest of code/program
1

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

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

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