Ragazzi ho bisogno del vostro aiuto perche sto impazzendo con un programmino che in java sono 5 righe!!
Vi posto il codice intanto
codice:
# Title: Somma dei due maggiori				
# Author: Dennis Aleandro Boanini			
# Description: Trova i due massimi fra tre numeri e ne fa la somma
################# Data segment #####################
.data
numero: .asciiz "Inserisci numero --> "
msg:  .asciiz "La somma dei due massimi è --> "
################# Code segment #####################


.text
.globl main
main:
	li $s0, 0		# uso $s0 per memorizzare la somma dei due massimi inseriti e lo inizializzo a 0.
	li $s1, 0		# MAX1 uso $s1 per memorizzare il primo numero massimo e lo inizializzo a 0
	li $s2, 0		# MAX2 uso $s2 per memorizzare il secondo numero massimo e lo inizializzo a 0
	li $t0, 0       # uso $t0 come contatore per inserire 3 numeri

loop:
	la $a0, numero	# 
	li $v0, 4		# mette il codice 4(print string) nel registro $v0
	syscall			# chiamata al sisteme che mi stampa la stringa numero dichiarata nel data segment

	li $v0, 5		# mette il codice 5(read integer) nel registro $v0
	syscall			# chiamata al sistema che mi permette di inserire in input un intero
	
	move $s3, $v0
	blt $s3, $s2, Else
	move $s1, $s2
	move $s2, $s3
	
	add $t0, $t0, 1		# incremento il contatore di 1
	bne $t0, 2, loop	# se $t0 è diverso da 3 richiama loop per farmi inserire altri interi

	j Exit
Else:
	blt $s3, $s1, Exit
	move $s1, $s3
	#add $t0, $t0, 1
	j loop

Exit:
	add $s0, $s1, $s2
	
	li $v0, 4
	la $a0, msg
	syscall
	
	move $a0, $s0
	li $v0, 1
	syscall

li $v0, 10			# chiude il programma
syscall
In pratica sto facendo il test inserendo le varie permutazioni di 1, 2, 3. Se in input do 3, 2, 1, il programma mi restituisce 5 e va bene. Se invece provo a inserire 1, 2, 3, dopo l'inserimento del 2 mi stampa il risultato 3.
Se in questa riga bne $t0, 2, loop, faccio il controllo di $t0 con 3 anziche con 2, allora anche la permutazione 1, 2, 3, mi restituisce risultato corretto, cosi come la permutazione 2, 3, 1. Mentre le permutazioni 2, 1, 3; 3, 1, 2; 1, 3, 2; Mi fanno inserire anche un quarto numero.
Mi potete spiegare dove sbaglio?
GRazie mille a tutti

EDIT:
Ho risolto. Vi posto la soluzione. Mi potete comunque dire se è fatta bene o se puo essere migliorata in qualche modo?
codice:
# Title: Somma dei due maggiori				
# Author: Dennis Aleandro Boanini			
# Description: Trova i due massimi fra tre numeri e ne fa la somma
################# Data segment #####################
.data
numero: .asciiz "Inserisci numero --> "
msg:  .asciiz "La somma dei due massimi è --> "
################# Code segment #####################


.text
.globl main
main:
	li $s0, 0		# uso $s0 per memorizzare la somma dei due massimi inseriti e lo inizializzo a 0.
	li $s1, 0		# MAX1 uso $s1 per memorizzare il primo numero massimo e lo inizializzo a 0
	li $s2, 0		# MAX2 uso $s2 per memorizzare il secondo numero massimo e lo inizializzo a 0
	li $t0, 0       # uso $t0 come contatore per inserire 3 numeri

loop:
	la $a0, numero	# 
	li $v0, 4		# mette il codice 4(print string) nel registro $v0
	syscall			# chiamata al sisteme che mi stampa la stringa numero dichiarata nel data segment

	li $v0, 5		# mette il codice 5(read integer) nel registro $v0
	syscall			# chiamata al sistema che mi permette di inserire in input un intero
	
	move $s3, $v0
	blt $s3, $s2, Else
	move $s1, $s2
	move $s2, $s3
	
	add $t0, $t0, 1		# incremento il contatore di 1
	bne $t0, 3, loop	# se $t0 è diverso da 3 richiama loop per farmi inserire altri interi

	j Exit
Else:
	blt $s3, $s1, Exit
	move $s1, $s3
	add $t0, $t0, 1
	bne $t0, 3, loop
	#j loop

Exit:
	add $s0, $s1, $s2
	
	li $v0, 4
	la $a0, msg
	syscall
	
	move $a0, $s0
	li $v0, 1
	syscall

li $v0, 10			# chiude il programma
syscall
Grazie mille ancora a tutti