Итак, я работаю над этим уже несколько дней, и мне удалось пройти через все это, за исключением того, что одна часть получает меня.
int mystery(int a0)
{
if (a0 == 0)
{
return 0;
}
else
{
return mystery(a0 - 1) + a0;
}
}
У меня есть эта рекурсивная функция, и у меня есть некоторый код MIPS. Код на C работает, но у меня есть проблема где-то в моем коде MIPS, из-за которой он не выходит корректно после ввода 2.
.text
main:
li $a0, 2
jal mystery
move $a0, $v0
jal putDec
li $a0, '\n'
li $v0, 11
syscall
li $a0, 3
jal mystery
move $a0, $v0
jal putDec
li $a0, '\n'
li $v0, 11
syscall
li $v0, 10
syscall
putDec:
li $v0, 1
syscall
jr $ra
mystery:
bne $0, $a0, recur
li $v0, 0
jr $ra
recur:
sub $sp, $sp, 8
sw $ra, 4($sp)
sub $a0, $a0, 1
jal mystery
sw $v0, 0($sp)
jal mystery
lw $t0, 0($sp)
addu $v0, $v0, $t0
addu $v0, $v0, 1
add $a0, $a0, 1
lw $ra, 4($sp)
add $sp, $sp, 8
jr $ra
Все, вплоть до надписи «тайна», прекрасно, это просто формальность, чтобы фактически приводить аргументы и печатать после. У меня проблема с получением значений выше 3, чтобы распечатать правильные числа. Буду признателен за помощь, если кто-то может увидеть, где я делаю свою ошибку. Спасибо