• Non ci sono risultati.

Lezione 2, Giovedi' 19 Aprile 2001 

N/A
N/A
Protected

Academic year: 2021

Condividi "Lezione 2, Giovedi' 19 Aprile 2001 "

Copied!
22
0
0

Testo completo

(1)

Funzionamento della memoria

• Porta di 32 bit indirizzabile a parola (coppia di registri MAR/MDR

• Porta di 8 bit indirizzabile a byte (coppia di registri PC/MBR)

• MAR contiene indirizzi di parole quindi:

– Se MAR contiene 0 verranno letti i byte da 0 a 3 in MDR

– Se MAR contiene 4 verranno letti i byte da 16 a 19 in MDR

• Nella realtà la memoria centrale è unica ed organizzata a byte

(2)

Stratagemma

Discarded 32-Bit MAR (counts in words)

32-Bit address bus (counts in bytes)

(3)

Disponibilità dei dati

• Operazione di lettura avviata al termine del

ciclo del data-path

• Dati disponibili al termine del ciclo

seguente

(4)

Segnali per controllare il data-path

• 9 per la scrittura dei dati dal bus C ai registri

• 4 per selezionare il registro il cui contenuto

deve essere messo sul bus B

• 8 per controllare ALU e SHIFTER

• 2 segnali per indicare la lettura o scrittura di

parole in memoria (tramite MAR/MDR)

• 1 segnale per indicare il fetch dalla memoria

della prossima istruzione (tramite PC/MBR)

(5)

Segnali per determinare la prossima

microistruzione

• 9 per il campo NEXT_ADDRESS

• 3 per il campo JAM

Bits 9 3 8 9 3 4

NEXT_ADDRESS

Addr JAM ALU C Mem B

R E A D F E T C H J A M N J M P C J A M Z S L L 8 S R A 1 F 0 F1 E N A E N B I N V A I N C O P C T O S C P P L V S P P C M D R M A R W R I T E B bus B bus registers 0 = MDR 1 = PC 2 = MBR 3 = MBRU 4 = SP 5 = LV 6 = CPP 7 = TO S 8 = OPC 9 -15 none H

(6)

Calcolo della prossimo valore per

MPC

• Dopo il primo sottointervallo

∆w (durante il

quale il contenuto del registro MIR si

stabilizza) il campo NEXT_ADDRESS

viene copiato in MPC

• Si ispeziona il campo JAM

– Se JAM vale 000 allora non si deve più far nulla e MPC=NEXT_ADDRESS

(7)

Calcolo della prossimo valore per

MPC – bit JAMN e JAMZ

• Se il bit JAMN vale 1 allora si effettua l’OR del contenuto del flip-flop N con il bit più significativo di MPC (NEXT_ADDRESS[8])

• Se il bit JAMZ vale 1 allora si effettua l’OR del contenuto del flip-flop Z con il bit più significativo di MPC (NEXT_ADDRESS[8])

• Se valgono entrambi 1 allora si effettua l’OR di entrambi con il bit più significativo di MPC (NEXT_ADDRESS[8])

(8)

Calcolo della prossimo valore per

MPC – bit JAMN e JAMZ

• La “scatoletta” High Bit calcola la funzione booleana

(JAMZ AND Z) OR (JAMN AND N) OR NEXT_ADDRESS[8]

• In ogni caso MPC può assumere solo i valori NEXT_ADDRESS o NEXT_ADDRESS con il bit più significativo a 1

• Se il bit più significativo di NEXT_ADDRESS era già pari a 1 non ha senso usare JAMN e/o JAMZ

(9)

Calcolo della prossimo valore per

MPC - esempio

depending

....

..

Address Addr Data path control bits

One of these will follow 0x44 on N JA M

J AMN bit set

0x44 0x56

0x56

0x156

(10)

Calcolo della prossimo valore per

MPC – bit JMPC

• Se il bit JMPC vale 1 allora viene fatto l’OR bit a bit degli 8 bit meno significativi del capo NEXT_ADDRESS con gli 8 bit meno significativi di MBR

• La “scatoletta” etichettata con “0” calcola l’OR

• Normalmente, se JMPC vale 1 allora i bit meno significativi di NEXT_ADDRESS sono a 0 (quello più significativo può valere 1 o 0)

• NEXT_ADDRESS=0x000 o 0x100 se JMPC=1

• Poter fare l’OR con MBR serve per implementare un Multi-way jump (lo vedremo nel micro-interprete)

(11)

H SHIFTER ALU 2 N B BUS 6 ALU CONTROL CONTROL SIGNALS MEMORY CONTROL SIGNALS (RD, WR,FETCH)

ENABLE ONTO B BUS WRITE C BUS TO REGISTER Z C BUS SP LV CPP TOS OPC PC MDR MAR MBR 9 O 3 8 4-TO-16 DECODER 2 8 4 MPC MIR ADDR J ALU C M B HIGH BIT JMPC J AMN/JAMZ 1-BIT FLIP-FLOP -512 x 36-BIT CONTROL STORE FOR HOLDING THE MICROPROGRAM

(12)

Lo stack

• Molti linguaggi di programmazione usano il concetto di procedura

• Le procedure possono avere variabili locali

• Una parte della memoria centrale (detta stack) viene usata per memorizzare le variabili locali delle procedure

• Si usa un registro (LV) che punta alla base delle variabili locali relative alla procedura in esecuzione

• Un registro (SP) punta all’ultima variabile locale

• Ci si riferisce ad una variabile tramite il suo offset da LV

• La struttura dati tra LV e SP viene detta frame delle variabili locali della procedura

(13)

Stack per gestione procedure

SP LV a3 a1 (a) 108 100 a2 104

(a) Procedura A con variabili locali a1,a2,a3

SP LV a3 a1 (b) a2 b3 b4 b1 b2

(b) La procedura A chiama la procedura B con variabili locali b1,b2,b3,b4

F R A M E LV a3 a1 (d) a2 d3 d4 SP d5 d1 d2

(d) La procedura C restituisce il controllo a B che lo restituisce ad A che chiama D con variabili locali d1,d2,d3,d4,d5

F R A M E a3 a1 (c) a2 b3 b4 LV c1 SP c2 b1 b2

(c) La procedura B chiama la procedura C con variabili locali c1,c2

F R A M E

(14)

Stack per calcoli aritmetici

Supponiamo di voler calcolare a1=a2+a3 prima di chiamare B

LV a3 SP a2 a1 (a) a2

(a) Si esegue una push di a2 sullo stack

LV a3 a2 SP a3 a1 (b) a2

(b) Si esegue una push di a3 sullo stack

LV

SP a3

a2 + a3 (d)

a2

(d) Si esegue la pop dello stack memorizzando la parola in cima (top of stack) nella variabile a1

LV a3 SP a2 + a3 a1 (c) a2

(15)

Modello della memoria in IJVM

• Array di 4294967296 byte (4GB) o

1073741824 parole di 4 byte

• Le istruzioni IJVM hanno accesso alla

memoria con indirizzi espressi come offset

relativi a puntatori a speciali aree di memoria

(16)

Modello della memoria in IJVM

Constant pool

• Area delle costanti (constant pool):

si compone di costanti, stringhe e puntatori ad

altre aree di memoria. Non è scrivibile da un

programma IJVM e viene definita al momento

del caricamento del programma in memoria.

Di seguito non viene cambiata.

• Il registro implicito CPP contiene l’indirizzo

della prima parola nella constant pool

(17)

Modello della memoria in IJVM

Frame delle variabili locali

• Frame delle variabili locali: ad ogni invocazione di un metodo si abbina l’allocazione di un’area di memoria centrale per la memorizzazione dele variabili locali e dei parametri con cui viene invocato un metodo

• Il registro implicito LV contiene l’indirizzo della prima parola nel frame delle variabili locali

(18)

Modello della memoria in IJVM

Operand stack

• La dimensione del frame delle variabili locali di un metodo è nota staticamente. L’area per lo stack degli operandi (dove, ad esempio, realizzare la valutazione di espressioni aritmetiche) si trova al di sopra del frame delle variabili locali.

• Il registro implicito SP contiene l’indirizzo della parola in cima allo stack (top of stack)

• SP, a differenza di CPP e LV, può cambiare durante l’esecuzione di un metodo (ad esempio, dopo operazioni di push e pop)

(19)

Modello della memoria in IJVM

Area dei metodi

• Il codice da eseguire viene memorizzato in un’area della memoria centrale detta area dei metodi.

• Il registro implicito PC (Program Counter) contiene l’indirizzo del prossimo byte da leggere

• Quest’area della memoria centrale viene indirizzata a byte e non a parole come le precedenti

• Questa area è di sola lettura

• Può PC cambiare valore durante l`esecuzione di un metodo?

(20)

Modello della memoria in IJVM

SP LV PC CPP Constant P ool Current Operand Stack 3 Current Local Va riable Frame 3 Local Va riable Frame 2 Local Va riable Frame 1 Method Area

(21)

Set di Istruzioni IJVM

• Le istruzioni si compongono di un opcode e,

talvolta, di un operando che può essere un offset o una costante

• Ci sono istruzioni per memorizzare una parola, di varia provenienza, sullo stack o per rimuovere una parola dallo stack e/o memorizzarla in una

variabile locale

• Istruzioni logico-artimetiche • Istruzioni di salto

(22)

Set di Istruzioni IJVM

Hex Mnemonic Meaning

0x10 BIPUSH byte Push byte onto stack

0x59 DUP Copy top word on stack a n d push onto stack 0xA7 GOTO offset Unconditional branch

0x60 IADD Pop two words from stack; push their sum 0x7E IAND Pop two words from stack; push Boolean AND 0x99 IFEQ offset Pop word from stack a n d branch if it is zero

0x9B IFLT offset Pop word from stack and branch if it is less than zero 0x9F IF ICMPEQ offset Pop two words from stack; branch if equal

0x84 IINC varnum const Add a constant to a local variable 0x15 ILOAD varnum Push local variable onto stack 0xB6 INVOKEVIRTUAL disp Invoke a method

0x80 IOR Pop two words from stack; push Boolean OR 0xAC IRETURN Return from method with integer value

0x36 ISTORE varnum Pop word from stack a n d store in local variable 0x64 ISUB Pop two words from stack; push their difference 0x13 LDC W index Push constant from constant pool onto stack

0x00 NOP Do nothing

0x57 POP Delete word on top of stack

0x5F SWAP Swap the two top words on the stack

Riferimenti

Documenti correlati

Gli attributi che mi sembrano più diretti sono dati dal fatto che ogni teoria, offrendo delle “lenti” teoriche attraverso le quali guardare ai fatti psicologici, offre un sistema

Di sicuro la Confindustria ha inteso mettersi in sintonia con il nuovo corso del governo, manifestando la preferenza – popolare anche presso molti suoi associati – per posizioni

All’IDENTIFICAZIONE precoce del paziente e alla sua SEGNALAZIONE al SISP, deve seguire in via precauzionale la messa in atto delle norme comportamentali di Isolamento del paziente

Scrivere il vettore ~a che va dal punto P al punto A, il vettore ~b che va dal punto P al punto B e calcolare il prodotto scalare ~b · ~a..

Inizialmente il Frame Relay è stato definito come un servizio a pacchetto in ambito ISDN, in cui è prevista una netta separazione tra il piano di controllo, che provvede alla

Le ragioni per cui gli italiani vi si rivolgono sono estremamente diverse: il __________ degli intervistati le considera meno tossiche di quelle convenzionali, per il

L’altro terreno su cui qualificare la nostra azione contrattuale è il tema della formazione, in un contesto in cui le competenze devono saper tenere il passo dell’evoluzione

L’economia europea va male perché c’è l’euro 3.. Un grande