Semplice programma mips.
Creazione di due array, uno da 10 elementi e un altro da 5.
il contenuto del secondo vettore dovrà rispettare tale regola
b[i]=a[2i]+a[2i+1]
Ecco il codice Mips. Da notare il salto che esegue la beq e la bne. La costante nei 16 bit dell'istruzione I deve essere sommata al program counter ( dopo la moltiplicazione per 4). Quindi in realtà dare l'etichetta al salto di tot istruzioni è formalmente errato. In realtà essendo PC Relative bisognerebbe indicare direttamente il numero di istruzioni dal saltare in avanti o all'indietro. In questo caso, tenstando un simulatore mips ho dovuto modificare la sintassi per indicare la cella di memoria dove continuare.
Creazione di due array, uno da 10 elementi e un altro da 5.
il contenuto del secondo vettore dovrà rispettare tale regola
b[i]=a[2i]+a[2i+1]
Ecco il codice Mips. Da notare il salto che esegue la beq e la bne. La costante nei 16 bit dell'istruzione I deve essere sommata al program counter ( dopo la moltiplicazione per 4). Quindi in realtà dare l'etichetta al salto di tot istruzioni è formalmente errato. In realtà essendo PC Relative bisognerebbe indicare direttamente il numero di istruzioni dal saltare in avanti o all'indietro. In questo caso, tenstando un simulatore mips ho dovuto modificare la sintassi per indicare la cella di memoria dove continuare.
PHP Code:
#conversioni istruzioni da c:# creazione di un vettore a di 10 elementi e b da 5
# riempire a con elementi da 0 a 9
# b[i]=a[2i]+a[2i+1];
#set registri
# $1=i
# $2=j
# $3=spiaz i
# $4=spiaz j
# $5=A=1500 a 1539
# $6=B=1540 a 1559
# $7= a + spiaz i / load a[i]
# $8= temp slt
# $9= grandezza vettore a = 9
# $10= grandezza vettore b= 4
# $11= registro con 1
# $12 = temp somma
# $13= b + spiaz i
#
%start 1000
add $1,$0,$0 # inizializzo i a 0
add $2,$0,$0 # inizializzo j a 0
addi $5,$0,1500 # inizio vettore a
addi,$6,$0,1540 # inizio vettore b
addi $9,$0,9 # grandezza vettore a
addi $10,$0,4 # grandezza vettore b
addi $11,$0,1 # inizializzo registro con 1
Salto1: slt $8,$9,$1 # verifica se 9<i
beq $8,$11,Salto2 # se 9<i salta
add $3,$1,$1 # spiaz i
add $3,$3,$3
add $7,$5,$3 # somma di a + offset i
sw $1,0($7) # scrittura in a[i]
addi $1,$1,1 # incremento di i
j Salto1 #salto al ciclo
Salto2: add $1,$0,$0 # inizializzazione i a 0
Salto3: slt $8,$10,$1 # verifica se 4<i
beq $8,$11,Salto4 # se 4<i salta
add $3,$1,$1 # spiaz i
add $3,$3,$3
add $2,$0,$1 # j=i
add $2,$2,$2 # j=2i
add $4,$2,$2 # spiaz j
add $4,$4,$4
add $7,$5,$4 # temp a = a+2i
lw $7,0($7) # temp a = a[2i]
add $12,$0,$7 # temp somma= 0 + a[2i]
addi $4,$4,4 # spiaz j+1
add $7,$5,$4 # temp a = a+(2i+1)
lw $7,0($7) # temp a = a[2i+1]
add $12,$12,$7 # temp somma = temp somma + a[2i+1]
add $13,$6,$3 # b+ spiaz i
sw $12,0($13) # b[i]=a[2i]+a[2i+1]
addi $1,$1,1
j Salto3
Salto4: add $0,$0,$0