Hallo,
ich hoffe es kann mir hier jemand weiterhelfen. Ich versuche ein MIPS/SPIM programm zu schreiben, das vom Benutzer eine Zahl einliest und diese dann als Binärzahl ausgibt. Das war meine Idee:
also ich speichere meine "0 und 1er" der Division in space würde diese dann als String ausgeben. Eigentlich fand ich die Idee ganz gut, aber irgendwas funktioniert nicht. Ich finde meinen Fehler nicht. Ich vermute bei der Rekusion, der rekursive Aufruf der Division mit dem Ergebnis der Divison.
Wenn hier jemand eine Idee hat? Wär super, vielen Dank!
ich hoffe es kann mir hier jemand weiterhelfen. Ich versuche ein MIPS/SPIM programm zu schreiben, das vom Benutzer eine Zahl einliest und diese dann als Binärzahl ausgibt. Das war meine Idee:
Code:
.data eingabe: .asciiz "Geben Sie eine Zahl sdfasdf234234ein: " ausgabe: .asciiz "Ergebnis: " nl: .asciiz "\n" space: .space 8 # Speicherreservierung für 8 Byte .text main: la $a0, eingabe # "Geben Sie eine Zahl ein: " ausgeben li $v0, 4 syscall li $v0, 5 # Zahl einlesen syscall la $a0, ausgabe # "Ergebnis: " ausgeben li $v0, 4 syscall move $s0, $v0 # Eingabe sichern, $s0:=$v0, das heißt meine Eingabe steckt jetzt in $s0 li $s1, 2 # $s1:=2, Divident deklarieren li $t3, 7 # $t3:=7 move $a0, $s0 # in $a0 steckt mein Argument für den Prozeduraufruf, meine Eingabe jal dual # Prozeduraufruf la $a0, space # space wird geladen als String li $v0, 4 # Integer in $a0 wird ausgeben syscall # Ergebnis ausgeben la $a0, nl # Newline ausgeben li $v0, 4 syscall li $v0, 10 # terminieren syscall dual: addi $sp, $sp -8 # $sp dekrementieren, auf dem Stack Platz für 2 Register machen sw $ra, 8($sp) # $ra liegt auf dem erstem freien Platz, Rücksprungadresse wird auf den Stack gelegt sw $a0, 4($sp) # $a0 liegt auf dem zweitem freien Platz, übergebenes Argument wird auf den Stack gelegt bge $a0, $zero, positiv # if eingabe >= 0 positiv: div $a0,$s1 # eingabe : 2 mflo $t1 # in $t1 steckt das Ergebnis der Division mfhi $t2 # in $t2 steckt der Rest der Division sb $t2, space($t3) # den Rest der Divison am Ende von Space speichern sub $t3, $t3, 1 # $t3-- dekrementieren beqz $t1, null # wenn Ergebnis der Division 0 ist dann zu null springen move $a0, $t1 # Ergebnis der Division in $a0 stecken für erneuten Prozeduraufruf jal dual # rekursiver Aufruf von dual lw $ra, 8($sp) lw $a0, 4($sp) jr $ra null: jr $ra
Wenn hier jemand eine Idee hat? Wär super, vielen Dank!