Verifica
dell'esecuzione in pipeline
1. Creare un project e inserire un
file main.s
contenente il seguente codice:
#include <iregdef.h>
.set noreorder
.text
.globl start
.ent start
start: add t0, t1, t2
nop
nop
nop
nop
.end start
Per eseguirlo, avviare il simulatore
MipsPipeS.exe (contenente
una versione semplificata del MIPS pipeline) e verificare come procede
l'esecuzione nei vari passi del pipeline. In particolare, verificare
quali passi sono effettivamente eseguiti e quando avviene la modifica
dei registri.
2. Ripetere l'esercizio 1,
sostituendo l'istruzione add
con l'istruzione lw t0, 0(t1).
Per verificare l'esecuzione dell'istruzione, modificare il codice
dell'esercizio 1 come di seguito descritto:
#include <iregdef.h>
.data
parola: .word 5
.space 4
.set noreorder
.text
.globl start
.ent start
start: lw t0, 0(t1)
nop
nop
nop
nop
.end start
Per l'esecuzione, utilizzare sempre il simulatore
MipsPipeS.exe,
curando di inizializzare a mano il registro t1 con l'indirizzo
della word parola.
3. Ripetere l'esercizio 2,
sostituendo l'istruzione lw t0,
0(t1) con l'istruzione
sw t0, 4(t1)all'interno
del codice fornito. Per l'esecuzione, utilizzare sempre il simulatore
MipsPipeS.exe,
curando di inizializzare a mano il registro
t1
con l'indirizzo della word parola
ed il registro t0
con un valore diverso da zero.
4. Ripetere l'analisi fatta negli
esercizi precedenti sul codice seguente:
#include <iregdef.h>
.set reorder
.text
.globl start
.ent startt
start: nop
add t4, t2, t3 # i valori in t2, t3,
...
add t7, t5, t6 # ..., t5, t6 non
interessano
beq t0, t1, dest #
addi t8, zero, 1
addi t8, zero, 2
addi t8, zero, 3
dest: addi t8, zero, 4
nop
.end start
Si verifichi l'esecuzione sia nel
caso che la condizione sia verificata, sia nel caso opposto.
Alee nell'esecuzione in
pipeline
5. Creare un project con un
main contenente il seguente codice:
#include <iregdef.h>
.set noreorder
.text
.globl start
.ent start
start: add t5, t6, t6
add t2, t0, t1
add t4, t2, t3
nop
nop
nop
.end start
Si esegua il programma con il
simulatore MipsPipeS.exe
curando di inizializzare i registri t0,
t1 e
t3
con valori opportuni. Si verifichi se le istruzioni sono portate a
termine correttamente. In caso di alee, modificare il codice inserendo
dei nop
che permettano la corretta esecuzione delle istruzioni.
Successivamente, si esegua lo
stesso progetto sul simulatore
MipsPipeXL.exe, che contiene
una versione pił completa del MIPS pipeline. Si verifichi anche che
cosa succede con la direttiva .set
reorder.
6. Eseguire la stessa analisi
richiesta nell'esercizio 5 sul codice seguente, contenente
l'istruzione beq
:
#include <iregdef.h>
.set reorder
.text
.globl start
.ent startt
start: nop
add t4, t2, t3 # i valori in t2, t3,
...
add t7, t5, t6 # ..., t5, t6 non
interessano
beq t0, t1, dest #
li t8, 1
li t8, 2
li t8, 3
dest: li t8, 4
nop
.end start
7. Eseguire la stessa analisi
richiesta nell'esercizio 5 sul codice seguente, contenente
l'istruzione lw
:
#include <iregdef.h>
.data
parola: .word 5
.space 4
.set reorder
.text
.globl start
.ent start
start: add t8, t8, t8
la t1, parola
lw t2, 0(t1)
add t4, t2, t3
nop
nop
nop
.end start
|
|