Ich versuche einen einfachen Assembler-Code zu erstellen, der eine Eingabe N akzeptiert und die N-te Fibonacci-Nummer zurückgibt (z. B. wenn Sie 2 eingeben, sollte es 1 ausgeben und wenn Sie 3 eingeben) Ausgang 2). Mein Code wirft keine Fehler, aber nachdem Sie eine Zahl eingegeben haben, gibt es etwas seltsam zurück. Wenn Sie 1 eingeben, wird 2685009921 zurückgegeben. Wenn Sie 2 eingeben, wird 0.01 zurückgegeben. Wenn Sie 3 eingeben, wird 0.02 zurückgegeben. Wenn Sie 4 eingeben, wird der Text am Anfang ausgegeben und nach einer positiven Ganzzahl gefragt. Geben Sie dann 3 (die richtige Antwort) ein. Wenn Sie 5 eingeben, wird nichts ausgegeben, und wenn Sie erneut die Eingabetaste drücken, wird eine Laufzeitausnahme ausgegeben (ungültige Ganzzahleingabe syscall 5). Alles über fünf gibt seltsame Fehler.Einfache MIPS-Assembly - Rückgabe einer Fibonacci-Nummer
Es ist fast so, als ob es einen Syscall mit der Eingangsnummer als Code ausführt, was erklären würde, warum die ersten vier Zahlen Dinge ausgeben (die ersten vier syscalls geben Daten aus).
Was denkst du? Hier ist der Code:
.data
introText: .asciiz "Type a positive integer, please! \n"
input: .word 123
.text
# ask user for input
li $v0, 4
la $a0, introText
syscall
# read input int
li $v0, 5
syscall
# store input
addi $s1, $v0, 0
syscall
# main loop
li $s2, 0 # s2 starts at 0 and will increase until it's equal to $s1, the player input
li $s3, 0 # this will hold the most recent fib number
li $s4, 1 # this will hold the second most recent fib number
loop:
addi $s2, $s2, 1 # increment s2 for loop
add $s5, $s3, $s4 # make the current result the sum of the last two fib numbers
addi, $s4, $s3, 0 # make the second most recent fib number equal to the most recent fib number
addi, $s3, $s5, 0 # make the most recent fib number equal to the current fib number
bne $s2, $s1, loop
# return the answer
li $v0, 1
addi $a0, $s5, 0
syscall
# end program
li $v0, 10
syscall
Danke, dass es behoben! – BowmanBeric