Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica
5 – LA RAPPRESENTAZIONE DELLE ISTRUZIONI
Marco Lapegna
Dipartimento di Matematica e Applicazioni Universita’ degli Studi di Napoli Federico II wpage.unina.it/lapegna
Marco Lapegna –
Laboratorio di Programmazione
5. Rappresentazione istruzioni
Dalla precedente lezione
Memoria: supporto per la memorizzazione di
istruzioni e dati
Rappresentazione dei dati
• Tipo intero
• Tipo alfanumerico
• Tipo logico
• Tipo reale
Rappresentazione delle istruzioni
Marco Lapegna –
Laboratorio di Programmazione
5. Rappresentazione istruzioni
Il linguaggio macchina
Nelle locazioni di memoria e’ possibile memorizzare solo sequenze di bit L’insieme di istruzioni rappresentate come sequenze di bit e’ detto
LINGUAGGIO MACCHINA
(unico linguaggio direttamente eseguibile dal calcolatore)
Osservazione
Il linguaggio macchina di un calcolatore non e’ eseguibile su calcolatori con architettura differente
Marco Lapegna –
Laboratorio di Programmazione
5. Rappresentazione istruzioni
Esempio
Fase 1: 2x4=8
Fase 2: 8+3=11
Se si vuole eseguire:
2 x 4 + 3 e’ necessario:
Fase 1:
Prelevare i dati (2 e 4) da 1000 e 1001 Eseguire 2 x 4
Memorizzare il risultato (8) in 1100
Fase 2:
Prelevare i dati (8 e 3) da 1100 e 1010 Eseguire 8 + 3
Memorizzare il risultato (11) in 1110
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Per la Fase 1 e’ necessario specificare:
• Gli indirizzi degli operandi
• L’operazione da eseguire
• L’indirizzo del risultato
Per la Fase 2 e’ necessario specificare:
• Gli indirizzi degli operandi
• L’operazione da eseguire
• L’indirizzo del risultato
Stessa struttura (cambiano solo i riferimenti)
Istruzione a 3 indirizzi
Struttura di istruzione a 3 indirizzi
esempio
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Supponendo che le operazioni siano specificate dai seguenti codici operativi:
• Addizione: c.o. = 0001
• Moltiplicazione: c.o. = 0010
Le istruzioni in linguaggio macchina per le operazioni richieste sono quindi
0010 1000 1001 1100 0001 1100 1010 1110
Osservazioni
• Le istruzioni sono caricate una alla volta nell’unita’ di controllo
• I codici operativi sono decodificati nell’unita’ di controllo
• Esistono anche linguaggi macchina con istruzioni a 1 o 2 indirizzi
esempio
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
• Non e’ portabile su altri calcolatori
• Parecchie istruzioni anche per semplici operazioni
• Assolutamente non leggibile per i non addetti ai lavori
• Soggetto ad errori di programmazione
• Necessita di una profonda conoscenza dell’hardware
Caratteristiche del linguaggio macchina
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Piu’ semplicemente e’ possibile sostituire:
• Il codice operativo con un nome che ne ricordi la funzione (es. add, mult,..)
• L’indirizzo con un nome che viene dato alla parola di memoria
Linguaggio assemblativo (o Assembly)
mult A B P add P C S
Stessa struttura dell’istruzione, ma piu’ comprensibile!!!
Passaggio dal linguaggio macchina al linguaggio assembly
Il linguaggio assemblativo
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Ovviamente un programma scritto in linguaggio assemblativo non e’
eseguibile direttamente dal calcolatore
E’ necessario un programma che traduce il linguaggio assemblativo
in linguaggio macchina
(programma assemblatore o Assembler)
Fase 1: traduzione del programma assembly in linguaggio macchina
Fase 2: esecuzione del programma in linguaggio macchina
Fasi per l’esecuzione di un programma scritto in linguaggio assembly
Il programma assemblatore
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Il programma assemblatore
• Preleva una istruzione in assembly dalla memoria (dati dell’assemblatore)
• Sostituisce mediante una tabella il nome dell’operazione con il
corrispondente codice operativo
• Sostituisce al nome delle parole in memoria il corrispondente indirizzo
• Memorizza l’istruzione in linguaggio macchina (risultati dell’assemblatore)
Funzionamento del programma assemblatore
Il programma assemblatore
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Il linguaggio assemblativo risolve alcuni problemi del linguaggio macchina (leggibilita’, maggiore facilita’ di programmazione)
Rimangono altri problemi
(profonda dipendenza dalla macchina, codici lunghi anche per semplici problemi)
Gia’ dagli anni ‘50 del XX sec. sono nati linguaggi orientati alle applicazioni
• FORTRAN (1954): FORmula TRANslator, per usi scientifici
• LISP (1959): LISt Processor, per l’intelligenza artificiale
• COBOL (1960): COmmon Business-Oriented Language, per usi commerciali
Linguaggi ad alto livello
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Classificabili generalmente in:
• Imperativi
(Assembly, Fortran, Cobol, Basic, APL,..)
• Strutturati
(C, pascal, ADA, Fortran 90,…)
• Ad oggetti
(C++, Java, PHP, Pyton,…)
• Paralleli
(Occam, HPF Fortran, Linda,…)
• Di scripting
(Perl, Javascript, PHP, Pyton, …)
• Per database
(Progress, Oracle,…)
Linguaggi ad alto livello
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Le due istruzioni in linguaggio assembly
mult A B P add P C S
possono essere riscritte in linguaggio ad alto livello come:
• S = A*B + C (Fortran)
• s := a*b + c; (Pascal)
• s = a*b + c; ( linguaggio C )
Meno istruzioni e piu’ vicino ad un linguaggio matematico
Esempi
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Analogamente al linguaggio assembly
Anche i linguaggi ad alto livello hanno bisogno di programmi traduttori
per la traduzione in linguaggio macchina
Due tipi di programmi traduttori
• Compilatori
• Interpreti
Compilatori e interpreti
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
L’interprete:
• Preleva un’istruzione dalla memoria
• La traduce in linguaggio macchina
• esegue immediatamente l’istruzione, prelevando dalla memoria i dati necessari
In definitiva l’esecuzione del programma avviene in una unica fase, che fornisce
direttamente il risultato
Funzionamento di un interprete
interpreti
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Il compilatore
• Preleva un’istruzione dalla memoria
• La traduce in linguaggio macchina
• La conserva in memoria
In definitiva l’esecuzione del programma avviene in due fasi
• Fase 1: traduzione del programma scritto in linguaggio ad alto livello in linguaggio macchina
• Fase 2: esecuzione del programma scritto in linguaggio macchina
Funzionamento di un compilatore
interpreti
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Con l’interprete l’esecuzione e’ costantemente sotto controllo dell’interprete: e’
possibile fornire un’istruzione alla volta e controllare subito se e’ corretta (utile in fase di debugging o per ambienti didattici)
Le due fasi distinte richieste dal compilatore, rendono possibile la memorizzazione del programma scritto in linguaggio macchina, che e’ quindi possibile eseguire
numerose volte senza perdere il tempo della traduzione (maggiore efficienza)
I linguaggi per il calcolo scientifico (C e Fortran) sono linguaggi compilati
Differenze tra compilatori ed interpreti
Marco Lapegna –
Laboratorio di Programmazione 5. Rappresentazione istruzioni
Algoritmo: sequenza finita di istruzioni non ambigue per la risoluzione di una classe di problemi
Programma: traduzione di un algoritmo in un linguaggio di programmazione
Fasi per la risoluzione di un problema con il calcolatore:
1. Sviluppo dell’algoritmo
2. Traduzione in un linguaggio di programmazione
3. Traduzione in linguaggio macchina mediante il compilatore 4. Esecuzione
In conclusioine
Marco Lapegna –
Laboratorio di Programmazione
5. Rappresentazione istruzioni
Un po’ di storia (5)
F. Corbato’ (courtesy of Computer History Museum)
F. Corbato’ al MIT nel 1965 (courtesy of Computer History Museum)
Fernando Corbato’ (1926)
• Americano, laureato in fisica al Caltech, comincia a lavorare al centro di calcolo del MIT nel 1956
• Nel 1964 pone le basi e dirige lo sviluppo del primo sistema operativo moderno: il Multics progenitore di Unix e Linux
• Il Multics aveva parecchie caratteristiche presenti ancora oggi nei s.o., tra cui il time sharing e la multiprogrammazione che permettono l’accesso contemporaneo al sistema da parte di piu’ utenti
• Prima del Multics l’accesso al computer era consentito ad un utente alla volta con programmi che potevano durare anche giorni.
• Riceve numerosi premi tra cui il Turing Award (1990) per i suoi contributi allo sviluppo dei sistemi operativi.