7) Creazione di un programma eseguibile

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

Ing. Pasquale Zambrotta
C C++ &.
I Linguaggi di programmazione
Traduzione ed Interpretazione
Linux examples of Buffer overflow attacks
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Sottoprogrammi: funzioni e procedure
Preincremento e PostIncremento in C++
Una applicazione complessa non può essere sviluppata in un unico file: sarebbe ingestibile! Deve necessariamente essere strutturata su più file sorgente.
Software di base: Linguaggi di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Introduzione a Java.
Code::Blocks Ambiente di sviluppo.
Code::Blocks Ambiente di sviluppo.
Dalla scrittura all’esecuzione
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Procedure e funzioni In linguaggio C.
I linguaggi di programmazione

ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Le funzioni.
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
Programmazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++
Introduzione alla programmazione
Funzioni definite dall’utente
1 Il nostro esempio guida: La costruzione di uno stack.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Laboratorio di Linguaggi lezione II Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 71 Misurare il successo di uninterfaccia: il testing Per predisporre un adeguato piano di valutazione.
8) Classi numeriche e operatori Lab. Calc. I AA2002/03 - cap.82 Classi numeriche Esempi di classi numeriche: int, numeri interi che occupano una parola.
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
10) switch, else if e ifdef. Lab.Calc.I AA2002/03 - cap.102 espressione condizione.
Laboratorio di Calcolo I 1) Introduzione Università Roma Tre Corso di Studi in Fisica AA 2002/03.
Creazione di un programma eseguibile. Laboratorio di Calcolo AA2005/062 Livelli di programmazione Si può programmare a diversi livelli utilizzando linguaggi.
Lab. Calc. AA 2005/061 Classi. Lab. Calc. AA 2005/062 C e C++ Fino a questo punto abbiamo introdotto gli elementi base di qualsiasi linguaggio di programmazione,
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
Istruzioni di selezione (If/else/switch)
Primi Elementi di Programmazione in C++
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Algebra Lineare Esercizi assegnati.
Espressioni condizionali
Per costruire unapplicazione occorre compilare il file (o i file se più duno) che contengono il testo del programma (file sorgente) Il risultato sono uno.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Il nostro schiavetto…. ALUALU REGISTERS MEMORIA ControlUnit mPC Instruction register …come istruirlo!
void binario(int n); …………………
Creazione progetto in C++/DEV
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione VII Il compilatore e le sue opzioni Programmazione di Calcolatori: il compilatore e le sue.
INTERFACCIAMENTO ASSEMBLY - C++
Lo sviluppo top down Le funzioni
Introduzione al C Davide Gadia.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
L’ambiente di sviluppo Visual C++ Docente del corso Prof. Marcello CASTELLANO.
Programmazione in linguaggio C
Dal problema all’ algoritmo
Programmazione Assembly
Introduzione Laboratorio di Calcolo Corso di Laurea in Fisica Università degli Studi di Roma “La Sapienza”
Scrivere e compilare programmi
Lezione I Alessandro Dal Palu’ Laboratorio di Programmazione.
Concetti Fondamentali sulla Programmazione
Il software Claudia Raibulet
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Fabio Scotti – Università degli Studi di Milano 1 Lezione 1 e 2 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Librerie… Marco D. Santambrogio – Ver. aggiornata al 20 Luglio 2015.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
CORRISPONDENZA C++ ASSEMBLER
Transcript della presentazione:

7) Creazione di un programma eseguibile

Livelli di programmazione Si può programmare a diversi livelli utilizzando linguaggi caratterizzati da diversi livelli di astrazione: più basso è il livello più vicino alla macchina (e ai suoi dettagli costruttivi) è il linguaggio. Un programma scritto utilizzando il linguaggio proprio di un livello di programmazione è destinato ad essere tradotto (da un programma traduttore) in un linguaggio di livello inferiore o ad essere eseguito direttamente (da un programma intereprete). Lab. Calc. I AA2002/03 - cap.7

Codice C++ Lab. Calc. I AA2002/03 - cap.7

Esempio di codice in C++ #define SCALA 2 int main( ) { float x=10.; float y=20.; float z; z=x+y; z*=SCALA; return 1; } Lab. Calc. I AA2002/03 - cap.7

Codice C++ Precompilatore Lab. Calc. I AA2002/03 - cap.7

Codice C++ Codice C++ Precompilatore Lab. Calc. I AA2002/03 - cap.7

Esempio di codice in C++ precompilato int main( ) { float x=10.; float y=20.; float z; z=x+y; z*=2; return 1; } Lab. Calc. I AA2002/03 - cap.7

Codice Codice compilatore C++ C++ Precompilatore Lab. Calc. I AA2002/03 - cap.7

Codice Codice compilatore C++ C++ Precompilatore Codice assembly Lab. Calc. I AA2002/03 - cap.7

Esempio di codice assembly .file "prog2.cxx" .version "01.01" gcc2_compiled.: .text .align 4 .globl main .type main,@function main: pushl %ebp movl %esp,%ebp subl $12,%esp movl $1092616192,-4(%ebp) movl $1101004800,-8(%ebp) flds -4(%ebp) fadds -8(%ebp) fstps -12(%ebp) flds -12(%ebp) fld %st(0) faddp %st,%st(1) fstps -12(%ebp) movl $1,%eax jmp .L1 .align 4 xorl %eax,%eax jmp .L1 .align 4 .L1: leave ret .Lfe1: .size main,.Lfe1-main .ident "GCC: (GNU) 2.7.2.3.f.1" Lab. Calc. I AA2002/03 - cap.7

Codice Codice compilatore C++ C++ Precompilatore Codice assembler assembly Lab. Calc. I AA2002/03 - cap.7

Codice Codice compilatore C++ C++ Precompilatore Codice Codice assembler Codice assembly Codice macchina Lab. Calc. I AA2002/03 - cap.7

Esempio di codice macchina 10011010110111011010011010001011 10011011000001011010011010001111 11111010110001011011111011011001 Lab. Calc. I AA2002/03 - cap.7

Codice Codice compilatore C++ C++ Precompilatore Codice Codice assembler Codice assembly Codice macchina linker Lab. Calc. I AA2002/03 - cap.7

Codice Codice compilatore C++ C++ Precompilatore Codice Codice assembler Codice assembly Codice macchina linker Codice eseguibile Lab. Calc. I AA2002/03 - cap.7

Codice Codice compilatore C++ C++ Precompilatore Codice Codice assembler Codice assembly Codice macchina linker Codice eseguibile Lab. Calc. I AA2002/03 - cap.7

Linker Riprendendo il nostro esempio supponiamo di volere visualizzare il risultato finale. Abbiamo già visto che a tale scopo dobbiamo usare la direttiva del precompilatore #include <iostream.h> per definire cout e poi dopo avere calcolato z aggiungere l'istruzione cout << "risultato " << z << endl; Ma dove si trova il codice di ostream? Nella libreria (dall'inglese library: biblioteca) del C++ che contiene il codice macchina per tutti gli oggetti predefiniti. Il linker cerca automaticamente il codice cui riferito dall'utente e non presente nel codice sorgente nelle librerie di sistema. Lab. Calc. I AA2002/03 - cap.7

Linker E se si volesse usare del codice non di sistema? Per esempio dell'altro codice già scritto dall'utente? Il linker accetta in input più di un file e quindi è sufficiente passagli oltre al programma utente anche gli altri file o librerie contenenti il codice che vuole riutilizzare. Lab. Calc. I AA2002/03 - cap.7

Estensione dei file Nella maggior parte dei sistemi operativi il nome dei file è costituito da due parti separate da un punto: nome.estensione Il nome può essere un qualunque identificatore valido, l'estensione in genere identifica il tipo di file e i programmi che accettano file in input generalmente controllano l'estensione per verificarne il tipo. Le estensioni dipendono dal sistema operativo e dai programmi applicativi. In questo corso useremo l'estensione .cc per i file che contengono codice sorgente C++ (estensioni valide sono anche cxx e cpp). Lab. Calc. I AA2002/03 - cap.7

Uso di g++ (compilatore GNU) g++ esempio.cc applica precompilatore, compilatore, assembler e linker e produce l'eseguibile a.out g++ -o esempio esempio.cc chiama l'eseguibile esempio g++ -o esempio esempio.o altrofile.o libreria.a invoca il linker, cercando i riferimenti esterni in altrofile.o e in libreria.a Lab. Calc. I AA2002/03 - cap.7

Uso di g++ (compilatore GNU) Possiamo anche effettuare i singoli passaggi intermedi usando le opzioni di g++ (consultabili con man g++ ) g++ -E esempio.cc invoca solo il precompilatore (e non salva l'output) g++ -S esempio.cc invoca precompilatore e compilatore e salva il file assembly in esempio.s g++ -c esempio.cc invoca precompilatore, compilatore e assembler e salva il file in linguaggio macchina in esempio.o, può agire anche sul file esempio.s, invocando solo l'assembler. Lab. Calc. I AA2002/03 - cap.7

Uso di g++ (compilatore GNU) Comando Azione Files accettati in input File di output g++ Produce l'eseguibile .cc (sorgente) .s (assembly) .o (linguaggio macchina) a.out, modificabile con l'opzione –o g++ -c Produce il file in linguaggio macchina g++ -s Produce il file in assembly g++ -E Applica il precompilatore Output su schermo Lab. Calc. I AA2002/03 - cap.7

Uso di bcc (compilatore Borland per MS DOS) Output su file .I .cpp (sorgente) Applica il precompilatore cpp .ASM (assembly) Produce il file in assembly bcc -S .obj (linguaggio macchina) Produce il file in linguaggio macchina bcc -c .exe (stesso nome file in ingresso) modificabile con l'opzione –e Produce l'eseguibile bcc File di output Files accettati in input Azione Comando Per poter compilare un file generato dal precompilatore usare prima: cpp -P- sorgente.cpp e poi: bcc –P sorgente.I (l’opzione –P permette di compilare sorgenti con estensione diversa da .cpp) Lab. Calc. I AA2002/03 - cap.7