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.