90 likes | 210 Views
Confronto architetture ISA. P.Torasso. Macchina a tre indirizzi. Architettura load/store (solo queste due istruzioni accedono a dati in memoria) Architettura con 32 registri di cui 28 di uso generale (R0 – R27) Tutte le istruzioni stanno in una sola parola di 32 bit (semplificazione)
E N D
Confronto architetture ISA P.Torasso Architettura degli elaboratori 25/6/2003
Macchina a tre indirizzi • Architettura load/store (solo queste due istruzioni accedono a dati in memoria) • Architettura con 32 registri di cui 28 di uso generale (R0 – R27) • Tutte le istruzioni stanno in una sola parola di 32 bit (semplificazione) • Le operazioni logiche aritmetiche avvengono tra registri • Operazioni logico aritmetiche possono avere un operando che è un immediato • Le istruzioni di salto condizionato dipendono dal risultato della istruzione precedente (bit impostato su PSW) Architettura degli elaboratori 25/6/2003
Macchina a tre indirizzi • Istruzioni aritmetiche e logiche hanno la forma src1, src2, dest dove scr1, scr2 e dest sono dei registri di uso generale, • Le istruzioni con questo formato siano ADD, SUB, MULT, AND, OR, XOR, NOR • Per le istruzioni di cui sopra esiste anche un formato in cui scr2 è sostituito da un immediato (nelle operazioni aritmetiche interpretato come numero in complemento a due). Il formato è src1, immed, dest dove scr1 e dest sono dei registri di uso generale • In questo formato il codice operativo è ADDi, SUBi, MULTi, ANDi, ORi, XORi, NORi Architettura degli elaboratori 25/6/2003
Macchina a tre indirizzi • Le istruzioni NOT e INV hanno il formato Scr, dest dove scr e dest sono registri di uso generale • Esistono anche istruzioni per lo shift a destra (SHR) e a sinistra (SHL) il cui formato è src,immed, dest dove il contenuto di scr e’ shiftato di un numero di bit dato da immed e il risultato e’ salvato in dest • Scr e dest sono registri di uso generale Architettura degli elaboratori 25/6/2003
Macchina a tre indirizzi • La LOAD ha formato addr, dest dove addr è l’indirizzo di una cella di memoria e dest è un registro generale. La LOAD carica in dest il contenuto della cella di cui si è fornito addr • L’ istruzione LOADi carica in dest l’immediato che è fornito come parametro • LOADx carica in dest quanto e’ contenuto nella cella il cui indirizzo e’ ottenuto sommando a scr (usato come il registro indice) l’offset Esempi • LOAD 1000, R2 • LOADi 1000,R2 • LOADx R1, 1000, R2 Per istruzione STORE esiste formato Src, Addr e formato indicizzato STOREx con Scr, offset, Index Architettura degli elaboratori 25/6/2003
Macchina a tre indirizzi • Istruzione di salto incondizionato è JUMP Addr (l’indirizzo e’ un displacement rispetto al registro PC) • Ci sono varie istruzione di tipo BRANCH nel cui codice operativo è indicata anche la condizione (ze, nz, po, np, ne,nn) • Le istruzioni di tipo BRANCH hanno il formato Branch addr e valgono le stesse considerazioni fatte per Jump Jump • Esiste una istruzione CALL addr e la sua duale RETURN Architettura degli elaboratori 25/6/2003
Supponendo che le variabili k, i e j siano memorizzate nelle celle di indirizzo esadecimale 1000, 1003 e 107 rispettivamente LOAD 1003, R1 SHL R1,2,R1 LOAD 107,R2 SUB R1,R2,R3 SUBi R3,3,R3 BRze 3 AND R2,0,R2 JUMP 2 ADDi R2,5,R2 STORE R2, 107 STORE R3, 1000 Frammento in JAVA k = 4*i –j –3 if (k= =0) j = j+5; else j = 0; Esempio Architettura tre indirizzi Architettura degli elaboratori 25/6/2003
LOAD 1003, R1 SHL R1,2,R1 LOAD 107,R2 SUB R1,R2,R3 SUBi R3,3,R3 STORE R3, 1000 ADD R3, 0, R3 BRze 3 AND R2,0,R2 JUMP 2 ADDi R2,5,R2 STORE R2, 107 Come nel caso precedente si suppone che le variabili k, i e j siano memorizzate nelle celle di indirizzo esadecimale 1000, 1003 e 107 rispettivamente Per essere più vicini ad una traduzione di ogni singola istruzione java si può avere il seguente codice E’ necessaria una istruzione logica artimentica (es ADD R3, 0, R3) per settare i bit della condizione che verranno analizzati da BRze L’istruzione AND R2,0,R2 può essere sostituita da LOADi 0, R2 Esempio Architettura tre indirizzi Architettura degli elaboratori 25/6/2003
Frammento in JAVA k = 4*i –j –3 if (k= =0) j = j+5; else j = 0; Supponendo che le variabili k, i e j siano memorizzate nella local variable area con offset 5, 2 e 6 rispettivamente ILOAD 2 ISTORE 6 DUP GOTO 6 IADD IINC 6 5 DUP …….. IADD ILOAD 6 ISUB BIPUSH 3 ISUB ISTORE 5 ILOAD 5 IFEQ 10 BIPUSH 0 Esempio in IJVM Architettura degli elaboratori 25/6/2003