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

eingabe:    	.asciiz "Geben Sie eine Zahl ein: "
ausgabe: 		.asciiz "Ergebnis: " 
nl:				.asciiz "\n" 
space:          .space 8 							 	# Speicherreservierung für 8 Byte 

main:   		la      	$a0, eingabe           		    # "Geben Sie eine Zahl ein: " ausgeben 
				li      	$v0, 4
        		li      	$v0, 5		                    # Zahl einlesen
        		move  		$t0, $v0    		            # Eingabe sichern, $t0:=$v0, das heißt meine Eingabe steckt jetzt in $t0 
        		la      	$a0, ausgabe        		    # "Ergebnis: " ausgeben 
				li      	$v0, 4
        		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
        		li      	$v0, 10				            # terminieren
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

Edited by rexins: n/a

6 Years
Discussion Span
Last Post by wildgoose

It's kind of late here but I'm assuming you're trying to build your own ASCII string by recursively doing the 10's base binary to ASCII.

But why are you dividing by 2 instead of 10?
You will need to add '0' 30 hex to each nested result, to change 0...9 to 30-39 hex.


bgtz        $a0, positiv		# if eingabe > 0
beqz        $a0, nulln		# if eingabe == 0
	; negative???   eingabe < 0

Edited by wildgoose: n/a

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.