0

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

Edited by rexins: n/a

2
Contributors
1
Reply
2
Views
7 Years
Discussion Span
Last Post by wildgoose
0

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.

Also....???

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.