La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 0x15 Control store 23212320 0x15 0x02 0x15 ILOAD varnum ILOAD.

Presentazioni simili


Presentazione sul tema: "H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 0x15 Control store 23212320 0x15 0x02 0x15 ILOAD varnum ILOAD."— Transcript della presentazione:

1

2 H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 0x15 Control store 23212320 0x15 0x02 0x15 ILOAD varnum ILOAD Area dei metodi Stack 1000 1005 37 / 25 / Esempio

3 MAR MDR PC MBR CPP LV SP H OPC TOS / 2321 15 1005 1000 / 37 / 2321 02 1005 1000 / 37 / 1000 1002 / 2321 02 1005 1000 / 37 / 1000 1006 25 2321 02 1006 1000 / 37 / 1000 1006 25 2322 02 1006 1000 / 37 / 1000 1006 25 2322 15 1006 1000 / 25 / 1000 1 2 3 4 5

4 Programma Java: … … A = B + C …... Compilatore Programma IJVM:… … ILOAD2 ILOAD5 IADD ISTORE4...

5 23212320 0x15 0x02 0x15 0x05 0x60 0x36 0x04 ILOAD varnum ILOAD varnum IADD ISTORE varnum Area dei metodi Stack 1000 1005 37 / 25 / 2326

6 H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 MAR = SP = SP - 1; rd H = TOS MDR = TOS = MDR - H; wr; goto Main1 H = LV MAR = MBRU + H MDR = TOS; wr SP = MAR = SP -1; rd PC = PC + 1; fetch TOS = MDR; goto Main1 ILOAD ISTORE IADD

7 MAR MDR PC MBR CPP LV SP H OPC TOS / 2321 0x15 1005 1000 / 37 / 1006 25 2323 0x15 1006 1000 / 25 / 1000 1007 37 2324 0x60 1007 1000 / 37 / 1000 1007 37 2325 0x60 1007 1000 / 37 / 1000 1006 25 2322 0x15 1006 1000 / 25 / 1000 5cicli 1ciclo 5cicli 1ciclo 3cicli 1ciclo 6cicli 1006 62 2325 0x36 1006 1000 / 62 / 37 1006 62 2326 0x36 1006 1000 / 62 / 37 1005 37 2327 0x04 1005 1000 / 37 / 1000 1ciclo Main1

8 BIPUSH byte DUP IADD IAND IINC varnum const ILOAD varnum IOR ISTORE varnum ISUB NOP POP SWAP LDCW index GOTO offset IFEQ offset IFTL offset IF_ICMPEQ offset WIDE INVOKEVIRTUAL disp IRETURN

9 0xA7GOTO offset PCA7 xx yy offset Area dei metodi opcode Main1 PC = PC + 1; fetch; goto 0xA7 PC A7 xx yy opcode

10 goto1 OPC = PC - 1 goto2 PC = PC + 1; fetch goto3 H = MBRU << 8 goto4 H = MBRU OR H PC A7 xx yy opcode 0xA7 PC A7 xx yy opcode OPC H = xxyy

11 goto5 PC = OPC + H; fetch goto6 goto Main1 PC A7 xx yy opcode OPC PC A7 xx yy opcode OPC opcode

12 0x9FIF_ICMPEQ offset PC9F xx yy offset Area dei metodi opcode PC = PC + 1; fetch; goto (MBR) PC 9F xx yy opcode

13 ificmpeq1 MAR = SP = SP - 1; rd ificmpeq2 MAR = SP = SP - 1 ificmpeq3 H = MDR; rd (MBR) PC 9F xx yy opcode stack LV SP operando1 operando2 TOS contiene operando1, H contiene operando2, i due operandi sono stati eliminati dallo stack ed è iniziata la lettura dell’elemento che affiora sullo stack

14 ificmpeq4 OPC = TOS ificmpeq5 TOS = MDR ificmpeq6 Z = OPC - H; if Z goto T else goto F Viene aggiornato TOS, in Z si ha zero se operando1 (ora in OPC) è uguale a operando2. FPC = PC + 1 F2PC = PC + 1; fetch F3goto Main1 Se i due operandi sono diversi: PC 9F xx yy opcode

15 TOPC = PC - 1; fetch; goto goto2 Se i due operandi sono uguali: goto2 PC = PC + 1; fetch goto3 H = MBRU << 8 goto4 H = MBRU OR H goto5 PC = OPC + H; fetch goto6 goto Main1 Si calcola il valore del nuovo PC sommando l’offset all’indirizzo in cui si trova il codice dell’istruzione

16 Ci deve essere una relazione tra gli indirizzi di T e di F nel “control store”? Ricordiamo che il salto è controllato dalla linea di controllo Z: se JAMZ and Z è 1, il micro program counter MPC avrà il bit 8 a 1. La microistruzione “ificmpeq6” avra’ JAMZ abilitato per poter utilizzare nel calcolo dell’indirizzo della microistruzione seguente il valore di Z.

17 Ificmpeq6 Z = OPC - H; if Z goto T else goto F addrjam aluC memB 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 high bit: (JAMZ AND Z) OR (JAMN AND N) OR (NEXTADDRESS[8]) Se Z = 1 MPC contiene 101011010 0x15A (346 in base 10) Se Z = 0 MPC contiene 001011010 0x5A (90 in base 10) Nel “control store” la prima microistruzione da eseguire nel caso Z = 1 (T) dovrà trovarsi in un indirizzo che inizia con 1, e la prima microistruzione da eseguire nel caso Z = 0 (F) nell’indirizzo inferiore al precedente di 256.

18 WIDE: l’istruzione seguente ha un indice di 16 bit 0xC4 PC = PC + 1; fetch; goto (MBR OR 0x100) addrjam aluC memB 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 Supponiamo che l’istruzione seguente WIDE sia ILOAD (0x15). 0x15 sarà allora il contenuto di MBR nel momento in cui il circuito O esegue l’OR bit a bit tra MBR e NEXTADDRESS, in quanto JMPC = 1. L’ indirizzo della prossima microistruzione è il risultato dell’OR: 000010101 OR 100000000 = 100010101 0x15 OR 0x100 = 0x115

19 WIDE ILOAD varnum 0x115PC = PC + 1;fetch H = MBRU << 8 H = MBRU OR H MAR = LV + H; rd; goto iload3 iload3MAR = SP = SP + 1 (0x17?)PC = PC + 1; fetch; wr TOS = MDR; goto Main1 0xC4 0x15 0x01 0x03 I microprogrammi per eseguire una ILOAD o una WIDE ILOAD si trovano nel “control store” ad indirizzi distanti 256

20 23212320 0x15 0x02 0x15 0x05 0x60 0x36 0x04 ILOAD varnum ILOAD varnum IADD ISTORE varnum Area dei metodi 2326 0xB6 0x00 0x1E INVOKEVIRTUAL disp... 45774576...0x00 0x02 0x00 0x04 0x84 1^istruzioneNum. parametri Spazio var. loc. 2331 2332 2334 56215620...0xAC... 4580 Esempio

21 Stack 1000 1005 37 62 / 25 / OBJREF 621007 (CPP) = 500 Constant pool 530 4576 (LV) = 1000 (SP) = 1007 500 situazione all’atto della chiamata

22 Stack 1000 1005 37 62 / 25 / 1012 621007 MAR MDR PC MBR CPP LV SP H OPC TOS 1013 1006 500 1000 2334 1013 1012 4580 dopo la INVOKEVIRTUAL

23 Stack 1000 1005 37 62 / 25 / 3844 1006 MAR MDR PC MBR CPP LV SP H OPC TOS 1006 1000 500 3844 2334 situazione dopo IRETURN, supponendo che il metodo chiamato restituisca al chiamante il quadrato del valore del parametro alla chiamata

24 0xB6INVOKEVIRTUAL displacement PCB6 xx yy Indirizzo di ritorno Disp. Da CPP Area dei metodi Constant pool CPP CPP + xxyy zz tt uu vv opcode zztt: numero dei parametri uuvv: spazio per le variabili locali

25 Invokevirtual1 PC = PC + 1; fetch Invokevirtual2 H = MBRU <<8 Invokevirtual3 H = MBRU OR H Invokevirtual4 MAR = CPP + H; rd Invokevirtual5 OPC = PC + 1 Invokevirtual6 PC = MDR; fetch Invokevirtual7 PC = PC + 1; fetch Invokevirtual8 H = MBRU <<8 Invokevirtual9 H = MBRU OR H Main1 PC = PC + 1; fetch; goto (MBR) (MBR) H = xxyy Si legge l’indirizzo di zz H = zztt In OPC si ha l’indirizzo di ritorno

26 stack Invokevirtual10 PC = PC + 1; fetch Invokevirtual11 TOS = SP - H Invokevirtual12 TOS = MAR = TOS + 1 LV OBJREF Par. 1 Par. n... zztt = n+1 SP TOS, MAR

27 stack Invokevirtual13 PC = PC + 1; fetch Invokevirtual14 H = MBRU <<8 Invokevirtual15 H = MBRU OR H LV OBJREF Par. 1 Par. n... H = uuvv = numero di variabili locali SP TOS, MAR

28 Invokevirtual16 MDR = SP + H + 1; wr Invokevirtual17 MAR = SP = MDR LV Par. 1 Par. n... TOS Variabili locali LV Par. 1 Par. n... SP TOS, MAR SP + H + 1 Variabili locali MAR, SP

29 Invokevirtual18 MDR = OPC; wr Invokevirtual19 MAR = SP = SP + 1 Invokevirtual20 OPC = MDR = LV; wr Invokevirtual21 PC = PC + 1; fetch Invokevirtual22 LV = TOS Invokevirtual23 TOS = OPC; goto Main1 Par. 1 Par. n... LV SP Variabili locali Salva il vecchio PC Salva il vecchio LV LV Par. 1 Par. n... TOS SP, MAR Variabili locali PC precedente LV precedente

30 ireturn1 MAR = SP = LV; rd legge l’indirizzo in cui è ireturn2 memorizzato il PC da ripristinare ireturn3 LV = MAR = MDR; rd legge il PC precedente Par. 1 Par. n... LV SP Variabili locali PC precedente LV precedente valore MAR 0xACIRETURN 1 1 3 3

31 ireturn4 MAR = LV + 1 ireturn5 PC = MDR; rd; fetch Par. 1 Par. n... SP Variabili locali PC precedente LV precedente valore MAR PC assume il valore di ritorno si legge il precedente LV e si inizia il fetch della prima istruzione del metodo chiamante al rientro LV

32 ireturn6 MAR = SP ireturn7 LV = MDR ireturn8 MDR = TOS; wr; goto Main1 Par. 1 Par. n... SP Variabili locali PC precedente LV precedente valore MAR LV LV assume il valore di ritorno SPvalore LV si scrive “valore” sullo stack in quanto (TOS) = valore 1007 1000


Scaricare ppt "H = LV MAR = MBRU + H; rd MAR = SP = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main1 0x15 Control store 23212320 0x15 0x02 0x15 ILOAD varnum ILOAD."

Presentazioni simili


Annunci Google