Also ich arbeite jetzt seit ein paar Tagen daran, und ich habe es geschafft, alles durchzubekommen, außer ein Teil bringt mich.C to MIPS trouble
int mystery(int a0)
{
if (a0 == 0)
{
return 0;
}
else
{
return mystery(a0 - 1) + a0;
}
}
Ich habe diese rekursive Funktion und ich habe einige MIPS-Code. Der C-Code funktioniert, aber ich habe ein Problem irgendwo in meinem MIPS-Code, der in mache es nicht kommt richtig über Putten 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
Alles bis zu dem Label ‚Geheimnis‘ ist in Ordnung, es gerade dort als a Formalität, um Argumente einzubringen und danach zu drucken. Das Problem, das ich habe, ist Werte über 3 zu bekommen, um die richtigen Zahlen auszudrucken. Hilfe würde sehr geschätzt werden, wenn jemand sehen könnte, wo ich meinen Fehler mache. Danke
Was zurückzukehren passiert, wenn Sie dies lief im Debugger? –
Scheint richtig, dies auf Stapelüberlauf zu posten. NB: Die Ackerman-Funktion wird wahrscheinlich schneller sein. – wildplasser
Wenn ich dies in MARs drucke druckt 3 und 7. – budokiba