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