Architettura degli elaboratori, 14 Giugno 2008

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.
  • 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
    Si consideri la struttura a livelli di un calcolatore. Si motivi l'introduzione di tale struttura. Si spieghi cos'e' il semantic gap.

    Esercizio 2
    I Chip di memoria non volatile (Nonvolatile Memory Chips). Discuterne.

    Esercizio 3
    Si consideri la realizzazione dell'ALU di Mic-1 tramite il collegamento di 32 alu da 1-bit come da Fig.3-19 del testo. Qual e' l'output della ALU se i sei bit di controllo
    F0, F1, ENA, ENB, INVA, INC
    sono settati con 010111? Giustificare la risposta.

    Esercizio 4
    Si vuole estendere il linguaggio IJVM con una nuova istruzione XISTR. Vogliamo che eseguire l'istruzione XISTR risulti equivalente ad eseguire il seguente segmento di codice IJVM puro:
    ILOAD 1
    ILOAD 2
    BIPUSH 3
    IADD 
    IADD
    
    Scrivere il codice Mic-1 che realizza l'istruzione XISTR. Fornire la versione Mic-2 del codice prodotto.

    Esercizio 5
    Scrivere un metodo assembly IJVM che calcoli la seguente funzione f sui numeri naturali:

    f(x) = if x ≤ 3 then 2 else (f(x-1) + f(x-3))


    Esercizio 6
    Consideriamo il seguente frammento di programma (descritto anche nel Tananbaum) scritto in un linguaggio assembly generico.
            MOV R1,#0       
            MOV R2,#0       
            MOV R3,4096    
    LOOP:   MOV R4,(R2)    
            AND R4,(R2)    
            OR  R1,A(R4)       
    	ADD R2,4(B)       
            CMP R2,R3       
            BLT LOOP       
    
    
    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 dovrebbe calcolare, 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.
    Il programma in realta' contiene degli errori relativamente alle modalita' di indirizzamento utilizzate. Identificare tali errori e correggerli.
    Ricordiamo che #c denota indirizzamento immediato, dove c puo' essere un numerale, un simbolo o un'espressione matematica formata da questi. L'indirizzamento registro e diretto si denota con c, dove c puo' essere solo il nome di un registro, un numerale o un simbolo.
    L'indirizzamento registro indiretto si denota con (R), mentre l'indirizzamento indicizzato (indexed addressing) si denota con L(R).
    Ricordate che il primo argomento delle istruzioni e' anche quello dove finisce il risultato.