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 ed
indicarlo sul proprio elaborato.
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
In un sistema di calcolo organizzato a livelli cosa si intende per livello di microprogrammazione?
Esercizio 2
E' possibile realizzare in Hw qualsiasi funzione
f : {0,1}* --> {0,1}* ? Perche'?
Esercizio 3
Scrivere un programma Mic-1 che interpreti la seguente istruzione
che intendiamo aggiungere all'IJVM:
ADDLCL varnum1varnum2
la cui semantica e' la seguente
M[LV + varnum1] <-- M[LV + varnum1] + varnum2 +2 (si pone nella variabile locale indicata da varnum1 la somma delle variabili
locali indicate da varnum1 e varnum2 e si incrementa di 2 il risultato.
I campi varnum solo lunghi un byte.
Volendo, per semplicita',
si possono utilizzare, per memorizzare valori temporanei, i registri TOS, CPP e OPC,
senza preoccuparsi di ripristinare i loro valori precedenti (per TOS e CPP infatti
non farlo in pratica creerebbe problemi).
Esercizio 4
Scrivere un metodo assembly IJVM che calcoli il numero massimo di 1 consecutivi
contenuti nella parola (di 32 bit) che viene passata come argomento al metodo.
Esercizio 5
Nelprogramma del corso e' presente un esempio di
I/O gestito ad interruzioni per la macchina del livello ISA del Tanenbaum.
In tale esempio il controllo della presenza di
interruzioni e' realizzato dall'interprete microprogrammato estendendo
il microinterprete del Tanenbaum con le seguenti microistruzioni
int1 if opc[15] goto main1;
int2 if (not(opc[0]) and not(opc[1]) ... and not(opc[7])) goto main1;
int3 SP=MAR=SP+1;
int4 MDR=PC; wr;
int5 SP=MAR=SP+1;
int6 MDR=OPC; wr;
int7 MAR=OxFF; rd;
int8 OPC[15]=1;
int9 PC=MDR; fetch;
int10
Descrivere cosa fanno (e perche') tali microistruzioni. Non tutte le microistruzioni
sono miscroistruzioni Mic-1. Quali non lo sono? perche' sono state aggiunte?
Modificare il precedente microcodice affiche' il gestore delle interruzioni
venga eseguito ad interruzioni abilitate.
Dire brevemente e informalmente come si potrebbe far si che il gestore
gestisca le interruzioni supponendo che esistano delle priorita' tra i vari devices.
Perche' il gestore delle interruzioni deve necessariamente essere realizzato
con un segmento di codice IJVM e non in Mic-1?
E' possibile poter far si che il controllo della presenza di interruzioni
sia realizzato in hardware? Se si, descrivere informalmente un modo possibile di farlo,
se no, giustificare la risposta negativa.
Esercizio 6
Supponiate che un programma in assembler IJVM, tradotto e caricato
nella Method Area sia formato dal codice
corrispondente ad un .main e dal codice di due metodi A e B.
Supponiate inoltre che il codice dei due
metodi sia formato dallo stesso numero di byte.
Se volessimo "invertire" di posto
i codici di A e di B, quali istruzioni dovremmo modificare?
Cosa occorrerebbe modificare
nella Constant Pool?
Cosa occorrerebbe modificare nello Stack?