Il MIC-2 è un'architettura di processore inventata da Andrew S. Tanenbaum da utilizzare come esempio semplice ma completo per il suo libro Architettura dei calcolatori.
Il linguaggio microcodice MAL (Micro-Assembly Language) è realizzato per consentire la scrittura di un interprete IJVM (Integer Java Virtual Machine) con semplicità. Esempi di codice sorgente per questo interprete si trovano nel libro su menzionato.
È presente l'IFU (Instruction Fetch Unit), un'unità che si occupa di richiedere i byte del codice IJVM alla memoria centrale.
IFU
[modifica | modifica wikitesto]L'IFU è un componente hardware che affianca l'ALU nei suoi compiti di calcolo. In particolare ha il compito di:
- Eliminare il main loop dalla fine di ogni istruzione IJVM. Al suo posto è inserito un salto alla prossima istruzione da eseguire memorizzata nel registro MBR1 e puntata da PC (Program Counter).
- Sollevare l'ALU dal compito di incrementare PC e di eseguire la procedura di fetch.
- Assemblare l'opcode in 16 bit. Successivamente lo passa direttamente all'ALU come valore a 32 bit (l'ALU lavora a 32 bit).
A differenza del MIC-1 il registro MBR viene sostituito da due registri MBR1 (di dimensione 8 bit) e MBR2 (di dimensione 16 bit) con rispettiva versione unsigned. Appena viene letto un valore da uno dei due registri si procede a memorizzare al loro interno i byte successivi da leggere prelevati dalla IFU.[1]
La IFU è dotata di un registro IMAR per indirizzare la successiva parola da prelevare, questo registro possiede un proprio incrementatore in modo da alleggerire il carico alla ALU.
Hardware
[modifica | modifica wikitesto]BUS
[modifica | modifica wikitesto]Sono presenti tre Bus da 32 linee ciascuno (uno in più rispetto al MIC-1, che non possiede un A bus):
- Bus A e B: collegato all'output dei registri e all'input della unità aritmetica e logica
- Bus C: collegato all'output dello shifter e all'input dei registri
Software
[modifica | modifica wikitesto]Microistruzioni
[modifica | modifica wikitesto]La dimensione delle microistruzioni è differente da quella di MIC-1 in quanto viene rimosso il bit di fetch dal campo MEM e vengono aggiunti 4 bit per la codifica del bus A.
Differenze con MIC-1
[modifica | modifica wikitesto]Nella tabella sottostante è rappresentata la sequenza di microistruzioni che implementano la macroistruzione IJVM istore in MIC-1:
Etichetta | Opeazione |
---|---|
istore1 | H = LV |
istore2 | MAR = MBRU + H |
istore3 | MDR = TOS, wr |
istore4 | SP = MAR = SP - 1; rd |
istore5 | PC = PC + 1; fetch |
istore6 | TOS = MDR; goto Main1 |
Nella tabella seguente invece è rappresentata la sequenza di microistruzioni per l'implementazione della macroistruzione IJVM istore in MIC-2:
Etichetta | Opeazione |
---|---|
istore1 | MAR = LV + MBR1U |
istore2 | MDR = TOS; wr |
istore3 | MAR = SP = SP - 1; rd |
istore4 | nop |
istore5 | TOS = MDR; goto(MBR1) |
Si noti che nell'istruzione per MIC-2 è possibile sommare direttamente i due registri LV e MBR1U senza usare il registro H come appoggio, questo grazie al fatto che il bus A è collegato a tutti i registri e non solo ad H come in MIC-1. Inoltre l'istruzione istore5 della codifica MIC-1 viene eliminata in quella per MIC-2 in quanto l'incremento di PC viene fatto automaticamente dalla IFU risparmiando un ciclo di clock.
Note
[modifica | modifica wikitesto]- ^ Architettura dei calcolatori - Un approccio strutturale.