Salve a tutti !
Posso aprire un thread riguardante questo argomento o non č possibile?
Grazie in anticipo per la risposta!![]()
![]()
Salve a tutti !
Posso aprire un thread riguardante questo argomento o non č possibile?
Grazie in anticipo per la risposta!![]()
![]()
Debian Sarge 3.01a
Slackware 10.2
in particolare sarebbe assembly MIPS !!!
bhe intanto spiego cosa devo fare, casomai qualcuno mi risponda...........
devo fare una procedura che trova i num dispari in un vettore (io l'ho pensata cosi ma non funge):
dispari:
addi $t0,$t0,2
div $s0,$t0
mfhi $t1
bne $t1, $zero,diversi
jr $ra
diversi:
addi $s1,$s1,1
jr $ra
dove sbaglio?
Debian Sarge 3.01a
Slackware 10.2
Il MIPS non lo conosco, ma avendo studiato almeno quattro assembly diversi, forse riesco a capirci qualcosa...
Commento il codice, tu dimmi se ho capito giusto.
Cmq e' crudele obbligare una persona a usare un assembly RISC... ^__^codice:dispari: addi $t0,$t0,2 #aggiungi 2 al registro to div $s0,$t0 #dividi s0 per t0 mfhi $t1 #sposta il resto nel registro t1 bne $t1, $zero,diversi #cosa e' $zero? jr $ra #sicuro che cosi' non esca dalla procedura? (RA= Return Address?) diversi: addi $s1,$s1,1 jr $ra
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
ma in %t0 potrebbe esserci un numero
prova addi $t0, $zero, 2
Posto il programma intero!
#Dato 1 array calcola quanti sono gli elementi dispari
.data
array: .word 3,7,2,4,8
annuncio: .asciiz "Il risultato e' "
.text
main:
addi $sp,$sp,-4 # PUSH(ra)
sw $ra,0($sp) #
add $s0,$zero,$zero #pone s0=0
add $s2,$zero,$zero #pone s2=0
addi $v0,$zero,1 #pone v0=1
la $a0,array #a0 e' l'inizio dell'array
ciclo:
lw $s0,0($a0)
jal pariodispari
add $s2,$s2,$s1 #somma s1 a s2 $v1,$v0,5 #v0 e' minore di 5?
beq $v1,$zero,esci
addi $v0,$v0,1
addi $a0,$a0,4
j ciclo # continua il ciclo
esci:
addi $v0,$zero,4 #codice stampa stringa
la $a0,annuncio #stringa
syscall #stampa
addi $v0,$zero,1 #codice stampa intero
add $a0,$zero,$s2 #metti s2 in a0
syscall #stampa
lw $ra,0($sp) #POP (in ra)
addi $sp,$sp,4 #
jr $ra #fine
pariodispari:
addi $3,$3,2
div $s0,$s3
mfhi $s4
bne $s4,$zero,diversi
jr $ra #fine procedura
diversi:
addi $s1,$zero,1
jr $ra #fine procedura
Debian Sarge 3.01a
Slackware 10.2
Ah, ecco, non era un ciclo... ^__^
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
sai dirmi dove sbaglio?
Debian Sarge 3.01a
Slackware 10.2
Che risultato ti restituisce, sempre che restituisca qualcosa?
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
praticamente adesso ho messo a posto tranne che fa la cosa contraria: mi restituisce il numero dei pari invece che dei dispari! Buuuahhahah!
Debian Sarge 3.01a
Slackware 10.2
posto il codice (in cui ho cambiato l'array e ho messo un solo num dispari):
# Programma che dato un array
# calcola quanti sono gli elementi dispari
.data
array: .word 1,24,32,2,4
annuncio: .asciiz "Il risultato e' "
.text
main:
addi $sp,$sp,-4 # PUSH(ra)
sw $ra,0($sp) #
add $s0,$zero,$zero #pone s0=0
add $s2,$zero,$zero #pone s2=0
addi $v0,$zero,1 #pone v0=1
la $a0,array #a0 e' l'inizio dell'array
ciclo:
lw $s0,0($a0) #s0= un elemento dell'array
jal pariodispari #chiama la procedura pariodispari
add $s2,$s2,$s1 #somma s1 a s2
slti $v1,$v0,5 #v0 e' minore di 5?
beq $v1,$zero,esci #se cosi' non e', esci
addi $v0,$v0,1
addi $a0,$a0,4
j ciclo
esci:
addi $v0,$zero,4
la $a0,annuncio #stringa
syscall #stampa
addi $v0,$zero,1 #codice stampa intero
add $a0,$zero,$s2 #metti s2 in a0
syscall #stampa
lw $ra,0($sp) #POP (in ra)
addi $sp,$sp,4 #
jr $ra #fine
pariodispari:
addi $t0,$zero,2
div $s0,$t0
mfhi $t1
beq $t1,$zero,diversi
jr $ra #fine della procedura
diversi:
addi $s1,$zero,1
jr $ra #fine della procedura
Debian Sarge 3.01a
Slackware 10.2