Architettura degli elaboratori, 22 Settembre 2006

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 quelli positivi che le eventuali bocciature e i ritiri) verranno registrati sul portale CEA alcuni giorni dopo la loro pubblicazione su web. Chi non intenda accettare il voto o intenda fare un orale (se il voto fosse maggiore di 24), dovra' comunicarlo per tempo al docente, anche via e-mail.
  • Gli iscritti alla laurea triennale debbono essersi prenotati sul portale CEA. Nel caso cio' non sia stato fatto, comunicatelo immediatamente al docente o all'assistente in aula.
  • Coloro il cui piano di studi prevede Architettura da 9 crediti, una 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
    (a) Si consideri la seguente frase presa dalle note del corso:
    "La gerarchia di macchine astratte di un sistema di calcolo
    non termina necessariamente con l'implementazione di un linguaggio di programmazione ad alto livello L."
    Commentarla, spiegandone il significato.

    (b) Si supponga che il BUS che collega l'hardware Mic-1 alla RAM che realizza le memorie dati di Mic-1 abbia 32 linee relative all'indirizzamento. Si supponga inoltre che tali linee siano collegate sia a MAR che a PC. Questo implica, ovviamente che su tali linee del BUS non possano essere presenti contemporaneamente sia i segnali provenienti da MAR che quelli provenienti da PC.
    Descrivere un modo di collegare MAR e PC alle linee indirizzo del BUS e l'eventuale circuiteria necessaria al corretto funzionamento di tale collegamento, che dipendera' ovviamente anche dai segnali RD, WR e FETCH.

    Esercizio 2
    (a) Tradurre in Mic-1 binario la seguente istruzione Mic-1 mal:
    LV=MAR=MDR;rd;if (Z) goto A; else goto B
    
    Dove A corrisponde all'indirizzo 011001011.
    (b) Supponete di avere la seguente funzione in un certo linguaggio di programmazione:
    function uhuh (a,b : int)
       localvar n,x : int
            begin
    	   x = 3;
               for n from 1 to a
               do
                  if x == 73
                  then  x = ohoh(x+1, b)
                  else  x = x-b
    	   enddo
    	   return x
    	end
    
    dove "==" indica il predicato di uguaglianza tra interi e "=" e' l'assegnamento.

    Tradurre la funzione uhuh in assembly IJVM. (ohoh e' un altra funzione che si suppone aver gia' tradotto in assembly IJVM)

    Esercizio 3
    (a) Le memorie cache. Discuterne brevemente.

    (b) Si supponga di voler aggiungere l'istruzione IRADIX ad IJVM.
    Tale istruzione prende il valore in cima allo Stack e lo sostituisce con l'approssimazione intera della sua radice quadrata.
    Non si intende implementare completamente tale istruzione in Mic-1, pero' vogliamo che l'istruzione IRADIX abbia quanto detto come effetto. Supponiamo di avere a disposizione un metodo IJVM, radint, che utilizza zero variabili locali ed un argomento, e che calcola appunto l'approssimazione intera della radice quadrata. Supponiamo inoltre che l'indirizzo di memoria del codice di radint sia 00000000000000000000000100000000. Supponiamo inoltre che tale codice NON contienga i 4 byte iniziali con le informazioni relative al numero di argomenti e variabili locali.
    Scrivere il codice Mic-1 che realizza l'istruzione IRADIX (utilizzando l'esistenza del codice di radint) .

    (b) Supponiamo di avere il linguaggio Mic-1 privo delle operazioni di rd, wr e fetch e di avere un traduttore che traduce frammenti di codice Mic-1 in metodi IJVM che restituiscono sempre il valore dell'ultimo registro modificato.
    La traduzione del seguente frammento Mic-1
    	MBR=PC=1
    	H=MBRU<<8
    	H=MBRU OR H
    	OPC=PC+1
    
    sara' quindi un codice del tipo
    .method trad()
    .var
    mar
    mdr
    pc
    mbr
    sp
    lv
    cpp
    tos
    opc
    h
    .end-var
    
    CODICE-IJVM
    
    .end-method.
    
    Sostituire CODICE-IJVM con il risultato della traduzione del frammento Mic-1 di cui sopra.
    N.B. il codice deve risultare dalla traduzione in sequenza delle singole istruzioni Mic-1.