L'interprete di IJVM è realizzato in Mic-1 (per questo viene chiamato, anche nel testo,
microinterprete). Le
microistruzioni che lo compomgono sono contenute nel Control Store (CS).

Il microinterprete
dovrà, all'inizio di ogni ciclo di fetch-execute, controllare per prima cosa che
le interruzioni siano abilitate(OPC[0]=0).
![OPC[0] abilita/disabilita le interruzioni](Image8.gif)
In caso
positivo, e se è presente almeno un'interruzione, vengono eseguite le seguenti
operazioni (N.B. per semplicita' nella rappresentazione grafica, OPC si suppone
lungo 16 bit):
Vediamo come andrebbe modificato il microcodice della Figura 4.17
del testo per far si che ci si accorga della presenza di richieste di
interruzioni e, nel caso, si eseguano le operazioni descritte in precedenza.
Per semplicita' supponiamo di avere un linguaggio Mic-1 esteso nel quale è
possibile, per esempio, fare dei salti condizionati le cui condizioni sono bit
di OPC o espressioni booleane che li utilizzano (con la notazione OPC[X]
indichiamo il bit X di OPC).
La modifica consiste in pratica nell'aggiungere le
seguenti microistruzioni prima di quella con etichetta Main1:
int1 if opc[0] goto main1;/ controllo
se le interruzioni sono abilitate. Estendiamo il mic-1 con il costrutto if (OPC[x])
per indicare che si deve saltare alla etichetta main1 se il bit presente in
OPC[15] è pari a uno, cioè le interruzioni sono disabilitate.
int2 if (not(opc[15]) and not(opc[14]) ... and not(opc[8])) goto
main1; / controlla se ci sono interruzioni; se tutti i
devices non fanno richiesta di interruzione si deve saltare alla etichetta main1
int3 SP=MAR=SP+1;
int4 MDR=PC; wr; /salva il PC del
programma corrente sullo stack (*).
int5
SP=MAR=SP+1;
int6 MDR=OPC; wr; /salva OPC sullo Stack
int7
MAR=OxFF; rd; /iniziamo la lettura del contenuto della
locazione 255. La locazione 255 contiene l'indirizzo del gestore delle
interruzioni
int8 OPC[0]=1; /disabilito gli interrupt, ci penserà il gestore degli interrupt a
riabilitare;
int9 PC=MDR; fetch; /inizio l'estrazione della prima istruzione del gestore delle
interruzioni;
int10
/attendo il completamento del fetch precedente
main1 PC=PC+1; fetch; goto(MBR); / tutti i goto seguenti
nel codice del microinterprete che prima, nel caso senza interruzioni, andavano
a main1, ora devono andare a int1 /
:
resto del microinterprete
:
(*) Le informazioni da salvare sullo stack per poter ripristinare lo stato
della computazione corrente sono molte di più. Possiamo supporre che tali
informazioni vengano salvate dal gestore delle interruzioni, anche se in realtà il gestore, se e' scritto in IJVM, non ha accesso diretto ai registri di
Mic-1.