xbubbax
25-05-2007, 10:08
Qualcuno mi aiuta a capire dove sbaglio in questo esercizio?
Devo fare una funzione che prende 4 interi, li confronta a due a due e mi dice il minore numero pari dei 4. Se però confronta due valori dispari deve dare come risultato 10.
non capisco perchè non funziona
.text
.globl main
main:
li $v0,5 #Inserisci il primo numero da input
syscall
move $a0,$v0 #Sposta il numero in $a0
li $v0,5 #Inserisci il secondo numero da input
syscall
move $a1,$v0 #Sposta il numero in $a1
li $v0,5 #Inserisci il terzo numero da input
syscall
move $a2,$v0 #Sposta il numero in $a2
li $v0,5 #Inserisci il quarto numero da input
syscall
move $a3,$v0 #Sposta il numero in $a3
jal FUN_MINPARI #Salta alla funzione FUN_MINPARI
move $a0,$v0 #Sposta $v0 in $a0
li $v0,1 #Stampa il risultato
syscall
li $v0,10 #Esci
syscall
jr $ra
FUN_MINPARI:
rem $t0,$a0,2 #Divido $a0 per 2 e metto il resto in $t0
rem $t1,$a1,2 #Divido $a1 per 2 e metto il resto in $t1
beqz $t0,pariuno #Se $t0 è uguale a zero vai a pariuno
beqz $t1,paridue #Se $t1 è uguale a zero vai a paridue
j fine #Vai a fine
pariuno:
beqz $t1,confrontouno #Se $t1 è uguale a zero vai a confrontouno
move $v0,$a0 #Sposta $a0 in $v0
j casodue #Vai a casodue
paridue:
move $v0,$a1 #Sposta $a1 in $v0
j casodue #Vai a casodue
confrontouno:
ble $a0,$a1,minimouno #Se $a0 è minore o uguale di $a1 vai a minimouno
j minimodue #Vai a minimodue
minimouno:
move $v0,$a0 #Sposto $a0 in $v0
j casodue #Vai a casodue
minimodue:
move $v0,$a1 #Sposto $a1 in $v0
j casodue #Vai a casodue
casodue:
rem $t0,$a1,2 #Divido $a1 per 2 e metto il resto in $t0
rem $t1,$a2,2 #Divido $a2 per 2 e metto il resto in $t1
beqz $t0,paritre #Se $t0 è uguale a zero vai a paritre
beqz $t1,pariquattro #Se $t1 è uguale a zero vai a pariquattro
j fine #Vai a fine
paritre:
beqz $t1,confrontodue #Se $t1 è uguale a zero vai a confrontodue
j casotre #Vai a casotre perchè $a1 non è minore di $a0
pariquattro:
j confrontotre #Vai a confrontotre
confrontodue:
ble $a1,$a2,casotre #Se $a1 è minore o uguale di $a2 vai a casotre
confrontotre:
ble $a2,$v0,minimotre #Se $a2 è minore o uguale di $v0 vai a minimotre
j casotre #Vai a casotre
minimotre:
move $v0,$a2 #Sposta $a2 in $v0
j casotre #Vai a casotre
casotre:
rem $t0,$a2,2 #Divido $a2 per 2 e metto il resto in $t0
rem $t1,$a3,2 #Divido $a3 per 2 e metto il resto in $t1
beqz $t0,paricinque #Se $t0 è uguale a zero vai a paricinque
beqz $t1,parisei #Se $t1 è uguale a zero vai a parisei
j fine
paricinque:
beqz $t1,confrontoquattro #Se $t1 è uguale a zero vai a confrontoquattro
j finedue #Vai a finedue
parisei:
j ultimoconfrontodue #Vai a ultimoconfrontodue
confrontoquattro:
ble $a3,$a2,ultimoconfronto #Se $a3 è minore di $a2 vai a ultimoconfronto
j finedue #Vai a finedue
ultimoconfrontodue:
ble $a3,$v0,piccolosalto
j finedue #Vai a finedue
piccolosalto:
move $v0,$a3 #Sposta $a3 in $v0
j finedue #Vai a finedue
fine:
li $v0,10 #Carica 10 in $v0
jr $ra
finedue:
jr $ra
E' UN PO LUNGHETTO, VI PREGO AIUTATEMI
Devo fare una funzione che prende 4 interi, li confronta a due a due e mi dice il minore numero pari dei 4. Se però confronta due valori dispari deve dare come risultato 10.
non capisco perchè non funziona
.text
.globl main
main:
li $v0,5 #Inserisci il primo numero da input
syscall
move $a0,$v0 #Sposta il numero in $a0
li $v0,5 #Inserisci il secondo numero da input
syscall
move $a1,$v0 #Sposta il numero in $a1
li $v0,5 #Inserisci il terzo numero da input
syscall
move $a2,$v0 #Sposta il numero in $a2
li $v0,5 #Inserisci il quarto numero da input
syscall
move $a3,$v0 #Sposta il numero in $a3
jal FUN_MINPARI #Salta alla funzione FUN_MINPARI
move $a0,$v0 #Sposta $v0 in $a0
li $v0,1 #Stampa il risultato
syscall
li $v0,10 #Esci
syscall
jr $ra
FUN_MINPARI:
rem $t0,$a0,2 #Divido $a0 per 2 e metto il resto in $t0
rem $t1,$a1,2 #Divido $a1 per 2 e metto il resto in $t1
beqz $t0,pariuno #Se $t0 è uguale a zero vai a pariuno
beqz $t1,paridue #Se $t1 è uguale a zero vai a paridue
j fine #Vai a fine
pariuno:
beqz $t1,confrontouno #Se $t1 è uguale a zero vai a confrontouno
move $v0,$a0 #Sposta $a0 in $v0
j casodue #Vai a casodue
paridue:
move $v0,$a1 #Sposta $a1 in $v0
j casodue #Vai a casodue
confrontouno:
ble $a0,$a1,minimouno #Se $a0 è minore o uguale di $a1 vai a minimouno
j minimodue #Vai a minimodue
minimouno:
move $v0,$a0 #Sposto $a0 in $v0
j casodue #Vai a casodue
minimodue:
move $v0,$a1 #Sposto $a1 in $v0
j casodue #Vai a casodue
casodue:
rem $t0,$a1,2 #Divido $a1 per 2 e metto il resto in $t0
rem $t1,$a2,2 #Divido $a2 per 2 e metto il resto in $t1
beqz $t0,paritre #Se $t0 è uguale a zero vai a paritre
beqz $t1,pariquattro #Se $t1 è uguale a zero vai a pariquattro
j fine #Vai a fine
paritre:
beqz $t1,confrontodue #Se $t1 è uguale a zero vai a confrontodue
j casotre #Vai a casotre perchè $a1 non è minore di $a0
pariquattro:
j confrontotre #Vai a confrontotre
confrontodue:
ble $a1,$a2,casotre #Se $a1 è minore o uguale di $a2 vai a casotre
confrontotre:
ble $a2,$v0,minimotre #Se $a2 è minore o uguale di $v0 vai a minimotre
j casotre #Vai a casotre
minimotre:
move $v0,$a2 #Sposta $a2 in $v0
j casotre #Vai a casotre
casotre:
rem $t0,$a2,2 #Divido $a2 per 2 e metto il resto in $t0
rem $t1,$a3,2 #Divido $a3 per 2 e metto il resto in $t1
beqz $t0,paricinque #Se $t0 è uguale a zero vai a paricinque
beqz $t1,parisei #Se $t1 è uguale a zero vai a parisei
j fine
paricinque:
beqz $t1,confrontoquattro #Se $t1 è uguale a zero vai a confrontoquattro
j finedue #Vai a finedue
parisei:
j ultimoconfrontodue #Vai a ultimoconfrontodue
confrontoquattro:
ble $a3,$a2,ultimoconfronto #Se $a3 è minore di $a2 vai a ultimoconfronto
j finedue #Vai a finedue
ultimoconfrontodue:
ble $a3,$v0,piccolosalto
j finedue #Vai a finedue
piccolosalto:
move $v0,$a3 #Sposta $a3 in $v0
j finedue #Vai a finedue
fine:
li $v0,10 #Carica 10 in $v0
jr $ra
finedue:
jr $ra
E' UN PO LUNGHETTO, VI PREGO AIUTATEMI