Architetture degli Elaboratori, 28 Giugno 2001

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.

Per chi fa solo una o due parti per recuperare gli esoneri: Se si fa una parte sola occorre consegnare dopo 40 minuti, dopo 80 se se ne fanno due. E' possibile fare anche parti relative ad esoneri che si sono gia' sostenuti con successo, ma bisogna avvertire il docente, o chi per lui, entro 10 minuti dall'inizio dell'appello e facendo cosi' si rinuncia automaticamente al voto gia' acquisito.

Parte I

Esercizio 1 (a) E' possibile realizzare la macchina astratta IJVM per traduzione su quella Mic-1? Motivare la risposta.
(b) Cos'e' una Macchina di Turing? Perche' il modello della Macchina di Turing e' alla base delle architetture di tipo Von Neumann?
Esercizio 2 (a) Dare la definizione di insieme irridondante di implicanti di una funzione.

(b) Presa la funzione f(a,b,c,d) il cui valore e' 1 quando il numero rappresentato in binario da abcd e' primo o divisibile per 3: (ricordare che 1 non e' primo e 0 non e' divisibile per 3)

Parte II

Esercizio 3 Scrivere la sequenza di byte (in esadecimale) da inserire nella method area e che che si ottiene dalla traduzione del seguente codice asssembly IJVM.
 .method (a,b,c)
.var
i
j
.end-var

	ILOAD  a
	ISTORE i
	BIPUSH 3	
 	ILOAD  b	
	ISUB
	IFEQ   label
	ILOAD  j
        IFEQ   label
	IINC   j  1
label:	IRETURN
 .end-method
Esercizio 4 Descrivere in modo sufficientemente dettagliato il funzionamento di un generico bus sincrono, eventualmente mostrando il diagramma della temporizzazione di una transazione di lettura.

Parte III

Esercizio 5 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?
Esercizio 6 Consideriamo il seguente frammento di programma (descritto anche nel Tananbaum) scritto in un linguaggio assembly generico.
        MOV R1,#0       ; accumula l'OR in R1, inizialmente 0
        MOV R2,#0       ; R2=indice, i, del prodotto: A[i] AND B[i]
        MOV R3,#4096    ; R3=indice del primo valore da non usare
LOOP:   MOV R4,A(R2)    ; R4=A[i]
        AND R4,B(R2)    ; R4=A[i] AND B[i]
        OR  R1,R4       ; OR tutti i prodotti booleani in R1
        ADD R2,#4       ; i=i+4 (una parola alla volta =4byte)
        CMP R2,R3       ; finito?
        BLT LOOP        ; se R2 < R3, non abbiamo finito, quindi continua.
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 calcola, 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.
Riscrivere, se possibile, il codice supponendo di avere a disposizione solamente indirizzamento registro, diretto e immediato.
Ricordiamo che #c denota indirizzamento immediato e si deve supporre che c puo' essere un numerale, un simbolo o un'espressione matematica formata da questi. Ricordiamo che l'indirizzamento registro e immediato si denota con c e si deve supporre che c puo' essere solo il nome di un registro, un numerale o un simbolo.
Se riscrivere il codice con i vincoli proposti non fosse possibile, fornire una giustificazione di questo fatto.
Si puo' supporre, volendo, la presenza di altri registri nella macchina oltre a quelli presenti nel codice dato. Ricordate che il primo argomento delle istruzioni e' anche quello dove finisce il risultato.

Esercizio 7 La legge di Amdahl dice che
                   n
   Speedup = -------------
              1 + (n-1)f
Che cosa indica f ?
Come si ottiene l'espressione data? (se non si ricorda bene dirlo anche in modo orientativo)