Ich bin keine Expertise in MIPS, sorry. Ich muss einen ganzzahligen Wert zwischen 0 und 5 (0 < n < 5) importieren. Zum Beispiel, wenn der Wert von n> 4 ist, habe ich eine Fehlermeldung errorDimensionMessage
und mein Programm startet die Funktion jal dimension
, bis der richtige Wert eingegeben wird. Wenn danach ein korrekter Wert (z. B. 3) eingegeben wird, geht das Programm zum Beenden in jal exit
.MIPS geschachtelte Funktion das Programm ist aus dem Boden
(Code aktualisiert)
Das Problem ist nach 5 (Fehler) -> 3 (OK) das Programm unten abgesetzt.
.data
InsertDimension: .asciiz " Insert an integer (n) with value between 0 and 5 (0 < n < 5): "
errorDimensionMessage: .asciiz " Error. Matrix dimension is not valid (e.g., 0 < n < 5)\n"
messageExit: .asciiz " Exit...\n"
.text
.globl main
main:
jal dimension
jal exit
exit:
la $a0, messageExit
li $v0, 4 # print string
syscall
li $v0, 10 # loads the service that exits
syscall
dimension:
move $s0, $ra # save return address into s0
la $a0, InsertDimension
li $v0, 4 # print string
syscall
li $v0, 5 # read an integer from console and put it in $v0!
syscall
jal isValidDimension
move $ra, $s0 #restore return address that was saved into s0
jr $ra #return
isValidDimension:
move $s1, $s0 # save return address into s0
beqz $v0, errorDimension
bgt $v0, 4, errorDimension
move $s0, $s1 # save return address into s0
jr $ra #return
errorDimension:
la $a0, errorDimensionMessage
li $v0, 4 # print string
syscall
j dimension # return to dimension
Danke Michael. Ich habe den Code mit neasted Funktion aktualisiert aber immer noch nicht Ihre Hilfe. –
Nun, wie ich schon sagte, 'jal' ist nicht die richtige Anweisung hier zu verwenden. Sie sollten einen normalen Sprung verwenden, oder möglicherweise 'jr $ ra'. – Michael
Wenn ich jr $ ra benutze, gehe das Programm wieder zum jal exit, während ich in der Dimension –