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