• Non ci sono risultati.

Dalla precedente lezione

N/A
N/A
Protected

Academic year: 2021

Condividi "Dalla precedente lezione"

Copied!
10
0
0

Testo completo

(1)

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

(2)

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

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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.

Riferimenti

Documenti correlati

• Compilatore: opera la traduzione di un programma sorgente scritto in un linguaggio ad alto livello in un programma oggetto scritto in un linguaggio direttamente eseguibile

sarò portato a credere che la psiche non sia così contraria, alla precisione ed alla esattezza. Non cre- do al sorriso imperturbabile e misterioso della psiche, ai suoi

La classe di memoria automatica è relativa a quegli oggetti locali ad un blocco (funzione o programma) che viene liberata non appena si raggiunge la fine di quel blocco. La classe

eseguibile , un programma scritto in un , un programma scritto in un linguaggio ad alto livello deve essere linguaggio ad alto livello deve

Il doppio di un numero, diminuito di 9, è uguale al numero stesso, aumentato di 3. Un numero aggiunto al suo successivo dà per

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una