2016-11-11 3 views
0

Ich habe versucht zu lernen, wie man mit Assembly MIPS32 auf Mars programmiert. Ich habe eine Frage obwohl, ich möchte eine Funktion (ich weiß nicht, ob das wie es genannt wird), die eine ganze Zahl zurückgibt. Grundsätzlich möchte ich eine Methode, die den Benutzer fragt, eine Nummer einfügen und fügen Sie diese Nummer mit einer anderen, die zuvor angefordert wurde Dies ist, was ich kam, aber ich weiß nicht, wie Sie den Wert auf $ s2 zurückgebenMips-Funktion gibt eine Nummer zurück

New:  
    la $a0, prompt2 # Print string "Input: " 
    li $v0,4 
    syscall 

    li $v0,5 #Read int x 
    syscall 

    jr $ra 

Add: 
    j New 

    add $s1, $s1, $s2 #add Int $s1 and $s2 and save them to $s1 
    j loop 

Wenn jemand irgendwelche Vorschläge oder Korrekturen hat, antworten Sie bitte. Vielen Dank im Voraus

Antwort

0

Auf MIPS-Prozessoren ist es üblich, $v0 für Funktionsrückgabewerte zu verwenden. Natürlich steht es Ihnen frei, eine beliebige Anrufkonvention für Ihre eigenen Funktionen zu erstellen, aber es sei denn, Sie haben einen sehr guten Grund, nicht zu sagen, dass Sie bei $v0 für Rückgabewerte bleiben sollten.

Um eine Funktion aufzurufen, würden Sie normalerweise jal verwenden, da dies das $ra Register einrichtet, so dass Sie später mit jr $ra zurückkehren können.
Wenn Sie es nicht bereits haben, schlage ich vor, dass Sie herunterladen MIPS32 ™ Architektur für Programmierer Band II: Die MIPS32 ™ Befehlssatz und lesen Sie, wie jal und jr funktionieren (oder andere Anweisungen, die Sie Ihrer Meinung nach verstehe nicht vollständig). so etwas wie

So ist der Code, den Sie in Ihrer Frage beschrieben aussehen könnte:

New:  
    la $a0, prompt2 # Print string "Input: " 
    li $v0,4 
    syscall 

    li $v0,5 #Read int x 
    syscall 
    # The result of syscall 5 is in $v0 

    jr $ra 

Add: 
    jal New 
    add $s1, $s1, $v0 # add the value we just read to $s1 
    j loop 
+0

vielen Dank, die mir sehr geholfen! – Sakis95

Verwandte Themen