G. Amodeo, C. Gaibisso Programmazione di Programmazione di Calcolatori Calcolatori Lezione VII Il compilatore e le sue opzioni Programmazione di Calcolatori: il compilatore e le sue opzioni 1
G. Amodeo,C. Gaibisso Programmazione di Programmazione di
CalcolatoriCalcolatori
Lezione VIIIl compilatore e le sue
opzioni
Programmazione di Calcolatori: il compilatore e le sue opzioni 1
G. Amodeo,C. Gaibisso
I passi della compilazioneI passi della compilazione
1. Preprocessing1.1 rimozione dei commenti1.2 interpretazione delle
direttive per il preprocessore
2. Compilazione2.1 Generazione del codice
assembler2.2 Generazione dei moduli
oggetto
3. Linking
Programmazione di Calcolatori: il compilatore e le sue opzioni 2
G. Amodeo,C. Gaibisso
Il preprocessingIl preprocessing
Programmazione di Calcolatori: il compilatore e le sue opzioni 3
rimozione dei commenti
interpretazione delle direttive per il preprocessore
G. Amodeo,C. Gaibisso
CompilazioneCompilazione
Programmazione di Calcolatori: il compilatore e le sue opzioni 4
• Generazione del codice assembler:
traduzione del codice sorgente ricevuto dal preprocessore in linguaggio assembler
G. Amodeo,C. Gaibisso
CompilazioneCompilazione
Programmazione di Calcolatori: il compilatore e le sue opzioni 5
MOV AL, #61h
• Esempio:
memorizza il valore esadecimale 61 nel registro di nome AL
• Linguaggio assembler:linguaggio di basso livello che fornisce un minimo livello di astrazione (utilizzo di codici mnemonici in luogo di codici numerici) rispetto alle istruzioni eseguibili dal microprocessore
G. Amodeo,C. Gaibisso
CompilazioneCompilazione
Programmazione di Calcolatori: il compilatore e le sue opzioni 6
• Esempio:
#61hMOV AL
• Generazione dei moduli oggetto :traduzione del codice assembler in una sequenza di istruzioni macchina non ancora eseguibili a causa, anche, di riferimenti esterni
MOV AL, #61h
10110000 01100001
G. Amodeo,C. Gaibisso
CompilazioneCompilazione
Programmazione di Calcolatori: il compilatore e le sue opzioni 7
• Riferimenti esterni:
minnieMOV ALMOV AL, minnie
10110000 ????????
riferimento esternoal modulo
G. Amodeo,C. Gaibisso
CPU: l’architetturaCPU: l’architettura
Architettura Hw dei sistemi 8
Program Counter (16 bit)
+1
Bu
ffer
In
dir
izzi
(16 b
it)
Bu
ffer
Dati
(8 b
it)
W(8
bit
)Z
(8 b
it)
Circuitidi
Controllo
Registro Istruzione (8 bit)
CU
Registro Aritmetico A Registro Aritmetico B
ALU
Sommatore
Memoria
Contiene l’indirizzo in memoria dell’istruzione in esecuzione
Registro contenente l’indirizzo della locazione interessata dalla prossima operazione di lettura/scrittura
Memorizza:1. Il risultato di
una elaborazione da parte della ALU
2. Il risultato di un’operazione di lettura
3. Un dato da memorizzare
Contiene il codice operativo dell’istruzione in esecuzione
Memorizzano dati o indirizzi durante le operazioni interne
G. Amodeo,C. Gaibisso
LinkingLinking
Programmazione di Calcolatori: il compilatore e le sue opzioni 9
• Linker:programma che combina uno o più moduli oggetto generati durante la fase di compilazione in un unico file eseguibile
• Problema:esistenza all’interno dei moduli oggetto di riferimenti ad altri moduli (chiamate di funzioni, salti, variabili, …)
G. Amodeo,C. Gaibisso
Riconoscere i fileRiconoscere i file
Programmazione di Calcolatori: il compilatore e le sue opzioni 10
Estensione Descrizione
.c file sorgente
.h file generalmente “copiato” dal preprocessore all’interno di un file sorgente
.o modulo oggetto
G. Amodeo,C. Gaibisso
Opzioni del compilatoreOpzioni del compilatore
Programmazione di Calcolatori: il compilatore e le sue opzioni 11
• Determinare la versione del compilatore :
gcc -v
G. Amodeo,C. Gaibisso
Opzioni del compilatoreOpzioni del compilatore
Programmazione di Calcolatori: il compilatore e le sue opzioni 12
• Assegnare un nome al file eseguibile:
gcc nome_sorgente –o nome_eseguibile
G. Amodeo,C. Gaibisso
Opzioni del compilatoreOpzioni del compilatore
Programmazione di Calcolatori: il compilatore e le sue opzioni 13
• Generazione modulo oggetto:gcc –c nome_sorgente
G. Amodeo,C. Gaibisso
Opzioni del compilatoreOpzioni del compilatore
Programmazione di Calcolatori: il compilatore e le sue opzioni 14
• Chiamare il preprocessoregcc –E nome_sorgente –o nome_destinazione
G. Amodeo,C. Gaibisso
Contenuto di stdio.h
Opzioni del compilatoreOpzioni del compilatore
Programmazione di Calcolatori: il compilatore e le sue opzioni 15
G. Amodeo,C. Gaibisso
Messaggi del compilatoreMessaggi del compilatore
Programmazione di Calcolatori: il compilatore e le sue opzioni 16
1. Messaggi di errore: indicativi di errori che
impediscono la generazione dell’eseguibile
interrompono la compilazione
2. Warning: indicativi di condizioni che
potrebbero, tra l’altro, inficiare la portabilità del codice
non interrompono la compilazione
G. Amodeo,C. Gaibisso
Messaggi di erroreMessaggi di errore
Programmazione di Calcolatori: il compilatore e le sue opzioni 17
G. Amodeo,C. Gaibisso
WarningWarning
Programmazione di Calcolatori: il compilatore e le sue opzioni 18
• Utilizzare il massimo livello di warning:
gcc –Wall nome_sorgente
G. Amodeo,C. Gaibisso
WarningWarning
Programmazione di Calcolatori: il compilatore e le sue opzioni 19
• Utilizzare il massimo livello di warning:
gcc –Wall nome_sorgente
G. Amodeo,C. Gaibisso
WarningWarning
Programmazione di Calcolatori: il compilatore e le sue opzioni 20
G. Amodeo,C. Gaibisso
WarningWarning
Programmazione di Calcolatori: il compilatore e le sue opzioni 21