IJVM. Danilo Dessì. Architettura degli Elaboratori.

Documenti analoghi
Contenuto della lezione

Integer Java Virtual Machine (IJVM)

06 Livello di micro architettura

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Microarchitettura. Giacomo Fiumara Anno Accademico / 101

Convenzioni di chiamata a procedure

Le strutture di controllo in C++

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)

Struttura di programmi MAL Elementi lessicali

Istruzioni di trasferimento dati

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Integer Java VM: IJVM

Ingredienti sintattici di Java

Corso di Laurea in Informatica

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Assembly (3): le procedure

Corso di Laurea in Informatica Architetture degli Elaboratori

Università degli Studi di Cassino

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M.

Il livello della CPU, e in particolare come le istruzioni ISA (Instruction Set Architecture) che costituisce la CPU.

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Passaggio di Parametri per Valore o Indirizzo

DEC PDP8, III Generazione, '65-'75

OPERAZIONI ARITMETICHE

Processore Danilo Dessì. Architettura degli Elaboratori.

Programmazione strutturata

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

PROGRAMMAZIONE: Le strutture di controllo

Esercizi sulla macchina assembler, strutturazione a livelli, spazio di indirizzamento

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

Spazio di indirizzamento virtuale

Funzioni, Stack e Visibilità delle Variabili in C

n n 1 n = > Il calcolo del fattoriale La funzione fattoriale, molto usata nel calcolo combinatorio, è così definita

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Architetture dei Calcolatori

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico pagina 1

Il linguaggio macchina

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

Fondamenti di Informatica

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Perché il linguaggio C?

iafelice at cs(dot)unibo(dot)it

Laboratorio di informatica Ingegneria Clinica. Esercitazione 2 10 Ottobre 2011

Record di Attivazione

Corso di Fondamenti di Informatica. La ricorsione

Rappresentazione degli algoritmi

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Il linguaggio Java Istruzioni di Controllo

Istruzioni assembler Istruzione N Registri

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Richiami: v[i] e &v[i] Organizzazione della memoria. Organizzazione della memoria. Esercitazione di Calcolatori Elettronici Ing. Gian Luca Marcialis

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

CAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

CAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE

Il livello della CPU, e in particolare come le istruzioni ISA (Instruction Set Architecture) che costituisce la CPU.

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

STRUTTURE DI CONTROLLO DEL C++

10: I LINGUAGGI di PROGRAMMAZIONE PARTE 1

Corso di Fondamenti di Informatica

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

PROGRAMMAZIONE STRUTTURATA

Istruzioni, algoritmi, linguaggi

Architettura di una CPU

Esempio di Prova Scritta

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Dall analisi alla codifica (1)

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami

Istruzioni semplici e strutturate

Introduzione a Matlab

Strutture iterative. Strutture iterative. I cicli in C. Strutture iterative. con i che assume i valori da 0 a 1000

Università di Roma Tor Vergata L6-1. iterazione: struttura di controllo per ripetere più volte uno stesso comando

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE

SEMAFORI SEMAFORI. Sul semaforo sono ammesse solo due operazioni (primitive)

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Università degli Studi di Cassino

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H

Invocazione di funzioni. Passaggio parametri Creazione record di attivazione (anche chiamato stack frame o area di attivazione)

LE STRUTTURE IN PROGRAMMAZIONE ASSEMBLER

Analisi e Programmazione

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Corso di Informatica

Laboratorio di Calcolo Numerico

Esercitazione 11. Liste semplici

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Modi di esecuzione user / kernel

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Transcript:

IJVM Architettura degli Elaboratori Danilo Dessì danilo_dessi@unica.it

Instruction set

Istruzioni di salto BRANCH Istruzione GOTO label IFEQ label IFLT label IF_ICMPEQ label Significato Salta in modo incondizionato all istruzione etichettata da label Pop della parola in cima allo stack; se la parola vale 0 salta all istruzione etichettata da label Pop della parola in cima allo stack; se la parola ha un valore negativo salta all istruzione etichettata da label Pop di due parole dalla cima dello stack; se le parole sono uguali salta all istruzione etichettata da label Salto incondizionato: quando si forza il programma a continuare la sua esecuzione da un istruzione in una posizione specifica Salto condizionato: quando al verificarsi di una condizione si forza il programma a continuare la sua esecuzione da un istruzione specifica

Instruction Set METODI Istruzione INVOKEVIRTUAL m IRETURN ALTRE Istruzione HALT IINC v n ERR IN OUT NOP WIDE Significato Chiama il metodo m Termina l esecuzione del metodo corrente e restituisce il controllo al metodo chiamante Significato Blocca l esecuzione del programma nel simulatore Modifica la variabile v sommandoci n Scrive un messaggio di errore e blocca il simulatore Legge un carattere dal buffer della testiera e lo salva in cima allo stack; se il buffer è vuoto salva 0 Pop della parola in cima allo stack e la stampa in out Istruzione vuota: non fa nulla Indica che la prossima istruzione sarà a 16 bit

Costrutto if-else Il costrutto if in un linguaggio ad alto livello ha la forma if (condizione) istruzione/i if (condizione) istruzione/i else istruzione/i Nei linguaggi più basso livello non abbiamo il costrutto if In IJVM si utilizzano le istruzioni di branch che controllano il valore (o i valori) in cima allo stack e in base al risultato della verifica saltano a un istruzione specifica tramite un etichetta

Esempio costrutto if a = 5 b = 7 c = 6 If ( a <= 8 ) a = b c Inizializzazione variabili a = 8 a < 8.main.var a b c.end-var BIPUSH 0x5 BIPUSH 0x7 ISTORE b BIPUSH 0x6 ISTORE c BIPUSH 0x8 IF_ICMPEQ vero BIPUSH 0x8 IFLT vero HALT vero: ILOAD c HALT.end-main Istruzioni blocco if

Esempio costrutto if-else a = 5 b = 7 c = 6 If ( a <= 8 ) a = b c else a = b + c Inizializzazione variabili a = 8 a < 8.main.var a b c.end-var BIPUSH 0x5 BIPUSH 0x7 ISTORE b BIPUSH 0x6 ISTORE c BIPUSH 0x8 IF_ICMPEQ vero BIPUSH 0x8 IFLT vero vero: ILOAD c HALT.end-main Istruzioni blocco if Istruzioni blocco else ILOAD c HALT

Costrutti iterativi Costrutti iterativi while (condizione) istruzione/i for (i=0, i < limite; i = i + 1) istruzione/i In IJVM si utilizzano le stesse istruzioni di branch utilizzate per la selezione Si utilizza anche il salto incondizionato: dopo che eseguo il blocco di istruzioni salto alle istruzioni che verificano la condizione Attenzione ai cicli infiniti!

Esempio costrutto while.main.main while ( a < b ) { a = a * 3 b = b * 2 } ciclo: IFLT blocco GOTO continuo blocco: ISTORE b GOTO ciclo continuo:.end-main ciclo: IFEQ continuo IFLT continuo ISTORE b GOTO ciclo continuo:.end-main

Esempio costrutto for.main for( i = 0; i <= 10; i = i + 1 ) a = a * 3 BIPUSH 0x0 ISTORE i ciclo: BIPUSH 0xa ILOAD i IFLT continuo blocco: IINC i 1 GOTO ciclo continuo:.end-main

Stack & Metodi Ogni volta che si richiama un metodo è necessario inserire il riferimento al metodo e i parametri sullo stack (se sono presenti nella firma), che formano il blocco del metodo Per ogni invocazione il metodo può accedere alle sole variabili nel proprio blocco. Il blocco riservato per ogni metodo che si esegue è detto record di attivazione (lo vedrete in dettaglio in altri corsi ) Per noi nel record ci sono il riferimento (semplicemente una costante che chiamiamo OBJREF), i parametri del metodo e le variabili Se la funzione è ricorsiva ogni chiamata porterà alla creazione di un nuovo blocco in cima allo stack Il blocco che sta in cima determina quale è il metodo che si sta eseguendo in quel momento, i blocchi inferiori appartengono ai metodi che sono sospesi in attesa del risultato della funzione chiamata Al termine dell esecuzione della funzione con l istruzione IRETURN il blocco viene deallocato, in cima allo stack viene posto il valore di ritorno e si riprende l esecuzione dalla funzione chiamante

Moltiplicazione.constant OBJREF 0x40.end-constant.main.end-main.var i j r.end-var BIPUSH 0x5 ISTORE i BIPUSH 0x3 ISTORE j LDC_W OBJREF ILOAD i ILOAD j INVOKEVIRTUAL mul ISTORE r HALT.method mul( i, j ) ciclo:.var r.end-var BIPUSH 0x0 ISTORE r ILOAD i IFEQ fine ILOAD j IFEQ fine ILOAD i ILOAD r ISTORE r IINC j -1 GOTO ciclo fine:.end-method ILOAD r IRETURN

Esercizio Scrivere il codice IJVM per i metodi che calcolano la divisione intera (sia quoziente sia resto) 20 min

Soluzione.method div (a,b).method mod (a,b) loop: IFEQ end_loop IFLT end_loop GOTO loop end_loop: IRETURN.end-method.var q.end-var BIPUSH 0x0 ISTORE q loop: IFEQ end_loop IFLT end_loop IINC q 0x1 GOTO loop end_loop: ILOAD q IRETURN.end-method