Ciao a tutti. Ho tradotto questo programma scritto in c in MIPS
codice:
int promossi( int voti[], int n) {
int promossi = 0;
for(i = 0; i < n; i++) {
if(voti[i] >= 18)
promossi = promossi + 1;
}
return promossi;
}
Assumo che
$a0 = indirizzo base de vettore voti;
$a1 = n (numero studenti);
$s0 = promossi;
$t0 = indice (i);
codice:
promossi: addi $sp, $sp, - 4 #faccio spazio di 1 elemento nello stack
sw $s0, 0($sp) # salvataggio di $s0
add $s0 $zero $zero # $s0 = 0
add $t0, $zero, $zero # $t0 = 0
Ciclo: stl $t1, $t0, $a1 # $t1 = 1 se $t0 < $a1
beq $t1, $zero, Exit # se $t1 = 0 allora esci
sll $t2, $t0, 2 # $t2 = $t0 * 4
add $t2, $t2, $a0 # indirizzo del vettore voti
lw $t2, 0($t2) # $t2 = v[i]
stli $t1, $t2, 18 # $t1 = 1 se $t2 < 18
bne $t1, $zero, ELSE # vai a else se $t1 è diverso da zero
addi $s0, $s0, 1 # incrementa di 1
Else: addi $to, $to, 1
j ciclo
EXIT: move $vo, $so
.......
j $ra
Volevo sapere se la traduzione è fatta bene. Grazie