; programma MOV AX, DATO_1. ; somma al contenuto dell' accumulatore il contenuto del registro B

Documenti analoghi
I Linguaggi di Programmazione

Linguaggi di programmazione

Linguaggi di Programmazione

Linguaggi di Programmazione

Lezione n. 2i Informatica e tecnologia informatica Sistema di elaborazione Algoritmo Linguaggi di programmazione Realizzazione di un programma

Traduzione e interpretazione

Linguaggi di programmazione. Parte VII. Traduzione e collegamento. Interpretazione. Traduzione

Parte VII. Traduzione e collegamento

Parte VII. Traduzione e Collegamento

o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori

Linguaggi, compilatori e interpreti

Elementi di programmazione

PROBLEMI E ALGORITMI

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

LINGUAGGI DI ALTO LIVELLO

Informatica. Dipartimento di Economia. Ing. Cristiano Gregnanin. 20 ottobre Corso di laurea in Economia

Linguaggi, compilatori e interpreti

Linguaggi di alto livello, compilatori e interpreti

Linguaggi di alto livello, compilatori e interpreti

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

Cosa è un programma. Informatica di Base -- R.Gaeta 18

COMPILAZIONE. Tarsformazione di linguaggi

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina

Unità Didattica 2 I Linguaggi di Programmazione

Introduzione - aspetti generali dell informatica

Unità di apprendimento 6. Il software: dal linguaggio alla applicazione

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

ASTRAZIONE ASTRAZIONE

Linguaggi di programmazione

Linguaggi, Traduttori e le Basi della Programmazione

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN

Algoritmi, Strutture Dati e Programmi. UD 2.d: Linguaggi Procedurali

Calcolatori Elettronici

Elementi di programmazione

Informatica 1. 4 Programmazione e Sviluppo del software. ing. Luigi Puzone

Iniziare a programmare in C++

Il linguaggio di programmazione Python

Il Software programmabili programma algoritmo

Linguaggi di Programmazione

la traduzione dei programmi ed introduzione a Java

Introduzione alla programmazione

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17

Macchine astratte, linguaggi, interpretazione, compilazione

Teoria dell Informazione

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Macchine astratte, linguaggi, interpretazione, compilazione

Esecuzione di Programmi Esercitazione

Introduzione. Informatica B. Daniele Loiacono

Introduzione al C. InformaticaB. Daniele Loiacono

Il sistema operativo

Informatica Problema Algoritmo Programma

Introduzione alla programmazione. Walter Didimo

Le istruzioni corrispondono univocamente a quelle macchina, ma vengono espresse tramite nomi simbolici i (parole chiave)

Unità di apprendimento 6. Dal problema al programma

Il linguaggio macchina

Programmazione: Sommario

Elementi di programmazione

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

I linguaggi. Informatica

Architettura degli Elaboratori

INFORMATICA. L informatica comprende:

Sistemi Operativi 1. Mattia Monga. a.a. 2008/09. Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

Sistemi Operativi. Bruschi Martignoni Monga. Gestione della memoria. Sistemi multiprogrammati. Partizioni fisse Partizioni variabili Paginazione

Sommario FONDAMENTI DI INFORMATICA. Definizione formale di algoritmo. Informatica e algoritmi. ALGORITMI E LINGUAGGIO PYTHON Introduzione

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

Linguaggi e traduttori

Corso di Architettura (Prof. Scarano) 10/05/2002

Lezione 16. Il Software di base

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

AMBIENTI DI PROGRAMMAZIONE

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

Linguaggi di Programmazione

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Fondamenti di Algoritmi

Macchine astratte, linguaggi, interpretazione, compilazione

Linguaggi di programmazione

Fondamenti di Informatica. Ingegneria elettronica

LINGUAGGI DI PROGRAMMAZIONE E CODIFICA PROGRAMMI

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Strutture dati nel supporto a run time

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Linguaggi di Programmazione e Paradigmi. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

informatica di base per le discipline umanistiche

Transcript:

Linguaggi di programmazione Il linguaggio base di un elaboratore è il linguaggio macchina. Linguaggio macchina: insieme di istruzioni espresse nel formato numerico (binario) di un particolare processore. Linguaggi di programmazione Difficoltà di programmazione in linguaggio macchina: -complessità di scrittura; -facilità di errori; -non portabilità. Il linguaggio macchina consente di specificare in un programma solo operazioni elementari operazioni elementari: operazioni che l'elaboratore è in grado di interpretare ed eseguire direttamente. Si è passati così ai linguaggi simbolici. Linguaggi simbolici: utilizzano, al posto dei numeri, delle espressioni simboliche per esprimere le istruzioni, i dati e gli indirizzi di memoria. Ogni istruzione in linguaggio macchina -svolge un'operazione elementare -è espressa in una forma vicina alla macchina e lontana dal linguaggio naturale tipico del ragionamento umano. I numeri binari corrispondenti ai codici operativi delle istruzioni, ai dati ed agli indirizzi di memoria dei dati sono sostituiti da nomi simbolici. Es. il linguaggio Assembler. 1 2 Linguaggio Assembler In un programma in Assembler ; definizione dei dati DATO_1=codice_bin2 DATO_2=codice_bin4 ; definizione degli indirizzi RESULT=cod_bin7 ; programma MOV AX, DATO_1 MOV BX, DATO_2 ADD AX, BX ; muovi nell' accumulatore il valore DATO_1 ; muovi nel registro B il valore DATO_2 ; somma al contenuto dell' accumulatore il contenuto del registro B Sviluppo ed esecuzione di un programma ASSEMBLER Un programma scritto in linguaggio Assembler deve essere tradotto in linguaggio macchina per poter essere eseguito. Assemblatore: un particolare programma che traduce in numeri i codici simbolici (codici mnemonici) dei dati e delle istruzioni di un programma Assembler. Programma scritto in linguaggio Assembler: programma sorgente. Il programma Assemblatore trasforma il programma sorgente in programma oggetto. STOS RESULT HLT memorizza il contenuto dell' accumulatore nella cella il cui indirizzo ha il valore simbolico RESULT ; termina l' esecuzione 3 4

Vantaggi e Svantaggi del linguaggio Assembler Vantaggi: -maggiore semplicità rispetto al linguaggio macchina -potenza: consente la completa utilizzazione delle risorse della macchina, essendo la sua struttura aderente ad essa. Svantaggi - Non portabilità dei programmi. -Richiede la conoscenza dei dettagli dell'hardware Es. la gestione dei dispositivi di I/O richiede la conoscenza di -quanti e quali registri sono presenti sull'interfaccia; -a quali indirizzi corrispondono tali registri; -le relative modalità di impiego. Svantaggi dell'assembler -Difficoltà di programmazione: l'assembler è un linguaggio orientato alla macchina, e non al problema da risolvere (basso livello) La sua struttura non permette di definire e trattare dati complessi. La soluzione di un problema (algoritmo) deve essere scomposta in azioni elementari, perché il calcolatore può eseguire solo operazioni elementari. Gli inconvenienti dell'assembler hanno portato allo sviluppo di linguaggi di programmazione più vicini al linguaggio naturale (umano). Questi linguaggi sono detti ad alto livello. 5 6 Linguaggi ad alto livello Linguaggi ad alto livello I linguaggi ad alto livello: -consentono di scrivere i programmi in una forma molto vicina al modo di ragionare dell'uomo. -sono orientati al problema da trattare -evitano al programmatore di doversi occupare dei dettagli dell'hardware. es. PASCAL, C, BASIC, FORTRAN,etc. Le istruzioni specificano operazioni più complesse rispetto a quelle elementari che il calcolatore può eseguire direttamente. 1 istruz. in un linguaggio ad alto livello più istruzioni in linguaggio macchina. Le istruzioni dei linguaggi ad alto livello non possono essere direttamente interpretate dallo elaboratore. E' necessario tradurre i programmi scritti nei linguaggi ad alto livello in linguaggio macchina. Programmi traduttori: compilatori, interpreti. Per ogni linguaggio esistono i corrispondenti traduttori. 7 8

Compilatori: effettuano la traduzione dell'intero programma in linguaggio macchina tutta in una volta. Il compilatore produce un programma oggetto (codice oggetto) che subirà altre elaborazioni prima di essere eseguito. Operazioni effettuate dal compilatore sul programma sorgente: -Analisi lessicale -Analisi sintattica -Analisi semantica -Ottimizzazione (opzionale) Interpreti: traducono il programma istruzione per istruzione. La traduzione di ogni istruzione è seguita dall'immediata esecuzione. Compilatori Interpreti Traducono il Traducono ed programma tutto in eseguono le una volta e istruzioni una alla forniscono il codice volta oggetto Errori rilevati dal compilatore (compile-time errors) sono di tipo statico: lessicali o sintattici o semantici. Il compilatore fornisce una lista contenente: -fatal errors: errori gravi che non consentono di proseguire la compilazione del sorgente. Non viene generato il codice oggetto. -warnigs (avvertimenti): segnalazioni di errori lievi che non compromettono la traduzione. Viene generato il codice oggetto. 9 10 Gli interpreti individuano: -errori lessicali, sintattici, semantici di tipo statico -errori semantici di tipo dinamico (run-time errors): errori che possono essere individuati solo in fase di esecuzione (run) del programma (es. divisione per zero,overflow, etc.). Confronto compilatori-interpreti Confronto compilatori-interpreti In caso di modifica del sorgente o di fatal error: -compilatori: il sorgente deve essere ricompilato per intero per poter essere eseguito (e corretto se c'e' un errore); -interpreti: l'esecuzione può riprendere subito dopo la modifica senza bisogno di ricompilare prima l'intero programma (l'eventuale errore può essere corretto non appena scoperto). Ingresso: -Compilatori: il programma sorgente; -Interpreti: il programma sorgente + i dati da utilizzare nell'esecuzione. Errori rilevati: -Compilatori: solo errori a compile-time (statici) -Interpreti: come i compilatori + run-time errors Differenze: - la velocità di esecuzione di un programma compilato è generalmente maggiore rispetto a quella di un programma interpretato; - i compilatori possono effettuare l'ottimizzazione dell'eseguibile; - gli interpreti facilitano lo sviluppo e la messa a punto di un programma. 11 12

Compilatori o interpreti? Per i vari linguaggi ad alto livello generalmente sono disponibili sia compilatori che interpreti. Il programma oggetto non è ancora eseguibile. Il tipo di applicazione determina la scelta Applicazioni I/O Bound: molte operazioni di I/O, intervallate da brevi periodi di elaborazione (es. applicazioni gestionali) Il tempo di esecuzione dipende dall'i/o e non dalla modalità di esecuzione possono essere interpretate. Applicazioni CPU-bound: poche operazioni di I/O e molta elaborazione (es. applicazioni di tipo scientifico, ingegneristico). Richiedono elevata efficienza di esecuzione compilazione. Quando il compilatore genera il programma oggetto -non assegna a dati ed istruzioni degli indirizzi assoluti (es. cella di memoria n 5) ma indirizzi relativi. indirizzi relativi: riferiti ad una posizione costante non specificata Es."quinta cella dopo la posizione START",senza che sia stata specificata la posizione di START in memoria. La posizione START verrà definita solo quando il programma verrà caricato in memoria centrale per l'esecuzione. Solo allora il programma sarà eseguibile. 13 14 Dunque: indirizzo assoluto = indirizzo relativo + indirizzo di START Altro motivo per cui il codice oggetto non è ancora eseguibile: -il programma oggetto può contenere dei riferimenti a funzioni (blocchi di codice) definite esternamente al programma, che effettuano delle particolari operazioni per suo conto (es. calcolo di funzioni matematiche, gestione periferiche,etc.) o a variabili esterne condivise. Tali riferimenti sono lasciati irrisolti, cioé ad essi non corrisponde ancora un indirizzo. Perché il programma oggetto diventi eseguibile, è necessario collegare queste funzioni o queste variabili al programma. Un programma è la codifica di un algoritmo in un linguaggio di programmazione. L'algoritmo risolve un problema. Per risolvere un problema complesso, di solito, lo si scompone in sottoproblemi più semplici. Ogni sottoproblema può, a sua volta, essere soggetto ad ulteriori scomposizioni. Ciascun sottoproblema può essere risolto da un sottoprogramma (modulo). Ciascun modulo può essere compilato a se' stante, indipendentemente dagli altri moduli. 15 16

Una volta scritti e compilati i moduli relativi ai sottoproblemi, occorre collegarli per costituire un unico programma soluzione del problema principale. Linker: programma che si occupa di ricucire i diversi moduli oggetto in un programma unico. Il linker riceve in input i tre codici oggetto e genera un unico modulo con indirizzi contigui a partire da una posizione simbolica START. Nel programma prodotto dal linker (programma collegato): es. un programma composto da tre moduli. Ciascun modulo viene compilato separamente. In tutti e tre i moduli le istruzioni e i dati hanno indirizzi relativi che partono da 0. modulo 1: indirizzi da 0 a1000 modulo 2:indirizzi da 0 a 2000 modulo 3: indirizzi da 0 a 3000 -il modulo 1 ha indirizzi che vanno dall'indirizzo 0 all'indirizzo 1000; - il modulo 2 ha indirizzi che vanno da 1001 a 3001. L'indirizzo 0 del secondo modulo diventa 1001 e tutti gli indirizzi dello stesso modulo devono essere incrementati di 1001; -il modulo 3 ha indirizzi che vanno da 3002 a 3502. 17 18 L'operazione di collegamento dei moduli svolta dal linker è di fondamentale importanza. Es. il modulo 2 contiene un'istruzione del tipo: "salva il risultato della somma all'indirizzo 20". Il modulo prodotto dal linker (modulo collegato) deve essere caricato in memoria per diventare eseguibile. Questa operazione è svolta dal loader (caricatore). L'indirizzo giusto è 20+1001=1021 Se il linker non aggiustasse gli indirizzi, il risultato verrebbe invece scritto all'indirizzo 20, che contiene dati o istruzioni del modulo 1! Il loader stabilisce la zona di memoria in cui caricare il programma assegnando un valore numerico al simbolo START. La scelta di tale posizione è effettuata in base alla specifica politica di gestione della memoria adottata. Una volta fissata la posizione START, gli indirizzi relativi diventano assoluti (rilocazione degli indirizzi) ed il programma diventa eseguibile, ossia pronto per l'esecuzione. 19 20