Architettura degli elaboratori, 18 Giugno 2007

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.


  • Esercizio 1
    Ci puo' essere qualche vantaggio nel programmare direttamente in linguaggio assembly? In quale caso? Perche'?

    Esercizio 2
    Supponiate di avere un Bus con 4 linee per gli indirizzi e che tali linee siano collegate al segnale CS di una piccola ROM, come indicato nella figura.
                     __________ CS	
                    |
                   AND	 
                _________
                |      |                                           
                OR     |          
              ______   |                       	   
               |  |    |                    
               |  |    |                       
        A3 ----x--|----|-------
        A2 -------|----|-------
        A1 -------x----|-------
        A0 ------------x-------
     
    Ovviamente una CPU collegata a tale bus potra' leggere in uno spazio di indirizzamento di 24 parole (con indirizzi da 0 a 24-1). Di queste, quali sono quelle che fisicamente appartengono alla ROM sopra citata?
    Giustificare la risposta.

    Esercizio 3
    Perche' l'istruzione IJVM puro GOTO 2, non puo' mai appartenere a codice prodotto da un corretto processo di traduzione di codice assembly IJVM?

    Esercizio 4
    Supponiamo di voler introdurre in IJVM un certo livello di Ortogonalita' tra opcodes (codici operativi) e modalita' di indirizzamento.
    Per esempio, vogliamo che IADD possa lavorare con due differenti modalita' di indirizzamento: stack e immediato.
    I due byte successivi ad IADD indicheranno le modalita' di indirizzamento degli operandi, a cui seguiranno 0, 1, o 2 byte nel caso ci siano 0, 1 o due operandi con modalita' immediata. Il byte 0x00 indichera' indirizzamento a stack, il byte 0x01 quello immediato. Il risultato sara' sempre inserito in cima allo stack. Gli operandi a stack verranno eliminati dallo stack.
    Scrivere il microcodice Mic-2 (Due!) che implementa questa nuova versione di IADD.

    Esercizio 5
    In Mic-2 abbiamo i registri MBR1 ed MBR2 (nelle due versioni, con segno e senza segno) con le funzionalita' che conosciamo.
    Sarebbe possibile fare in modo di avere solamente MBR2? Giustificare.
    Aiutino: 4 freccette bianche sotto...

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