Esercizi su Mic1,2,.. e sulle loro realizzazioni HW




Qui ci sono alcune soluzioni di alcuni degli esercizi proposti relativi alla programmazione Mic1 e che girano sul simulatore.

Esercizio 1
Supponendo di avere nei registri TOS e SP memorizzati dei numeri rappresentati in complemento a due, scrivere un programma Mic1 che memorizzi nel registro OPC il valore 2(A - B).

  • Soluzione (By Ferraro and Fede).


    Esercizio 2
    Scrivere un segmento di codice Mic1 che moltiplichi il contenuto dei registri TOS ed OPC ed inserisca il risultato in SP, supponendo che il contenuto di OPC sia >= 0.

    Scrivere un segmento di codice moltiplichi il contenuto dei registri TOS ed OPC ed inserisca il risultato in SP, senza fare alcuna assunzione sul valore contenuto in OPC.

  • Possibili soluzioni (By Roberto Ferraro e Elisa Pappalardo).
  • Altra possibile soluzione (By Marco Chillemi and Luca Andrea).
  • Altra ancora possibile soluzione (By Cinzia Tomasello, Francesco Caponnetto and Francesco Calcagno).
  • Possibile soluzione caso >= 0. (By Francesco Pappalardo)
  • Possibile soluzione. (By Maria Petralia)

    Esercizio 3
    Scrivere un segmento di codice che inserisca in OPC il valore m[m[...m[TOS]...]] (m[-] iterato n volte).
    Dove:
    n e' il valore contenuto in LV.
    m[x] indica il valore contenuto nella locazione di memoria di indirizzo x, dove per memoria si intende la parte di memoria organizzata in parole da 32 bit, a cui Mic-1 puo' accedere.
    Con TOS si intende il valore contenuto in tale registro.

  • Possibili Soluzioni (By F. Burgio, Roberto Ferraro and Marco Cristaldi).

    Esercizio 3.5
    Utilizzando la soluzione dell'esercizio 2, scrivere un segmento di codice che inserisca in SP il valore contenuto in TOS elevato al valore contenuto in OPC.

    Esercizio 4
    Sintetizzare un circuito combinatorio che realizzi l'interfaccia tra il registro MBR e il bus B dell'architettura HW del Mic-1, che permetta cioe' di caricare sul bus B il valore di MBR o quello di MBRU.


  • Soluzione (By B.Zingales and E. barbangiovanni).
  • Altra Possibile Soluzione (By Roberto Ferraro).
    Esercizio 5
    Fornire il progetto dettagliato della ALU e dello SHIFTER dell'architettura HW del Mic-1, utilizzando moduli combinatori conosciuti (addizionatore parallelo, multiplexer ecc. ecc.).


    Esercizio 6
    La figura 4-5 del Tanenbaum, nella parte che riguarda l'hardware per il computo dell'indirizzo della microistruzione successiva, non e' molto precisa.
    Cosa non e' indicato, o e' indicato male?

  • Soluzioni (By Roberto Ferraro and Salvatore Spoto).

    Esercizio 7
    Soprattutto dopo l'esercizio 6 ci siamo convinti che la figura 4-5 va bene per capire complessivamente il funzionamento dell'hardware di Mic-1, ma non e' il massimo della chiarezza per capire in dettaglio il la parte di hardware che riguarda il calcolo della prossima microistruzione.
    Noi vogliamo essere piu' precisi, anzi, vogliamo strafare, fornendo una possibile descrizione dettagliata della circuiteria che riguarda il calcolo della prossima miscroistruzione.

  • Soluzione (By Roberto Ferraro).

    Esercizio 8
    L'opcode di NOP e 0x00. Si potrebbe allora pensare di mettere l'istruzione con etichetta Main1 del microinterprete all'indirizzo 0 del control store. In questo modo se l'istruzione NOP e' quella da eseguire, non dovendo fare nulla si puo' saltare direttamente di nuovo a Main1.
    L'idea pare buona, ma non funziona. Perche?

  • Soluzioni (By Roberto Ferraro and Salvatore Spoto).

    Esercizio 9
    Supponete che per strani motivi, a noi sconosciuti, non e' possibile inserire la prima microistruzione del codice che interpreta un'istruzione IJVM all'indirizzo del control store corrispondente all'opcode dell'istruzione IJVM.
    Questo significa che la fase di decodifica dell'istruzione IJVM non e' immediata, ma il microinterprete avra' una serie di istruzioni che effettueranno tale fase di decodifica dell'istruzione.
    Scrivere il segmento di codice Mic-1 che effettua tale decodifica.

  • Possibili Soluzioni (By R. Ferraro e S. Arcidiacono).

    Esercizio 10
    Sappiamo che TOS contiene sempre il valore in cima allo stack. Ogni volta che lo stack viene modificato (per esempio dall'istruzione POP) si deve ovviamente aggiornare TOS. Se pero' osserviamo il segmento di microcodice che implementa l'istruzione INVOKEVIRTUAL sul Tanenbaum (Fig. 4-17), tale aggiornamento non viene fatto.
    E' un errore del (micro)programmatore? C'e' un errore di stampa che ha fatto saltare qualche istruzione?

  • Soluzioni (By Claudio Cherubino and Narzisi-Riela).

    Esercizio 11
    Prendere alcune microistruzioni Mic-1 in formato mal e tradurle A MANO in Mic-1 binario (36 bit).

    Soluzioni (By Ferraro and Fede, and Max Salfi and Narzisi, and E. Pappalardo).

    Esercizio 12
    Poiche' un'istruzione Mic-1 e' composta da tutti i segnali di controllo per le varie componenti dell'hardware, questo significa che qualsiasi sequenza di 36 bit corrisponde ad una istruzione Mic-1 in formato mal.
    E' vero'? Perche'?
    Dare due sequenze di 36 bit che codificano la stessa istruzione, spiegandone il perche'.
    Dire quali sono le microistruzioni in formato mal che corrispondono alle seguenti stringhe di 36 bit:
    011100101000110101110110001010100010
    111111111111111111111000000000000000
    000000000000000000000111111111111111
    101100101001010110101001111011010010
    

    Soluzione (By Ferraro, Fede and E. Pappalardo).

    Esercizio 13
    Fare gli esercizi 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 del Capitolo 4 del Tanenbaum.


    Soluzione 1 (By Ferraro and Fede).
    Soluzione 2 (By Ferraro and Fede).
    Soluzione 3 (By Ferraro and Fede).
    Soluzione 4 (By Ferraro and Fede).
    Soluzione 5 (By Salvatore Spoto).
    Soluzione 9 (By Salvatore Spoto).
    Soluzione 10 (By Ferraro and Fede).
    Soluzione 11 (By Ferraro).
    Soluzione 12 (By Ferraro).
    Soluzione 14 (By Ferraro and Santangelo).
    Soluzione 15 (By Ferraro and Santangelo).
    Soluzione 17 (By Ferraro and Fede).
    Soluzione 18 (By Ferraro and Peppe Morreale).

    Esercizio 14
    Si potrebbe pensare di realizzare SWAP piu' semplicemente che come fatto nella figura 4-17 del Tanenbaum, nel modo seguente:
    swap1      MAR=SP-1; rd
    swap2      MDR=TOS; wr
    swap3      MAR=SP; wr
    swap4      TOS=MDR; goto main1
    
    Puo' funzionare?
    Soluzione .

    Esercizio 15
    Nel codice Mic-2 di figura 4-30 del Tanenbaum, l'istruzione goto3 e' vuota poiche' dopo l'aggiornamento di PC c'e' da attendere che l'IFU faccia richiesta di una parola di memoria.
    Anche nel microcodice Mic-2 per INVOKEVIRTUAL c'e' un punto in cui il PC viene modificato, ma non c'e' alcuna istruzione vuota dopo.
    Un errore? oppure c'e' una spiegazione?


    Esercizio 16
    Fare gli esercizi 12, 18, 22, 23, 24 del Capitolo 4 del Tanenbaum.


    Soluzione 22 (By Francesco Caponnetto).
    Soluzione 23 (By Francesco Caponnetto).
    Soluzione 24 (By Francesco Caponnetto and Privitera Salvatore).


    Esercizio 17
    Prendiamo in esame la figura 4-34 del Tanenbaum. C'e' una componente chiamata IFU.
    E' la stessa IFU della figura 4-29?
    Potrebbe essere sensato che sia un'altra IFU? E se lo e', per quale interprete realizzerabbe la fase di fetch delle istruzioni? IJVM, Mic ?


    Esercizio 18
    Fare l'esercizio 25 del Capitolo 4 del Tanenbaum.

    Soluzione (parziale) (By Narzisi Giuseppe).


    Esercizio 19




    Esercizio 18
    Fare l'esercizio 33 del Capitolo 4 del Tanenbaum.


    Esercizio 19
    (a) Dire qual'e' l'istruzione IJVM realizzata dal seguente codice Mic-1 e ricopiare tale codice inserendo dei commenti.
    ----------------------------------------
    Main1   PC = PC + 1; fetch; goto(MBR)
    -----------------------------------------
                   :
                   :
    -------------------------------------------
            H = LV
            MAR = MBRU + H; rd
            MAR = SP = SP + 1
            PC = PC + 1; fetch; wr
            TOS = MDR; goto Main 1
    ---------------------------------------------
                    :
    
    (b) La seguente figura rappresenta il ciclo di clock di Mic-1 ("D" per motivi tipografici indica la Delta del testo).
    In quale momento tra quelli indicati (A, B, C, D) avviene il caricamento dei registri dal Bus C e dalla memoria?
    Cosa si intende nella frase precedente per "caricamento dalla memoria"?

    Soluzione .

    Esercizio 20

    Nel Data Path dell'architettura del Mic-1 il registro MBR e' indicato piu' o meno, nel seguente modo:
                                      | |
               - - - - - - - ---- ==> | |
               :  MBR     ->|   |     | |
               - - - - - - - ---- ==> | |
                             ^ ^      | |
                             | |
    
    Perche' parte del registro e' disegnata tratteggiata? Perche' sono indicati due collegamenti al Bus B? Perche' ha tre segnali di controllo (le frecce piccole)? A cosa servono?

    Soluzione .


    Esercizio 21
    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?

    Soluzione .

    Esercizio 22
    Nella seguente figura sono riprodotte le prime tre componenti del pipeline del Mic-4.
    Descrivere brevemente il loro funzionamento, ed in particolare descrivere il significato dei campi IJVM-lenght, Micro-op ROM index, final e goto.

    Soluzione .

    Esercizio 23
    (a) Nelle micro-istruzioni Mic-1 in cui e' presente un salto condizionato il campo NEXT_ADDRESS deve avere uno 0 nella posizione piu' significativa. Perche'? Cosa accadrebbe se ci fosse un 1?


    (b) Scrivere un programma Mic-1 che interpreti la seguente istruzione che intendiamo aggiungere all'IJVM:
    ADDLCL varnum1 varnum2 varnum3 la cui semantica e' la seguente
    M[LV + varnum1] <-- M[LV + varnum2] + M[LV + varnum3] (si pone nella variabile locale indicata da varnum1 la somma delle variabili locali indicate da varnum2 e varnum3.
    I campi varnum solo lunghi un byte.
    Volendo, per semplicita', si possono utilizzare, per memorizzare valori temporanei, i registri TOS, CPP e OPC, senza preoccuparsi di ripristinare i loro valori precedenti (per TOS e CPP infatti non farlo in pratica creerebbe problemi).

    Soluzione .

    Esercizio 24
    (a) Scrivere un programma Mic-2 (Due!) che interpreti la seguente istruzione che intendiamo aggiungere all'IJVM:
    ADDLCL varnum1 varnum2 varnum3 la cui semantica e' la seguente



    M[LV + varnum1] <-- M[LV + varnum2] + M[LV + varnum3] (si pone nella variabile locale indicata da varnum1 la somma delle variabili locali indicate da varnum2 e varnum3.
    I campi varnum solo lunghi un byte.
    Volendo, per semplicita', si possono utilizzare, per memorizzare valori temporanei, i registri TOS, CPP e OPC, senza preoccuparsi di ripristinare i loro valori precedenti (per TOS e CPP infatti non farlo in pratica creerebbe problemi).

    (b) 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 111001011. A quale indirizzo corrisponde B?
    Soluzione .

    Esercizio 25
    (a) E' possibile che in un microprogramma Mic-1 mal la microistruzione
    label1: TOS=H+SP; if (N) goto labelA; else goto labelB
    corrisponda in binario alla sequenza di 36 bit, di cui i primi 9 siano i seguenti?
    100110101
    (b) Quale istruzione IJVM e' realizzata dal seguente codice Mic-2?
    MAR=LV+MBR1U;rd
    H=MBR1
    MDR=MDR+H;wr;goto(MBR1)

    Soluzione .

    Esercizio 26
    (a) Scrivere del microcodice Mic-2 (Due!) che interpreti l'istruzione NOEXECZ che vogliamo aggiungere ad IJVM.
    Si suppone che le 10 istruzioni che seguono NOEXECZ in ogni programma siano tutte istruzioni senza argomenti (cioe' formate da un solo byte, il codice operativo. Come IADD, per intenderci) tra cui c'e' almeno un'istruzione che ha il codice operativo che inizia con un 1.
    La semantica di NOEXECZ e' la seguente:
    delle prossime istruzioni salta le istruzioni che precedono la prima il cui codice operativo inizia con un 1 e salta anche quest'ultima.
    In altre parole l'istruzione che dovra' essere eseguita dopo NOEXECZ e' quella successiva alla prima istruzione dopo NOEXECZ che ha il codice operativo che inizia con un 1.

    (b) Consideriamo la prima microistruzione del microinterprete Mic-1 per IJVM:
    Main1  PC=PC+1; fetch; goto(MBR)
    
    e la microistruzione che realizza l'istruzione WIDE:
    wide1  PC=PC+1; fetch; goto(MBR or 0x100)
    
    Se il microinterprete, nell'esecuzione di Main1, trova in MBR il codice operativo di WIDE, saltera' a wide1.
    Ora, il valore di MBR nella microistruzione wide1 dovra' essere quello prelevato dalla memoria attraverso il fetch in Main1.
    Questo fatto non e' in contraddizione con la seguente affermazione del Tanenbaum? (paragrafo 4.1.2 del testo):
    ..una lettura dalla memoria su qualsiasi porta iniziata al termine del ciclo k fornisce dati che non si possono usare nel ciclo k+1, ma solo nel ciclo k+2 o piu' tardi.
    Infatti se consideriamo le microistruzioni che realizzano l'istruzione POP vediamo che c'e' una microistruzione nulla proprio per attendere che la parola letta diventi utilizzabile, come e' scritto anche nel commento al microcodice:
    pop1 MAR=SP=SP-1; rd        Legge la parola vicina alla cima dello Stack  
    pop2                        Aspetta che TOS sia letto dalla memoria
    pop3 TOS=MDR; goto Main1    Copia una nuova parola in TOS
    
    Dunque? c'e' contraddizione?
    Inoltre, cosa fa' l'istruzione WIDE di IJVM?
    Perche' nel goto di wide1 c'e' "or 0x100" ?
    Soluzione .

    Esercizio 27
    Prendendo in considerazione l'esempio di Interruzioni con memory-mapped I/O indicato nel programma (a cui si puo' accedere anche da qui), scrivere il microcodice Mic-1 (senza le estensioni considerate nell'esempio) che realizzi l'istruzione RETI.

    Esercizio 28
    (a) Scrivere il microcodice che interpreta l'istruzione INSB che vogliamo aggiungere ad IJVM.
    Il formato di INSB e' il seguente
    INSB ind val
    dove gli operandi ind e val sono di 1 byte.
    INSB prende la parola di memoria di indirizzo ind la shifta a sinistra di 1 byte e nel byte lasciato libero pone il byte val.
    Il risultato lo pone in cima allo Stack.
    Scrivere il microcodice a cui si salterebbe nel microinterprete dopo aver eseguito la microistruzione Main1.

    (b) 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?

    Soluzione .


    Esercizio 29

    Supponete di voler aggiungere all'insieme di istruzioni IJVM la nuova istruzione
    BI2PU num
    che inserisce num in cima allo stack, dove num e' un numero rappresentato con 2 byte.
    Scrivere un segmento di codice Mic-1 da inserire nel codice del microinterprete e che realizzi tale istruzione.
  • Possibile soluzione.

    Esercizio 30

    Quali sono le conseguenze, in termini di costi e prestazioni, del passaggio dal Mic-1 al Mic-2?

  • Soluzione (by Valentina Campisi)
    Esercizio 31

    Scrivere il microcodice Mic-1 che implementi l'istruzione JVM POPTWO. Questa istruzione elimina due parole dalla cima dello Stack.
    (E' l'esercizio 4.17 del Tanenbaum, presente, con soluzione, nell'esercizio 13 di questa pagina)

    Esercizio 32

    Supponiamo di avere due dispositivi A e B, collegati ad un Bus.
    L'arbitraggio di tale Bus e' centralizzato con una linea di Request ed una di Grant per ogni dispositivo (come l'arbitraggio del PCI Bus, per intenderci).
    Supponiamo che la linea di Request di A sia collegata al bit piu' significativo (piu' a sinistra) del registro SP di Mic-1, mentre la linea di Grant al bit meno significativo (piu' a destra) di SP. Le linee Request e Grant di B sono invece collegate ai bit rispettivamente piu' e meno significativi di LV.
    Realizzare l'Arbitro come programma Mic-1.
    (Fare in modo che il dispositivo A abbia priorita' maggiore di quello B per l'acquisizione del Bus;
    Quando un dispositivo non ha piu' bisogno del Bus resetta a 0 la linea request)

  • Soluzione
    Esercizio 33

    Consideriamo un programma in micro-assembly language Mic-1 e supponiamo che tale programma abbia due istruzioni contenenti, rispettivamente, i due seguenti salti condizionati:
    if (N) goto l2; else goto l1
      if (Z) goto l3; else goto l1
    
    (dove l2 e l3 sono etichette distinte di due microistruzioni distinte)
    Quale caratteristica delle istruzioni Mic-1 in binario fa si che non sia possibile avere un microprogramma con la caratteristica descritta?
  • Soluzione
    Esercizio 34

    upponiate di avere IJVM realizzato per compilazione (traduzione) su Mic2, qual e' il risultato della compilazione del seguente codice?
      BIPUSH 2
      BIPUSH 3
      DUP
    

  • Soluzione
    Esercizio 35

    Nell'istruzione IF_LT del Mic-1 la lettura del secondo Byte che costituisce l'offset dell'istruzione stessa avviene prima o dopo aver effettuato il salto?
    a) Dopo, prima occorre leggere tutto l'offset, mica posso inventare!!
    b) Prima, il primo Byte mi basta ed avanza per saper cosa fare.
    c) La domanda non ha senso perchŔ la lettura del secondo Byte Ŕ giÓ avvenuta prima del comando di salto vero e proprio!
    d) Prima, poiche' in realta' l'offset e' gia' presente in OPC gia' nella fase di decodifica.
    e) La domanda non ha senso perche' non esiste alcuna istruzione IF_LT nel Mic-1!!

    Giustificare brevemente la scelta della risposta.

  • Soluzione
    Esercizio 36

    Fornire la traduzione in IJVM del seguente frammento di codice Mic1.
    SP=MAR=SP+1
    MDR=1; wr
    SP=MAR=SP+1
    MDR=MDR+1; wr
    
    MAR=SP;rd
    MAR=SP-1;rd
    H=MDR
    MDR=MDR+H;wr
    

  • Soluzione
    Esercizio 37
    Dire qual e' l'istruzione Mic-1 in formato mal corrispondente alla seguente stringa di 36 bit.
    101100101001010011001001111011010010
  • Soluzione
    Esercizio 38
    Scrivere un programma Mic-2 (Due!) che interpreti la seguente istruzione che intendiamo aggiungere all'IJVM:
    ADDLCL varnum1 varnum2 num3 la cui semantica e' la seguente
    M[LV + varnum1] <-- M[LV + varnum2] + num3
    (si pone nella variabile locale indicata da varnum1 la somma di num3 con il contenuto della variabile locale indicata da varnum2.
    I campi varnum- solo lunghi un byte.
    Quelli num- sono lunghi due byte. Volendo, per semplicita', si possono utilizzare, per memorizzare valori temporanei, i registri TOS, CPP e OPC, senza preoccuparsi di ripristinare i loro valori precedenti (per TOS e CPP infatti non farlo in pratica creerebbe problemi).
  • Soluzione
    Esercizio 39
    Nella Figura 4-33 del testo c'e' un esempio di come potrebbe essere la sintassi per il linguaggio della macchina Mic-3.
    Un'idea alternativa potrebbe essere invece quella di mantenere per Mic-3 la sintassi del linguaggio Mic-2, utilizzando nell'hardware tre registri MIR: MIR1, MIR2 e MIR3, utilizzandoli come si utilizzano i vari MIR di Mic-4.
    E' una idea ragionevole? Si? No? Discuterne.

    Esercizio 40 (proposto by G. Borgese)
    Consideriamo il microinterprete scritto in Mic1 della figura 4-17 del testo. Se da Main1 saltiamo alla microistruzione di etichetta wide1, si salta poi all'istruzione wide_iload1 o wide_istore1 a seconda che nel byte successivo a quello che contiene l'opcode di WIDE ci sia quello che contiene l'opcode di ILOAD o di ISTORE.
    Il tutto funziona se il valore di MBR nel goto(MBR OR 0x100) di wide1 e' appunto il codice operativo di ILOAD o di ISTORE, codice operativo che e' quello recuperato dall'operazione di fetch presente in Main1. Ma non si era detto che bisognava aspettare due cicli di clock prima che una fetch abbia effetto su MBR? E' un errore del testo? Non e' un errore? Perche'?

    Esercizio 41 (proposto by G. Cafisio)
    Nel testo 4-30 del tesot c'e' il microinterprete per IJVM scritto in Mic-2. La microistruzione con etichetta goto3 e' vuota poiche', prima di utilizzare MBR1, occorre dar tempo all'IFU di "svuotarsi" e procedere ad estrarre una nuova parola in memoria, visto che in goto2 il PC e' stato aggiornato.
    Una situazione del genere si presenta anche nelle microistruzioni con etichetta invokevirtual3 e invochevirtual4, dove il PC viene aggiornato e viene poi utilizzato MBR2U. Pero' non c'e' nessuna microistruzione vuota nel mezzo.
    E' un errore? Non e' un errore? Discutere.

    Esercizio 42 Supponete di volere aggiungere al linguaggio IJVM l'istruzione POPTWO, che ha zero argomenti e che elimina due elementi dalla cima dello Stack. Scrivere il microcodice Mic-1 che realizza tale istruzione e che quindi andrebbe aggiunto al codice della realizzazione microprogrammata di IJVM.
    (E' uno degli esercizi del tanenbaum la cui soluzione e' gia presente in questa pagina)

    Esercizio 43 Prendendo spunto dalla Figura 4-33, tradurre in Mic-3 il seguente codice Mic-2.
    MAR=SP=SP-1;rd
    H=TOS
    MDR=TOS=MDR AND H;wr;goto(MBR1)
    

  • Soluzione
    Esercizio 44 Il seguente codice Mic-1 e' quello che realizza l'istruzione INVOKEVIRTUAL.
    PC=PC+1;fetch
    H=MBRU<<8
    H=MBRU OR H
    MAR=CPP+H;rd
    OPC=PC+1
    PC=MDR;fetch
    PC=PC+1;fetch
    H=MBRU<<8
    H=MBRU OR H
    PC=PC+1;fetch
    TOS=SP-H
    TOS=MAR=TOS+1
    PC=PC+1;fetch
    H=MBRU<<8
    H=MBRU OR H
    MDR=SP+H+1;wr
    MAR=SP=MDR;
    MDR=OPC;wr
    MAR=SP=SP+1
    MDR=LV;wr
    PC=PC+1;fetch
    LV=TOS;goto Main1
    
    
    Indicare in quali istruzioni avviene (o si completa): la lettura del numero delle variabili locali del metodo, il salvataggio sullo Stack del vecchio PC (il PC del chiamante), la scrittura del "link pointer" nella posizione che conteneva OBJREF.


    Esercizio 45
    (a) Descrivere brevemente l'architettura Mic-4. Tale architettura realizza fasi del ciclo di fetch-execute dell'interprete di una sola macchina astratta? Discutere.
    (b) Scrivere il microcodice Mic-2 per implementare in IJVM l'istruzione
    	ISET 32-bit-mask
    	
    L'istruzione ISET utilizza una maschera a 32 bit che segue il codice operativo e applica la maschera all'elemento che si trova in cima allo Stack, forzando a 1 i bit che sono 1 nella mask e lasciando inalterati gli altri.
  • Soluzione
    Esercizio 45bis
    Scrivere il microcodice Mic-1 per implementare in IJVM l'istruzione
    ISET 32-bit-mask
    
    
    L'istruzione ISET utilizza una maschera a 32 bit che segue il codice operativo e applica la maschera all'elemento che si trova in cima allo Stack, forzando ad 1 i bit che sono 1 nella mask e lasciando inalterati gli altri.
  • Soluzione
    Esercizio 46
    Supponete di voler aggiungere all'insieme di istruzioni IJVM la nuova istruzione

     
                   BI2PU num

    che inserisce il valore num in cima allo stack, dove num Ŕ un numero rappresentato con 2 byte.
    Scrivere un segmento di codice Mic-1 che realizzi tale istruzione. Commentare il codice.

  • Possibile soluzione
    Esercizio 47
    Discutere brevemente delle differenze tra l'architettura Mic-2 e quella Mic-3. Descrivere (sempre in modo conciso) anche i vantaggi di Mic-3 rispetto a Mic2.
    Esercizio 48
    Supponete di voler aggiungere all'insieme di istruzioni IJVM la nuova istruzione
    	PLURIDUP num
    	
    che duplica il valore presente in cima allo stack per un numero di volte pari a num (num e' sempre un numero non negativo rappresentato con un byte).
    Per esempio, l'effetto di eseguire PLURIDUP 3 e' lo stesso che eseguire DUP DUP DUP. L'effetto di PLURIDUP 0 e' nullo.
    Scrivere un segmento di codice Mic-1 che realizzi l'istruzione PLURIDUP num.
  • Possibile soluzione
    Esercizio 49
    Descrivere il funzionamento della IFU presente nell'architettura Mic-2.
    Esercizio 50
    Qual e' l'effetto in Mic-1 dell'esecuzione di goto(MBR)?
    In quale modo l'architettura Mic-1 realizza l'esecuzione di un goto(MBR)? A cosa puo' servire in un microprogramma un goto(MBR)?

    Esercizio 51
    Si traduca in Mic-2 il seguente codice Mic-3.
    A=LV     B=SP
    B=TOS    C=A+B
    A=CPP    C=B-1  MAR=C       
    C=A+1    MDR=C;wr
    TOS=C    mem=MDR      
    
  • Soluzione
    Esercizio 52
    Discutere di come realizzare la componente memoria nell'architettura Mic-1.
    Descrivere anche come la memoria viene collegata ai segnali che provengono dall'hardware descritto in Figura 4-6.

    Esercizio 53
    Si scriva del codice Mic-2 (due!) che implementi una nuova istruzione IJVM: IMAX. L'esecuzione di IMAX comporta la rimozione delle due parole in cima allo Stack e l'inserimento sullo Stack di quella delle due che rappresenta il valore intero piu' grande.
  • Soluzione
    Esercizio 54
    I 32 bit del registro MAR dell'architettura Mic-1 (Fig.4.4) sono inviati alla memoria shiftati di due posizioni. Perche'? Avviene lo stesso per i bit di PC? Perche'?
    I bit provenienti da MAR e da PC possono venire collegati agli input relativi all'indirizzo di una unica memoria fisica, oppure occorre avere due memorie fisiche distinte? Motivare la risposta.

    Esercizio 55
    Supponiamo di estendere il linguaggio IJVM con la seguente istruzione
    CMPVAR varnum1 varnum2 offset
    dove gli argomenti varnum1 e varnum2 sono lunghi 1 byte, mentre offset e' lungo 2 byte.
    Scrivere in Mic2 (due!) il codice (da inserire nel programma che realizza l'interprete IJVM) che realizza tale istruzione, la cui semantica e' la seguente:
    confronta i valori delle due variabili identificate da varnum1 e varnum2 e, se sono identici, salta all'istuzione distante offset dal byte contente l'opcode dell'istruzione.
    Commentare il codice
  • Possibile soluzione

    Esercizio 56
    Si supponga di estendere il linguaggio IJVM con l'istruzione
            MNCTA num
    	
    Dove num e' rappresentato con un byte.
    La semantica di MNCTA e' la seguente: se l'istruzione successiva e' BIPUSH poni num sullo Stack altrimenti poni 0 sullo Stack.
  • Possibile soluzione

    Esercizio 57
    Supponiate di estendere l'hardware di Mic-1 in modo da poter inserire dall'esterno un valore (positivo) nel registro CPP. Inoltre supponiate che il registro SP sia collegato direttamente ad un campanello che suona quando il valore di SP e' 1 (e resta muto quando e' 0). Noi vogliamo che, non appena qualcuno dall'esterno inserisce un valore m in CPP, dopo m cicli di clock il campanello si metta a suonare per 2*m cicli di clock. Scrivere un microprogramma Mic-1 che permetta tale funzionamento (all'inizio SP e' 0).
    N.B.: Va bene anche se si aspettano uno o due cicli in piu' o se il campanello suona uno o due cicli in piu' di quanto richiesto.
    Inoltre si puo' scrivere il microprogramma senza tener conto del vincolo di Mic-1 che impone che due microistruzioni con salto condizionato con uguale etichetta sul ramo "else" abbiano anche uguale etichetta sul ramo "then".
    Commentare il codice.
  • Possibile soluzione

    Esercizio 58
    Supponiate di avere un traduttore da IJVM puro a Mic-1, a cui abbiamo dato da tradurre un segmento di codice IJVM, ottenendo il seguente codice Mic-1.
    OPC = 1
    PC = PC+1
    H = LV
    MAR = OPC+H; rd   
    OPC = OPC+1
    TOS = MDR            
    MAR = OPC+H; rd  
    H = TOS         
    MDR = TOS = MDR+H    
    SP =SP+1
    MAR = SP; wr     
    
    Dire quale potrebbe essere il codice IJVM che abbiamo fatto tradurre (fornire cioe' un segmento di codice IJVM puro che faccia la stessa cosa che fa il segmento Mic-1 proposto).
  • Possibile soluzione

    Esercizio 59
    Si supponga che esista in IJVM l'istruzione BURP, la cui realizzazione in Mic-1 (inserita, come la realizzazione di tutte le istruzioni IJVM, nel microinterprete) corrisponda al seguente frammento di codice
    	PC=PC+1; fetch
    	H=MBRU<<8
    	H=MBRU OR H
    	PC=PC+1; fetch
    	MAR=LV+H; rd
    	H=MBR
    	MDR=MDR+H
    	MAR=SP=SP+1; wr
    	PC=PC+1;fetch
    	goto Main1
    
    Cosa fa BURP? Quanti byte e' lunga BURP ed in particolare i suoi argomenti?
    Tradurre BURP nell'IJVM normale (senza BURP).
    Quale sarebbe il codice che realizza BURP nel caso la realizzazione di IJVM fosse fatta in Mic-2?

  • Possibile soluzione

    Esercizio 60 (By Sebastiano Greco)
    Si scriva il codice Mic1 che realizza la seguente nuova istruzione IJVM:
    ORDERTHREE
    Tale istruzione, senza parametri, ordina i tre valori in cima allo Stack in ordine crescente a partire dal basso.
  • Possibile soluzione

    Esercizio 61
    Nell'hardware di Mic-1 e' presente una componente contrassegnata con una 'O':
    	  MPC
      ___________________ 
     | | | | | | | | | |
     -------------------
          ^
          |
        -----
    --> | O |< --
        -----
          ^
          |
      
    Qual e' la sua funzione?


    Esercizio 62
    Si scriva il microcodice Mic-1, da inserire nel microinterprete, che permetta di realizzare una nuova istruzione IJVM:
    IFMPLT offset (l'argomento offset e' lungo due byte).
    Tale istruzione e' un'istruzione di salto condizionato. Il salto viene effettuato se la cima dello Stack (che viene poi eliminata) e' un numero positivo multiplo di 3.
  • Possibile soluzione

    Esercizio 63
    Si scriva un segmento di codice Mic-1 che calcoli il numero di bit ad 1 presenti nel registro TOS, inserendo tale numero in SP.

  • Possibile soluzione

    Esercizio 64
    Si supponga di non avere, in Mic-1, la possibilita' di eseguire "goto(MBR)". Si supponga inoltre che i codici operativi della istruzioni IJVM siano differenti da quelli del testo.
    Nel momento in cui MBR contiene il codice operativo dell'istruzione IJVM, la fase di decodifica dell'interprete IJVM sara' quindi realizzata con un segmento di codice Mic-1 da aggiungere al microinterprete del testo, segmento di cui forniamo qui di seguito una parte:
    d1  H=MBRU<< 8
    d3  H=H<< 8
    d4  H=H<< 8
    d5  OPC=H; if (N) goto ...; else goto d6
    d6  H=OPC=H+OPC; if (N) goto ...; else goto d7
    d7  H=OPC=H+OPC; if (N) goto ...; else goto d8
    d8  H=OPC=H+OPC; if (N) goto d9; else goto ...
    d9  H=OPC=H+OPC; if (Z) goto bipush1; else goto ...
    :   : 
    
    
    dove bipush1 e' l'etichetta della prima microistruzione del codice che realizza l'istruzione BIPUSH.
    Qual e' il codice operativo di BIPUSH?
    Perche'?

  • Possibile soluzione

    Esercizio 65
    Si supponga che in IJVM l'istruzione BIPUSH abbia la possibilita' di lavorare con due differenti modalita' di indirizzamento: l'indirizzamento immediato e quello diretto. Si supponga quindi che il formato di BIPUSH sia di tre byte:
    BIPUSH mode num
    dove mode e num sono di un byte. mode specifica la modalita' (0x00 per la immediata, 0x01 per la diretta), .
    Si scriva il codice Mic-2 (DUE!) che implementa questa versione di BIPUSH.
  • Possibile soluzione

    Esercizio 66
    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.

  • Soluzione

    Esercizio 67
    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) .

  • Possibile soluzione

    Esercizio 68
    Si consideri la seguente versione dell'implementazione Mic-1 dell'istruzione SWAP.
    swap1      MAR=SP-1; rd
    swap2      MDR=TOS; wr
    swap3      MAR=SP; wr
    swap4      TOS=MDR; goto main1
    
    Tale versione, pur se piu' corta di quella proposta dal testo, in realta' non puo' funzionare a causa della presenza della "rd" in swap1 e della "wr" in swap2.
    Perche'?

  • Possibile soluzione

    Esercizio 69
    Si supponga di aggiunto ad IJVM una nuova istruzione BOING e di aver inserito nel Control Store il codice Mic-1 che la realizza. Si supponga che il codice operativo di BOING sia 0x01 e che, per motivi a noi ignoti, sia impossibile inserire il segmento di codice Mic-1 che realizza BOING nel Control Store a partire dall'indirizzo 0x01.
    Scrivere le istruzioni (due o piu') da mettere nel microinterprete al posto dell'istruzione Main1 affinche' tutto possa funzionare comunque correttamente.
    Nello scrivere il codice si supponga che l'etichetta "boing1" corrisponda all'indirizzo del Control Store dove e' stato memorizzato il codice che realizza BOING.
    Commentare il codice. Codice non commentato non verra' neanche preso in considerazione.

  • Possibile soluzione

    Esercizio 70
    Nel caso il livello di descrizione dell'hardware Mic-1 fornito nel testo lo consenta, determinare cosa finisce in MPC nel caso una sequenza di bit presente in MIR contenga i bit JAMN, JAMZ e JMPC tutti ad 1 (ovviamente tale configurazione non corrisponde a nessuna istruzione Mic-1 corretta. Cionondimeno la macchina qualcosa fa' comunque).

    Esercizio 71
    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.

  • Possibile soluzione

    Esercizio 72
    L'Hw Mic-2 possiede la seguente caratteristica. Se all'interno di codice che realizza un'istruzione IJVM di salto (o INVOKEVIRTUAL/IRETURN) viene modificato il PC, tale modifica si riperquote automaticamente anche su IMAR. Questa modifica di IMAR permette di procedere al fetch di altri 4 byte (cioe' una parola) dalla memoria.
    Se il PC viene aggiornato, per esempio, con il valore 37, vuol dire che l'istruzione a cui saltare e' ad indirizzo 37. Pero' noi non possiamo estrarre dalla memoria 4 byte a partire da quello 37, poiche' le parole iniziano sempre con byte di indirizzo multiplo di quattro.
    Come fa l'Hw Mic-2 a fare in modo che, nel nostro esempio, la parola prelevata sia la parola 9? (la parola 9 e' quella che inizia col byte di indirizzo 36). Inoltre, come fa' a far si che, una volta arrivati i 4 byte della parola 9, lo Shift Register elimini il primo byte?
    Fornire una descrizione a grandi linee (ma non troppo grandi....)
  • Possibile soluzione

    Esercizio 73
    Tenendo presente la realizzazione Hw di Mic-1 presentata dal testo, dire se tale Hw potrebbe realizzare, senza modifica alcuna, anche istruzioni Mic-1 contenenti salti condizionali del tipo
    if (N or Z) goto et1; else goto et2
    
    Giustificare la risposta.
  • Possibile soluzione

    Esercizio 74
    Supponiamo di estendere il linguaggio IJVM con la seguente istruzione
    CMPVAR varnum1 varnum2 offset
    dove gli argomenti varnum1 e varnum2 sono lunghi 1 byte, mentre offset e' lungo 2 byte.
    Scrivere in Mic-1 il codice (da inserire nel programma che realizza l'interprete IJVM) che realizza tale istruzione, la cui semantica e' la seguente:
    confronta i valori delle due variabili identificate da varnum1 e varnum2 e, se sono identici, salta all'istuzione distante offset dal byte contente l'opcode dell'istruzione.
    Commentare il codice, codice non commentato non verra' preso in considerazione.

  • Possibile soluzione

    Esercizio 75
    Si supponga di avere in Memoria Dati due vettori A e B, di 1024 parole ciascuno. Tali vettori sono memorizzati a partire dagli indirizzi contenuti, rispettivamente, nei registri OPC e SP. Scrivere il programma Mic-1 che calcoli l'OR bit a bit di tutte le 1024 parole che si ottengono calcolando, per ogni parola del vettore A, l'AND bit a bit con la parola corrispondente in B. Tale risultato deve essere inserito in TOS.

  • Possibile soluzione

    Esercizio 76
    Nel Data Path dell'architettura del Mic-2 il registro MBR e' rappresentato, piu' o meno, nel seguente modo:
    
                                   | |
            - - - - - - - ---- ==> | |
       ====>:  MBR     ->|    |    | |
            - - - - - - - ---- ==> | |
                          ^ ^      | |
                          | |      | |
    
    Scrivere brevemente tutto quello che si conosce di tale registro, il suo funzionamento, i collegamenti, la sua funzione.

    Esercizio 77
    Nel Mic-2, ai registri IMAR e PC sono collegati degli incrementatori (incremento di 1 o 2 per PC e di 1 per Imar).
    Descrivere il funzionamento ed il ruolo di tali incrementatori.

    Esercizio 78
    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.
  • Possibile soluzione

    Esercizio 79
    Scrivere la versione di INVOKEVIRTUAL in Mic-2 (avendo il codice di INVOKEVIRTUAL in Mic-1).

    Esercizio 80
    Supponiamo di voler estendere il linguaggio Mic-1 con istruzioni della forma
    if B goto et1; else goto et2
    
    dove B puo' essere, come al solito, (N) oppure (Z).
    La semantica di tali istruzioni e' quella di un salto condizionato, ma il valore su cui si testa la condizione e' quello dell'espressione utilizzata nell'assegnamento presente nell'istruzione eseguita il ciclo precedente (supponendo che l'istruzione eseguita il ciclo precedente contenga sempre un assegnamento).
    Il normale Hw Mic-1 permette di realizzare anche istruzioni di questo nuovo tipo senza alcuna modifica? In caso affermativo, giustificare. Altrimenti, proporre una modifica dell'Hw a tale scopo.
  • Possibile soluzione

    Esercizio 81
    Si prenda in considerazione il codice Mic-2 di INVOKEVIRTUAL, ed in particolare la microistruzione invokevirtual3.
    In che punto del ciclo di clock l'Hw e' a conoscenza che il valore di PC verra' modificato? In che punto del ciclo di clock e' stabile il valore che verra' assegnato a PC? Che cosa provoca nell'Hw Mic-2 una modifica del contenuto di PC? La temporizzazione degli eventi nell'Hw Mic-2 permette che l'istruzione invokevirtual4 sia eseguita correttamente? Potrebbe risultare utile o indispensabile l'inserimento di un'istruzione vuota tra invokevirtual3 ed invokevirtual4?
  • Soluzione

    Esercizio 82
    Scrivere un programma Mic-1 che interpreti la seguente istruzione che intendiamo aggiungere all'IJVM:
    ADDLCL varnum1 varnum2 la cui semantica e' la seguente
    M[LV + varnum1] <-- M[LV + varnum1] + varnum2 +2 (si pone nella va riabile locale indicata da varnum1 la somma delle variabili locali indicate da varnum1 e varnum2 e si incrementa di 2 il risultato.
    I campi varnum solo lunghi un byte.
    Volendo, per semplicita', si possono utilizzare, per memorizzare valori temporanei, i registri TOS, CPP e OPC, senza preoccuparsi di ripristinare i loro valori precedenti (per TOS e CPP infatti non farlo in pratica creerebbe problemi).
  • Soluzione

    Esercizio 83 E' possibile modificare l'HW Mic-2 eliminando fisicamente il registro MBR1 ed aggiungendo della circuiteria e delle linee in modo da non modificare il linguaggio Mic-2? Giustificare la risposta. In caso affermativo, fornire schematicamente una proposta di realizzazione.


    Esercizio 84 Supponiamo di voler realizzare un arbitro per un'arbitraggio centralizzato utilizzando la macchina microprogrammabile Mic-2 del testo.
    La topologia di connessione dell'arbitro con gli utilizzatori del bus si suppone essere ''a stella'' (tipo il bus PCI).
    Supponiamo che le 4 linee di richiesta di uso del Bus dei 4 master connessi al Bus siano connesse ai bit meno significativi del registro PC e che le linee di grant siano connesse ai bit meno significativi del registro OPC. Scrivere un microprogramma che che realizzi il processo di arbitraggio.
    Quali vantaggi si potrebbero ottenere utilizzando Mic-1 anziche' Mic-2?

  • Soluzione

    Esercizio 85 Scrivere un segmento di codice Mic2 che inserisca in SP il prodotto tra il contenuto di TOS e quello di OPC.
    In seguito modificare ed estendere tale codice in modo che in SP venga inserito il contenuto di TOS elevato al contenuto di OPC.
    Si supponga, per semplicita', che OPC > 0 e TOS > 0.

  • Soluzione

    Esercizio 86 Tradurre in Mic-3 le prime 4 microistruzioni del codice relativo alla prima parte dell'esercizio 85.
  • Soluzione

    Esercizio 87 Implementare in Mic-2 l'istruzione WIDEX. Tale istruzione e' un prefisso per i codici operativi di BIPUSH e IINC (similmente a come WIDE e' un prefisso per ILOAD e ISTORE). Se WIDEX precede BIPUSH const vuol dire che const e' un argomento di 4 byte. Lo stesso per IINC varnum const, dove const sara' di 4 byte (varnum e', come al solito, 1 byte).
    Similmente a come si fa per WIDE, supponiamo che gli indirizzi del Control Store dove verranno memorizzati i microprogrammi che implementano le versioni estese di BIPUSH e IINC siano 0x110 e 0x112, dove 0x10 e 0x12 sono i codici operativi, rispettivamente, di BIPUSH e IINC (In realta' il codice operativo di IINC e' 0x84, ma per far funzionare le cose supponiamo per semplicita' che sia invece 0x12).
  • Soluzione

    Esercizio 88 Si scriva un segmento di codice Mic-2 che calcoli il numero di bit a 0 presenti nel registro TOS e che inserisca tale numero in SP.
  • Possibili Soluzioni(also by F. Lo Brutto)

    Esercizio 89 Si traducano in Mic-1 binario le seguente microistruzioni Mic-1 mal (a sinistra sono indicati gli indirizzi del Control Store dove verranno memorizzate tali microistruzioni).
    0x10 SP=MAR=SP+1
    0x11 PC=PC+1;fetch
    0x12 MDR=TOS=MBR; wr; goto Main1 
    

  • Soluzione

    Esercizio 90 L'hw Mic-1 e' tale da non permettere, in generale, di memorizzare nel Control Store le microistruzioni in binario nello stesso ordine in cui sono scritte nel microcodice mal. Perche'?
    Scrivere due microprogrammi Mic-1 di quattro righe e tali che (la traduzione in binario de) le istruzioni del primo si possano memorizzare nel Control Store nello stesso ordine in cui sono nel programma, mentre per le istruzioni del secondo questo non sia possibile.
    Quali modifiche si dovrebbero apportare all'hw Mic-1 per fare in modo che sia sempre possibile memorizzare nel Control Store le istruzioni nello stesso ordine in cui sono scritte nel microcodice mal?
  • Soluzione

    Esercizio 91 I seguenti segmenti di codice Mic-1 e IJVM erano equivalenti (la loro esecuzione aveva cioe' il medesimo effetto). In uno dei due (e solo in uno dei due) sono stati pero' volutamente inseriti alcuni errori. Individuare tali errori e modificare il codice (fornendo adeguata giustificazione) in modo che i due segmenti di codice tornino ad essere equivalenti. Ricopiare poi i codici, commentandoli.
       MAR=SP; rd                                      DUP
       MAR=PC+1; rd                                    ILOAD 1
       OPC=MDR                                         ISUB
       H=MDR                                           IFLT L
       N=OPC-H; if(Z) goto L1; else goto L2            ILOAD 1
    L2 MAR=OPC; wr                                     SWAP
       MAR=SP+1                                        ISTORE 1
       MDR=H; wr                                    L
    L1
    

  • Soluzione

    Esercizio 92 Supponiamo di voler modificare il comportamento dell'istruzione ISTORE, in modo che il valore da inserire nella variabile possa essere recuperato con tre modalita' di indirizzamento: immediata (immediate), diretta (direct) e stack. Implementare in Mic-1 tale nuova versione di ISTORE, supponendo che in modalita' immediata il valore e' rappresentato con 1 byte ed in quella diretta l'indirizzo e' rappresentato con 1 byte.
  • Soluzione

    Esercizio 93 Cosa si intende per dipendenze di tipo RAW e di tipo WAR?
    Tradurre il seguente codice in Mic-3
    H = TOS
    H = SP = SP - H
    OPC = SP + H
    
    Quale vantaggio in termini di velocita' di esecuzione si ottiene passando dal codice fornito. eseguito sulla macchina Mic-2, a quello ottenuto dalla traduzione ed eseguito sulla macchina Mic-3?
  • Soluzione

    Esercizio 94 La rappresentazione binaria delle istruzioni Mic-2 e' identica a quella per le istruzioni Mic-1? Se si, giustificare. Se no, specificare cosa occorre modificare rispetto alla rappresentazione binaria di Mic-1.
  • Soluzione

    Esercizio 95 Si supponga di aggiungere a IJVM (realizzato per interpretazione su Mic-1) una nuova istruzione BOING e di aver inserito nel Control Store il codice Mic-1 che la realizza. Si supponga che il codice operativo di BOING sia 0x01 e che, per motivi a noi ignoti, sia impossibile inserire il segmento di codice Mic-1 che realizza BOING nel Control Store a partire dall'indirizzo 0x01.
    Scrivere le istruzioni (due o piu') da mettere nel microinterprete al posto dell'istruzione Main1 affinche' tutto possa funzionare comunque correttamente. Nello scrivere il codice si supponga che l'etichetta "boing1" corrisponda all'indirizzo del Control Store dove e' stato memorizzato il codice che realizza BOING.

    Se si utilizzasse Mic-2 al posto di Mic-1 per risolvere lo stesso problema, si potrebbe pensare di concludere ogni microprogramma delle varie istruzioni IJVM con un'istruzione "goto Main1" (eliminando quindi il "goto(MBR) )" e poi di aggiungere al microinterprete Mic-2 la microistruzione
    Main1 Z=MBR1-1; if(Z) goto boing1; else goto(MBR1)
    
    
    Questa soluzione pero' non funzionerebbe. Perche'?
    Descrivere brevemente perche', se si usa Mic-2, la soluzione di questo problema richiederebbe una pesante modifica del microinterprete.
  • Soluzione