PDA

View Full Version : Aiuto su semplice esercizio MIPS


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

Oceans11
25-05-2007, 13:57
come non funziona??ti da errore da qualche parte?se sì con cosa l'hai lanciato??

scusa ma sono un pò arruginito con il mips...e inoltre non ho mai usato pseudoistruzioni...tipo della rem non ne sapevo neache l'esistenza!! :D

xbubbax
25-05-2007, 14:03
l'ho provato su mipster ma non è questo il problema penso

comq cicla all'infinito

xbubbax
25-05-2007, 14:06
ti ho mandato un messaggio privato, spero in un tuo aiuto