h = lv mar = mbru + h; rd mar = sp = sp + 1 pc = pc + 1; fetch; wr tos = mdr; goto main1 0x15...

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

Upload: amadore-chiesa

Post on 02-May-2015

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

H = LVMAR = MBRU + H; rdMAR = SP = SP + 1PC = PC + 1; fetch; wrTOS = MDR; goto Main1

0x15

Control store

23212320

0x15 0x02 0x15 ILOAD varnum ILOAD

Area dei metodi

Stack

1000

1005 37 / /25 / /

Esempio

Page 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

MAR

MDR

PC

MBR

CPP

LV

SP

H

OPC

TOS

/ /2321 1510051000 /

37 / /

/ /2321 0210051000 /

37 /1000

1002 /2321 0210051000 /

37 /1000

1006 252321 0210061000 /

37 /1000

1006 252322 0210061000 /

37 /1000

1006 252322 1510061000 /

25 /1000

1 2 3 4 5

Page 3: 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

Programma Java: … …

A = B + C …

...

Compilatore

Programma IJVM: ……ILOAD2ILOAD5IADDISTORE4...

Page 4: 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

23212320 0x15 0x02 0x15 0x05 0x60 0x36 0x04 ILOAD varnum ILOAD varnum IADD ISTORE varnum

Area dei metodi

Stack

1000

1005 37 / /25 / /

2326

Page 5: 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

H = LVMAR = MBRU + H; rdMAR = SP = SP + 1PC = PC + 1; fetch; wrTOS = MDR; goto Main1

MAR = SP = SP - 1; rdH = TOSMDR = TOS = MDR - H; wr; goto Main1

H = LVMAR = MBRU + HMDR = TOS; wrSP = MAR = SP -1; rdPC = PC + 1; fetchTOS = MDR; goto Main1

ILOAD

ISTORE

IADD

Page 6: 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

MAR

MDR

PC

MBR

CPP

LV

SP

H

OPC

TOS

/ /23210x1510051000 /

37 / /

1006 2523230x1510061000 /

25 /1000

1007 3723240x6010071000 /

37 /1000

1007 3723250x6010071000 /

37 /1000

1006 2523220x1510061000 /

25 /1000

5cicli 1ciclo 5cicli 1ciclo 3cicli 1ciclo 6cicli

1006 6223250x3610061000 /

62 / 37

1006 6223260x3610061000 /

62 / 37

1005 3723270x0410051000 /

37 /1000

1cicloMain1

Page 7: 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

BIPUSH byteDUPIADDIANDIINC varnum constILOAD varnumIORISTORE varnumISUBNOPPOPSWAPLDCW index

GOTO offsetIFEQ offsetIFTL offsetIF_ICMPEQ offsetWIDE

INVOKEVIRTUAL dispIRETURN

Page 8: 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

0xA7 GOTO offset

PCA7xxyy offset

Area dei metodi

opcode

opcode

Main1 PC = PC + 1; fetch; goto 0xA7

PCA7xxyy

opcode

opcode

Page 9: 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

goto1 OPC = PC - 1goto2 PC = PC + 1; fetchgoto3 H = MBRU << 8goto4 H = MBRU OR H

PC

A7xxyy

opcode

opcode

0xA7

PCA7xxyy

opcode

opcode

OPC

H = xxyy

Page 10: 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

goto5 PC = OPC + H; fetchgoto6 goto Main1

PC

A7xxyy

opcode

opcode

OPC

PC

A7xxyy

opcode

opcode

OPC

opcode

opcode

Page 11: 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

0x9F IF_ICMPEQ offset

PC9Fxxyy offset

Area dei metodi

opcode

opcode

PC = PC + 1; fetch; goto (MBR)

PC9Fxxyy

opcode

opcode

Page 12: 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

ificmpeq1 MAR = SP = SP - 1; rdificmpeq2 MAR = SP = SP - 1 ificmpeq3 H = MDR; rd

(MBR)

PC9Fxxyy

opcode

opcode

stack

LV

SP

operando1

operando2

TOS contiene operando1, H contiene operando2,i due operandi sono stati eliminati dallo stack ed è iniziata lalettura dell’elemento che affiora sullo stack

Page 13: 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

ificmpeq4 OPC = TOSificmpeq5 TOS = MDRificmpeq6 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.

F PC = PC + 1F2 PC = PC + 1; fetchF3 goto Main1

Se i due operandi sono diversi:

PC

9Fxxyy

opcode

opcode

Page 14: 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

T OPC = PC - 1; fetch; goto goto2

Se i due operandi sono uguali:

goto2 PC = PC + 1; fetchgoto3 H = MBRU << 8goto4 H = MBRU OR Hgoto5 PC = OPC + H; fetchgoto6 goto Main1

Si calcola il valore del nuovo PC sommando l’offset all’indirizzo in cui si trova il codice dell’istruzione

Page 15: 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

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 counterMPC 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.

Page 16: 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

Ificmpeq6 Z = OPC - H; if Z goto T else goto F

addr jam

alu C mem B0 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.

Page 17: 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

WIDE : l’istruzione seguente ha un indice di 16 bit

0xC4 PC = PC + 1; fetch; goto (MBR OR 0x100)

addr jam

alu C mem B1 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

Page 18: 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

WIDE ILOAD varnum

0x115 PC = PC + 1;fetchH = MBRU << 8H = MBRU OR HMAR = LV + H; rd; goto iload3

iload3 MAR = 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 ILOADsi trovano nel “control store” ad indirizzi distanti 256

Page 19: 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

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

Page 20: 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

Stack

1000

1005 3762 /25 / /

OBJREF621007

(CPP) = 500

Constant pool

530 4576

(LV) = 1000 (SP) = 1007

500

situazione all’atto della chiamata

Page 21: 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

Stack

1000

1005 3762 /25 / /

1012621007

MAR

MDR

PC

MBR

CPP

LV

SP

H

OPC

TOS

10131006 5001000

10002334

10131012

4580

dopo la INVOKEVIRTUAL

Page 22: 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

Stack

1000

1005 3762 /25 / /

38441006

MAR

MDR

PC

MBR

CPP

LV

SP

H

OPC

TOS

10061000 5003844

2334

situazione dopo IRETURN, supponendo che il metodo chiamato restituisca al chiamante il quadrato del valore del parametro alla chiamata

Page 23: 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

0xB6 INVOKEVIRTUAL displacement

PCB6xxyy

Indirizzo di ritorno

Disp. Da CPP

Area dei metodi

Constant pool

CPP

CPP + xxyyzzttuuvv

opcodeopcode

zztt: numero dei parametri

uuvv: spazio per le variabili locali

Page 24: 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

Invokevirtual1 PC = PC + 1; fetchInvokevirtual2 H = MBRU <<8Invokevirtual3 H = MBRU OR HInvokevirtual4 MAR = CPP + H; rdInvokevirtual5 OPC = PC + 1Invokevirtual6 PC = MDR; fetchInvokevirtual7 PC = PC + 1; fetchInvokevirtual8 H = MBRU <<8Invokevirtual9 H = MBRU OR H

Main1 PC = PC + 1; fetch; goto (MBR)

(MBR)

H = xxyySi legge l’indirizzo di zz

H = zztt

In OPC si ha l’indirizzo di ritorno

Page 25: 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

stack

Invokevirtual10 PC = PC + 1; fetchInvokevirtual11 TOS = SP - HInvokevirtual12 TOS = MAR = TOS + 1

LV

OBJREF

Par. 1

Par. n. . .

zztt = n+1

SP

TOS, MAR

Page 26: 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

stack

Invokevirtual13 PC = PC + 1; fetchInvokevirtual14 H = MBRU <<8Invokevirtual15 H = MBRU OR H

LV

OBJREF

Par. 1

Par. n. . .

H = uuvv = numero di variabili locali

SP

TOS, MAR

Page 27: 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

Invokevirtual16 MDR = SP + H + 1; wrInvokevirtual17 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

Page 28: 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

Invokevirtual18 MDR = OPC; wrInvokevirtual19 MAR = SP = SP + 1Invokevirtual20 OPC = MDR = LV; wrInvokevirtual21 PC = PC + 1; fetchInvokevirtual22 LV = TOSInvokevirtual23 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

Page 29: 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

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

0xAC IRETURN

1

1

3

3

Page 30: 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

ireturn4 MAR = LV + 1ireturn5 PC = MDR; rd; fetch

Par. 1

Par. n. . .

SP

Variabili locali

PC precedente

LV precedente

valore

MAR

PC assume il valore di ritornosi legge il precedente LV e si iniziail fetch della prima istruzione del metodo chiamante al rientro

LV

Page 31: 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

ireturn6 MAR = SPireturn7 LV = MDRireturn8 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

1007 1000