Wie gebe ich einen Wert aus der Hauptfunktion in MIPS zurück?

Angenommen, ich möchte das folgende C-Programm in MIPS schreiben:

int main () {
  return 5;
}

Wenn ich den folgenden MIPS-Code versucheMARS:

main:   ADDI $v0, $zero, 5     # $v0 = 5
        JR $ra                 # return from main()

Ich erhalte die Fehlermeldung "Ungültiger Programmzähler". Das liegt anscheinend an dirkann in MARS nicht aus der Hauptfunktion herausspringen. Also habe ich versucht, es so umzuschreiben:

main:   ADDI $v0, $zero, 5     # $v0 = 5
        li $v0, 10             # load 10(exit) for syscall
        syscall                # exit

Nachdem dies ausgeführt wurde, enthält das $ v0-Register den Wert 10 und nicht 5. Dies ist verständlich, da ich das $ v0-Register überschreiben musste, damit syscall funktioniert. Meine Frage ist also, wo ich den Wert 5 speichern würde, damit er richtig an den Aufrufer dieser Anwendung zurückgegeben wird?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage