Architettura , 7 Dicembre 2006
(appello straordinario esclusivamente per ripetenti e fuori corso)
Non e' ammesso l'uso di alcun testo, appunti o calcolatrici. Le risposte vanno scritte
nel foglio di bella copia.
Massima SINTETICITA'.
L'eccessiva verbosita' verra' considerata negativamente.
Esercizio 1
Elencare alcuni aspetti che differenziano le architetture CISC da quelle RISC.
Esercizio 2
Il formato delle microistruzioni Mic-1 e' a lunghezza fissa o variabile?
Qual e' il vantaggio che si ha? e lo svantaggio? Stesse domande per le istruzioni IJVM.
Esercizio 3
Descrivere il funzionamento della IFU presente nell'architettura Mic-2.
Esercizio 4
Si consideri il seguente metodo IJVM.
.method boh(n)
ILOAD n
IFEQ et
BIPUSH 1
ILOAD n
IF_ICMPEQ et
LDC_W objref
ILOAD n
BIPUSH 2
ISUB
INVOKEVIRTUAL boh
IRETURN
et: ILOAD n
IRETURN
.end-method
Dire cosa calcola.
Ricopiare il codice commentandolo in modo sintetico
Scrivere del codice IJVM che corrisponda ad una chiamata del metodo boh
che non ne faccia terminare l'esecuzione.
Esercizio 5
Supponete di voler aggiungere all'insieme di istruzioni IJVM la nuova istruzione
PLURIDUP num
che duplica il valore presente in cima allo stack per un numero di volte pari a num (num e' sempre un numero non negativo rappresentato con un byte).
Per esempio, l'effetto di eseguire PLURIDUP 3 e' lo stesso che eseguire DUP DUP DUP. L'effetto di PLURIDUP 0 e' nullo.
Scrivere un segmento di codice Mic-1 che realizzi l'istruzione PLURIDUP num.
Commentare il codice.
N.B. Codice non commentato NON verra' valutato.
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 n.
Se volessimo sostituire al posto di A e B altri due metodi, C e D,
anch'essi formati da n byte,
quali istruzioni dovremmo modificare?
Cosa occorrerebbe modificare
nella Constant Pool?
Cosa occorrerebbe modificare nello Stack?
E se invece volessimo "invertire" di posto nella Method Area
i codici di A e di B, quali istruzioni dovremmo modificare?
Cosa occorrerebbe modificare
nella Constant Pool?
Cosa occorrerebbe modificare nello Stack?
Motivare le risposte.