Architettura degli Elaboratori 4 Marzo 2004
Niente appunti o calcolatrici. Risposte nel foglio di bella copia. Massima SINTETICITA', l'eccessiva verbosita' verra' considerata negativamente. Un esercizio di Mic e quello IJVM sono obbligatori


Esercizio 1.
(a) Si descriva (brevemente!) il Modello Computazionale di Turing e si discuta la definizione di Computazione in tale modello attraverso un esempio plausibile.
(b) Dare la definizione di insieme di operatori booleani funzionalmente completo.
Dimostrare che l'insieme di operatori booleani {not, and} e' funzionalmente completo.
Dire perche' non puo' esistere un insieme di operatori funzionalmente completo e contenente cinque operatori booleani. 


Esercizio 2
(a) Nel Data Path dell'architettura del Mic-2, oltre al registro MBR, e' presente anche un registro MBR2, indicato, piu' o meno, nel modo seguente:

                       | |
- - - - ---------- ==> | |
:      ->| MBR2  |     | |
- - - - ---------- ==> | |
            ^  ^       | |
                       | |
 Qual e' lo scopo di avere questo altro MBR?
 Si potrebbe pensare di inserire anche nell'architettura Mic1 un tale registro?
 Con quali modifiche all'architettura della macchina?
 Con quali vantaggi?

 (b) Il seguente codice Mic-1 e' quello che realizza l'istruzione IRETURN.

      MAR=SP=LV;rd
         
      LV=MAR=MDR;rd
      MAR=LV+1
      PC=MDR;rd;fetch
      MAR=SP
      LV=MDR
      MDR=TOS;wr; goto Main1

 Commentare il codice, descrivendo in che modo viene modificato lo Stack e a quale scopo.


 Esercizio 3

 (a) Considerate un metodo Java che prenda in input due parametri formali k e j (numeri interi) e che restituisca (2*j)+4 se k e' uguale a zero e j-1 altrimenti.
 Scrivere il codice assembly IJVM corrispondente a tale metodo ed il segmento di codice che traduca la chiamata di tale metodo con parametri attuali 5 e 7.

 (b) Cos'e' un codice ad espansione? a cosa serve? Fare un breve esempio.
 
 
 Esercizio 4
 (a) Durante il processo di assemblaggio, per esempio di programmi IJVM, viene stabilita la lunghezza in byte di ogni istruzione. Perche?
 In una istruzione come IFEQ label, come viene calcolato il valore corrispondente a label nel codice oggetto?

 (b) Cosa si intende per multiplexed bus?
 A cosa serve la linea WAIT in un bus sincrono?
 Perche' non serve che sia presente anche nei bus asincroni?