Architettura degli elaboratori, 22 Settembre 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.
I risultati (sia quelli positivi che le eventuali bocciature e i ritiri) verranno registrati sul portale CEA alcuni giorni dopo la loro pubblicazione su web.
Chi non intenda accettare il voto o intenda fare un orale
(se il voto fosse maggiore di 24), dovra' comunicarlo per tempo al docente, anche via e-mail.
Gli iscritti alla laurea
triennale debbono essersi prenotati sul portale CEA.
Nel caso cio' non sia stato fatto, comunicatelo immediatamente
al docente o all'assistente in aula.
Coloro il cui piano di studi prevede Architettura da
9 crediti, una 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)
Si consideri la seguente frase presa dalle note del corso:
"La gerarchia di macchine astratte di un sistema di calcolo
non termina necessariamente con l'implementazione di un linguaggio di programmazione ad alto livello L."
Commentarla, spiegandone il significato.
(b)
Si supponga che il BUS che collega l'hardware Mic-1 alla RAM che realizza
le memorie dati di Mic-1 abbia 32 linee relative all'indirizzamento.
Si supponga inoltre che tali linee siano collegate sia a MAR che a PC.
Questo implica, ovviamente che su tali linee del BUS non possano essere
presenti contemporaneamente sia i segnali provenienti da MAR che quelli provenienti
da PC.
Descrivere un modo di collegare MAR e PC alle linee indirizzo del BUS e
l'eventuale circuiteria necessaria al corretto funzionamento di tale
collegamento, che dipendera' ovviamente anche dai segnali RD, WR e FETCH.
Esercizio 2
(a)
Tradurre in Mic-1 binario la seguente istruzione Mic-1 mal:
LV=MAR=MDR;rd;if (Z) goto A; else goto B
Dove A corrisponde all'indirizzo 011001011.
(b)
Supponete di avere la seguente funzione in un certo linguaggio di programmazione:
function uhuh (a,b : int)
localvar n,x : int
begin
x = 3;
for n from 1 to a
do
if x == 73
then x = ohoh(x+1, b)
else x = x-b
enddo
return x
end
dove "==" indica il predicato di uguaglianza tra interi e "=" e' l'assegnamento.
Tradurre la funzione uhuh in assembly IJVM. (ohoh e' un altra funzione che si suppone
aver gia' tradotto in assembly IJVM)
Esercizio 3
(a) Le memorie cache. Discuterne brevemente.
(b)
Si supponga di voler aggiungere l'istruzione IRADIX ad IJVM.
Tale istruzione prende il valore in cima allo Stack e lo sostituisce
con l'approssimazione intera della sua radice quadrata.
Non si intende implementare completamente tale istruzione in Mic-1, pero' vogliamo
che l'istruzione IRADIX abbia quanto detto come effetto.
Supponiamo di avere a disposizione un metodo IJVM, radint,
che utilizza zero variabili locali ed un argomento, e che calcola appunto
l'approssimazione intera della radice quadrata.
Supponiamo inoltre che
l'indirizzo di memoria del codice di radint sia 00000000000000000000000100000000.
Supponiamo inoltre che
tale codice NON contienga i 4 byte iniziali con le informazioni relative al numero
di argomenti e variabili locali.
Scrivere il codice Mic-1 che realizza l'istruzione IRADIX (utilizzando l'esistenza del
codice di radint) .
(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.