Architettura Mic-1

Transcript

Architettura Mic-1
Architettura Mic-1
Registri (32 bit)
SP (Stack Pointer): Indirizzo dell'ultimo elemento della pila
TOS (Top Of Stack): valore che si trova in cima alla pila. Deve essere aggiornato ogni volta che questa
viene modificata (aggiunta o rimozione di un elemento)
MAR (Memory Address Register): indirizzo di memoria su cui vengono eseguite le operazioni di lettura
(rd) e scrittura (wr) su MDR
MDR (Memory Data Register): parola letto dalla memoria o da scrivere in memoria all'indirizzo MAR
PC (Program Counter): indirizzo della successiva istruzione (o parametro)
MBR (Memory Byte Register): registro (di soli 8 bit) contenente la prossima istruzione o parametro.
Viene aggiornato con l'istruzione fetch.
LV: punta alla base della pila delle variabili locali
H: registro di supporto da utilizzare per operazioni con 2 operandi: il primo è sempre H
Operazioni sulla memoria (rd=lettura, wr=scrittura)
Richiedono tre cicli di clock per essere eseguite completamente:
1) L'indirizzo viene posto in MAR e si lancia la richiesta.
Es: MAR=SP; rd
2) La memoria assegna valori validi a MDR (o viceversa)
Si può svolgere qualsiasi operazione non richieda il nuovo valore di MDR.
Il vecchio MDR è ancora disponibile.
3) MDR contiene il nuovo valore ottenuto dalla memoria (o viceversa)
Es: H=MDR+1
Salti condizionati
Il MIR contiene tre bit specifici per gestire i salti condizionati.
JAMZ=1: salto se nell'ALU transita uno zero.
Es: IF(Z) then goto Main1
JAMN=1: salto se nell'ALU transita un numero negativo
Es: IF(N) then goto Main1
JMPC=1: salto all'istruzione ADDR or MBR
Es: goto ISTR4
Se i tre bit sono impostati a 0, verrà eseguita l'istruzione successiva.
IJVM Assembler
Istruzioni senza parametri
ISUB, IADD, NOP, IRETURN, SWAP, DUP
Istruzioni con parametro da 1 byte
BIPUSH, ILOAD, ISTORE
Istruzioni con parametro da 2 byte
LDC_W, IFLT, GOTO, INVOKEVIRTUAL
Il descrittore di ogni metodo (posto all'inizio dello stesso) occupa 4 byte.
Le etichette di salto vengono sostituite con uno sfasamento=(istr finale)-(istr iniziale) espresso in byte.
Tabella dei simboli globali
Simbolo
Offset
Costante
Sfasamento da CPP (il primo è 0)
Nome di funzione
Sfasamento da CPP (nella CP viene salvata la
posizione in byte rispetto all'inizio del programma)
Tabella dei simboli del modulo
Simbolo
Offset
Variabile
Sfasamento da CPP (il primo è 1. 0 è per OBJREF)
Costante
Non risolto
Etichetta
Numero di byte dall'inizio del programma