Hallo,
I have to develop a SPIM/MIPS programm, which read an integer from the user and change this integer into binary system (like for example 00011000)
My idea was this one, but it doesn't work: I think the problem is the space segment.
maybe somebody see the problem and can help me, thank you
.data
eingabe: .asciiz "Geben Sie eine Zahl ein: "
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
move $t0, $v0 # Eingabe sichern, $t0:=$v0, das heißt meine Eingabe steckt jetzt in $t0
la $a0, ausgabe # "Ergebnis: " ausgeben
li $v0, 4
syscall
move $a0, $t0 # in $a0 steckt mein Argument für den Prozeduraufruf, meine Eingabe
jal dual # Prozedur aufrufen
move $a0, $v0 # $a0:=$v0 (in $v0 ist das Funktionsergebnis meiner Prozedur)
li $v0, 1 # 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 3 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
bgtz $a0, positiv # if eingabe > 0
beqz $a0, nulln # if eingabe == 0
positiv: li $s0, 2 # $s0:=2, Hilfsvariable zum Dividieren
div $a0,$s0 # eingabe : 2
mflo $t1 # in $t1 steckt das Ergebnis der Division
mfhi $v0 # in $v0 steckt der Rest der Division
move $a0, $t1 # Ergebnis der Division in $a0 stecken für erneuten Prozeduraufruf
beqz $a0, null # wenn Ergebnis der Division in $a0 gleich 0 ist, dann zur Sprungmarke null
jal dual # rekursiver Aufruf von dual
lw $ra, 8($sp)
lw $a0, 4($sp)
addi $sp, $sp, 8
jr $ra
null: jr $ra
nulln: li $v0, 0
jr $ra