Architettura degli elaboratori, 14 Giugno 2008
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.
I risultati (sia positivi che negativi) verranno
registrati sul portale CEA non appena corretti i compiti.
Chi non intenda accettare un voto basso o desideri fare un orale in caso di voto basso
(se quest'ultimo e' comunque maggiore di 24), deve comunicarlo per tempo al docente
o all'assistente in aula.
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
Si consideri la struttura a livelli di un calcolatore.
Si motivi l'introduzione di tale struttura.
Si spieghi cos'e' il semantic gap.
Esercizio 2
I Chip di memoria non volatile (Nonvolatile Memory Chips). Discuterne.
Esercizio 3
Si consideri la realizzazione dell'ALU di Mic-1 tramite il collegamento di
32 alu da 1-bit come da Fig.3-19 del testo.
Qual e' l'output della ALU se i sei bit di controllo
F0, F1, ENA, ENB, INVA, INC
sono settati con 010111?
Giustificare la risposta.
Esercizio 4
Si vuole estendere il linguaggio IJVM con una nuova istruzione XISTR.
Vogliamo che eseguire l'istruzione XISTR risulti equivalente ad eseguire il seguente
segmento di codice IJVM puro:
ILOAD 1
ILOAD 2
BIPUSH 3
IADD
IADD
Scrivere il codice Mic-1 che realizza l'istruzione XISTR.
Fornire la versione Mic-2 del codice prodotto.
Esercizio 5
Scrivere un metodo assembly IJVM che calcoli la seguente funzione f sui numeri naturali:
f(x) = if x ≤ 3 then 2 else (f(x-1) + f(x-3))
Esercizio 6
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 utilizzate. 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.