Esempio Area dei metodi x15 0x02 0x15 Control store Stack

Slides:



Advertisements
Presentazioni simili
Linux examples of Buffer overflow attacks
Advertisements

Interfacciamento Processore – dispositivi di I/O
INTEGRATORI GENOMECH TAVOLE SINOTTICHE.
Introduzione al linguaggio C
Organizzazione della memoria
Società in accomandita semplice
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
L’architettura della Java Virtual Machine
Elaboratore e Sistemi Operativo
Generalità Linguaggio e Macchina Astratta
Architettura di un sistema informatico Hardware
Numerazione in base tre Prof. Lariccia Giovanni Gruppo: Roberta Spicciariello, Roberta Accaria e Maria Elisa Graziano.
Uso dell’errore standard di misurazione
Algoritmi in C++ (1) da completare
Architetture dei Calcolatori (Lettere j-z) Il Processore (2)
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Terza parte: Programmazione ad oggetti in Java. Cosè Java Linguaggio di programmazione definito dalla Sun Obiettivo: sviluppo di applicazioni sicure,
CALCOLATORI ELETTRONICI Gestione delle subroutine.
Caratteristiche principali dell’architettura del processore MIPS
Macchina a stati finiti DMAC 1.I/O dalla memoria al disco in modalità Burst 2.I/O dalla memoria al disco in modalità Burst Stealing 3.I/O dal disco alla.
Interfaccia del Timer1 I/O AB I/O DB I/O CB Dec SELECT START IRQ SCO R Q S Q STATUS STARTDEV COMPLETE CLEAR IVN CPU IACK IN IACK OUT IRQ IOWR REG COUNTER.
Il processore PD32.
Criticità sui dati (1° esempio)
Il livello Microarchitetturale
Corso di base sull’uso del software di analisi meteorologica DIGITAL ATMOSPHERE Prodotti meteo A cura di Vittorio Villasmunta Corso Digital Atmosphere.
Il Linguaggio Macchina
Com’è fatto un elaboratore?
Operatori E possibile ridefinire +, -, *, [], ++, ==, < class Vector2D { Friend operator+(const Vector2D& v1, const Vector2D& v2); public: Vector2D(double.
Classi Java per la protezione della riservatezza Tecnologie per la Sicurezza L-S AA Anna Riccioni
Breve introduzione a Java (2) (ed alla programmazione ad oggetti)
Struttura del Computer
PPI 8255 INTEL. A PC AB DB Registri ALUF B C D E H L SP Z80.
Struttura e funzionamento di un microprocessore.
SISTEMA DI CONTROLLO Circuito di controllo trasduttori attuatori NOTA:
Spicchi di colore Carla Ballini.
Architetture dei Calcolatori (Lettere j-z ) Il Processore
Architettura del calcolatore
Controllo remoto di dispositivi tecnologici via TCP/IP.
Conversione da base 10 a base X (Utilizzo della pila)
Art ,00 Col. Assortiti Mis. 58x38x16 Disp. Giugno.

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 9 Tipi parametrici Collezioni generiche. Strutture matematiche parametriche.
1 Università di Pavia - corso di Calcolatori Elettronici C code: L1:g = g + A[i]; i = i + j; if (i != h) goto L1; MIPS code: L1:add $t1, $s3, $s3# $t1.
1 M.MezzalamaM. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Mezzalama - M. Rebaudengo SOTTOSISTEMA DI MEMORIA.
Calcolatori Elettronici Il Processore
Elettronica Digitale (2^ Parte) 10-11_9 1 10/1/2011 Struttura del processore ELETTRONICA DIGITALE (2^ Parte ) (9)
Architettura IA - 16 M. Mezzalama - M. Rebaudengo - M. Sonza Reorda
Calcolatori Elettronici Il Processore (2)
BOZZA YY/ZZ/20XX Progetto: NSIL – Nome progetto Area: Digitare Nome Area Titolo: Digitare Nome Titolo Cliente: Digitare Nome Cliente Place.
CALCOLATORI ELETTRONICI
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
In grado di effettuare molte azioni elementari indipendenti automa universale generatore di sequenze riconoscitore di sequenze circuiti sequenziali sommatore.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
UNIVERSITÀ DEGLI STUDI DI BOLOGNA
Scrivere e compilare programmi
L’esecuzione dei programmi
Informatica Generale Marzia Buscemi
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 System Call ancora Vediamo passo passo come funziona una SC.
Architettura IA - 16 M. Mezzalama - M. Rebaudengo - M. Sonza Reorda
Architettura 8086/8088 M. Rebaudengo - M. Sonza Reorda
Click to add text L’ Unità di Elaborazione. Struttura : Unità di controllo: coordina attività CPU ALU: unità aritmetico-logica, esegue operazioni tra.
Corso di Informatica Applicata Introduzione Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De.
Z iLOG 80 Calcolatori Elettronici Bartolomeo Bajic.
Cammino dei Dati (Datapath)
Java Virtual Machine La caratteristiche di base sono analoghe a quella della P-code però più complessa perchè i dati strutturati (oggetti e array) sono.
به نام خدا موضوع: انواع قراردادهای فروش بین المللی کالا
Controllo e microprogrammazione
Transcript della presentazione:

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

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

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

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

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

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

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

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

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

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

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

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

Viene aggiornato TOS, in Z si ha zero se operando1 (ora in OPC) 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. Se i due operandi sono diversi: opcode F PC = PC + 1 F2 PC = PC + 1; fetch F3 goto Main1 opcode PC yy xx 9F

Se i due operandi sono uguali: T OPC = PC - 1; fetch; goto goto2 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

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.

high bit: (JAMZ AND Z) OR (JAMN AND N) OR (NEXTADDRESS[8]) Ificmpeq6 Z = OPC - H; if Z goto T else goto F addr jam alu C mem B 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.

WIDE : l’istruzione seguente ha un indice di 16 bit 0xC4 PC = PC + 1; fetch; goto (MBR OR 0x100) addr jam alu C mem B 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

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

Esempio Area dei metodi 2320 2321 2326 0x15 0x02 0x15 0x05 0x60 0x36 0x04 ILOAD varnum ILOAD varnum IADD ISTORE varnum . . . 2331 2332 2334 0xB6 0x00 0x1E INVOKEVIRTUAL disp 4576 4577 4580 0x00 0x02 0x00 0x04 0x84 . . . Num. parametri Spazio var. loc. 1^istruzione 5620 5621 . . . 0xAC . . .

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

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

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

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

Main1 PC = PC + 1; fetch; goto (MBR) 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 H = xxyy Si legge l’indirizzo di zz In OPC si ha l’indirizzo di ritorno H = zztt

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

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

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

Salva il vecchio PC Salva il vecchio LV SP LV precedente SP, MAR 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 Salva il vecchio PC Salva il vecchio LV SP LV precedente SP, MAR PC precedente Variabili locali Variabili locali Par. n Par. n . . . . . . Par. 1 Par. 1 TOS LV LV

0xAC IRETURN valore SP LV precedente PC precedente 1 Variabili locali 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 valore SP LV precedente PC precedente 1 Variabili locali Par. n 3 . . . Par. 1 3 LV 1 MAR

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

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