- 13
- 0
- CPU
- Intel quadcore q9300 2,5ghz
- Scheda Madre
- asus pq5
- HDD
- 500Gb
- RAM
- Corsair Dominator 2Gb 1066mhz
- GPU
- Ati 3860 hd
- Monitor
- Agneovo 17 pollici
- PSU
- 520
- Case
- Chackra con monsterfan
- OS
- xp ed ubuntu
Ciao a tutti mi hanno chiesto di controllare questo codice in assembly mips
Praticamente lo scopo è quello di trovare quali elementi del vettore siano dispari sommarli tra di loro e ritornare la media, premetto che non avendo scritto io il codice ci possono essere errori nel uso dei registri ( cosa che verrà sistemata in un secondo momento ) il programma così com è entra in un loop continuo è nella console da come risultati
Pari: 25
Dispari: 30
Benvenuto
Progetto Assembly 2010
Codice:
.data
etc2: .asciiz "Il risultato è: "
st1: .asciiz "Benvenuto \nProgetto Assembly 2010"
st4: .asciiz "\nProgramma Terminato"
errore: .asciiz "\nNon è dispari"
vettore: .word 1,2,3,4,5,6,7,8,9,10,-1 # vettore di numeri pari e dispari interi positivi
.text
.globl __start
__start: li $v0, 4 #messaggio di benvenuto
la $a0, st1
syscall
la $a0,vettore #caria l'indirizzo del vettore nel registro $a0
lw $s1,0($a0) #carica la prima posizione dell'array nel registro $s1
confronto: add $a0, $a0 4 #aumenta il contatore per il vettore di una posizione
bgez $s1,numerodispari #se il registro contiene è maggiore o uguale a 0 vai a vedere se è dispari
j media #se i valori li hai ispezionati tutti vai a fare la media
numerodispari: li $t3, 2 #carica nel registro $t3 il numero 2
div $s1, $t3 #dividi il numero per 2
mfhi $t2 #Hi = HI contiene il resto e lo porto nel registro $t2
beq $t2, 0,nondispari #se il resto è uguale a 0 allora il numero non è dispari e vai a nondispari
jal aggiungi #altrimenti aggiungi il numero per poi fare la media da eseguire
aggiungi: add $s5 $s5, $s1 #aggiungi il numero trovato nel registro contenitore $s5
add $s7 $s7, 1 #creo un contatore a parte per il numero di elementi dispari inseriti ( $s7 )
add $s6 $s6, 1 ####contatore che aumenta in base al numero di elementi analizzati ( FITTIZIO SOLO DI CONTROLLO)
jal confronto #salta all'etichetta confronto
nondispari:
li $v0, 4 #messaggio per il risultato
la $a0, errore
syscall
move $a0, $t4 #stampa il risultato
li $v0, 1
syscall #salta all'etichetta confronto
media: div $s5, $s7 #quando tutto il vettore è stato scansionato fai la media
mfhi $t4 #degli elementi dispari presenti e metti il risultato in $t4
jal risultato # ora che hai fatto la media vai a mostrare il risultato
risultato: li $v0, 4 #messaggio per il risultato
la $a0, etc2
syscall
move $a0, $t4 #stampa il risultato
li $v0, 1
syscall
j uscita #salta all'uscita del programma
uscita: li $v0, 4 #messaggio di uscita
la $a0, st4
syscall
li $v0,10 #codice di uscita
syscall
Praticamente lo scopo è quello di trovare quali elementi del vettore siano dispari sommarli tra di loro e ritornare la media, premetto che non avendo scritto io il codice ci possono essere errori nel uso dei registri ( cosa che verrà sistemata in un secondo momento ) il programma così com è entra in un loop continuo è nella console da come risultati
Pari: 25
Dispari: 30
Benvenuto
Progetto Assembly 2010