Architettura degli elaboratori, 3 Marzo 2006
Non e' ammesso l'uso di
alcun testo, appunti o calcolatrici. Le risposte vanno scritte
nel foglio di bella copia.
Si raccomanda la massima SINTETICITA'. L'eccessiva verbosita' verra'
considerata negativamente.
Gli iscritti alla laurea
triennale debbono essersi prenotati sul portale studenti del nostro
ateneo, in caso cio' non sia stato fatto fatelo immediatamente presente
al docente o all'assistente in aula.
Coloro che debbono sostenere
l'esame da 9 crediti, uno volta superato lo scritto dovranno sostenere
un orale sulla parte del programma del loro anno di corso non coperto
dal programma di quest'anno.
Esercizio 1
(a) Commentare e chiarire il senso della seguente frase: "È da notare che nella pratica non è raro che un livello realizzi una macchina astratta che non copre del tutto il livello sottostante ma ne potenzia alcune delle caratteristiche, lasciandone trasparire del tutto altre."
(b) Fornire un breve confronto fra architetture RISC e CISC.
Esercizio 2
(a)
Si consideri la Figura 3.37 del testo.
In quale istante la CPU inizia a leggere i dati forniti dalla Memoria?
In quale istante li avrebbe letti se non fosse stata asserita la linea WAIT?
Cosa indica il valore TAD? E TDS?
(b)
Consideriamo il seguente frammento di programma (descritto anche
nel Tananbaum) scritto in un linguaggio assembly generico.
MOV R1,#0
MOV R2,#0
MOV R3,4096
LOOP: MOV R4,(R2)
AND R4,(R2)
OR R1,A(R4)
ADD R2,4(B)
CMP R2,R3
BLT LOOP
Tale programma suppone di avere in memoria due vettori di 1024 parole.
Tali vettori sono memorizzati a partire dagli indirizzi A e B.
Ogni parola e' lunga 4 byte e l'indirizzamento della memoria e' al byte.
Il programma dovrebbe calcolare, per ogni parola del vettore A,
l'AND bit a bit di tale parola con
la parola corrispondente in B, per poi fare l'OR bit a bit di tutte le 1024 parole ottenute.
Il programma in realta' contiene degli errori relativamente alle modalita' di
indirizzamento utilizzare. Identificare tali errori e correggerli.
Ricordiamo che #c denota indirizzamento immediato, dove
c puo' essere un numerale, un simbolo
o un'espressione matematica formata da questi.
L'indirizzamento registro e diretto si denota con c, dove
c puo' essere solo il nome di un registro, un numerale o un simbolo.
L'indirizzamento registro indiretto si denota con (R), mentre l'indirizzamento
indicizzato (indexed addressing) si denota con L(R).
Ricordate che il primo argomento delle istruzioni e' anche quello dove
finisce il risultato.
Esercizio 3
(a)
Si supponga che esista in IJVM l'istruzione BURP, la cui realizzazione in Mic-1
(inserita, come la realizzazione di tutte le istruzioni IJVM, nel microinterprete)
corrisponda al seguente frammento di codice
PC=PC+1; fetch
H=MBRU<<8
H=MBRU OR H
PC=PC+1; fetch
MAR=LV+H; rd
H=MBR
MDR=MDR+H
MAR=SP=SP+1; wr
PC=PC+1;fetch
goto Main1
Cosa fa BURP? Quanti byte e' lunga BURP ed in particolare i suoi argomenti?
Tradurre BURP nell'IJVM normale (senza BURP).
Quale sarebbe il codice che realizza BURP nel caso la realizzazione di IJVM
fosse fatta in Mic-2?
(b)
Supponiamo di avere il linguaggio Mic-1 privo delle operazioni
di rd, wr e fetch e di avere un traduttore che traduce frammenti
di codice Mic-1 in metodi IJVM che restituiscono sempre il valore
dell'ultimo registro modificato.
La traduzione del seguente frammento Mic-1
MBR=PC=1
H=MBRU<<8
H=MBRU OR H
OPC=PC+1
sara' quindi un codice del tipo
.method trad()
.var
mar
mdr
pc
mbr
sp
lv
cpp
tos
opc
h
.end-var
CODICE-IJVM
.end-method.
Sostituire CODICE-IJVM con il risultato della traduzione del frammento
Mic-1 di cui sopra.
N.B. il codice deve risultare dalla traduzione in sequenza
delle singole istruzioni Mic-1.