Algoritmi, Strutture Dati e Programmi UD 2.c: Linguaggi a Basso Livello Prof. Alberto Postiglione Dipartimento di Scienze della Comunicazione AA 2007-2008 Università degli Studi di Salerno LINGUAGGI DI PROGRAMMAZIONE A BASSO LIVELLO Curtin, cap. 12.2 1 I LIVELLI DEI LINGUAGGI Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Ma che cos’è un programma? e i on z ica un m o aC l l E’ una procedura o meglio un algoritmo che viene eseguito de ze n dalla macchina le permette di portare a ctermine le ie S i operazioni che le abbiamo richiestoto d en im t r pa Di Il programma per essere comprensibile deve dare E’ un insieme di istruzioni istruzioni o fare dichiarazioni usando un linguaggio che la macchina possa capire UD 2.c # 4 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 2 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) I linguaggi di programmazione Possono essere più vicini al modo di pensare del programmatore o a “quello” della macchina ne zio a nic mu o C a el l d e nzdi ambiguità Sono scritti in una lingua coerente e priva e i Sc di o t en m i Comprenderne i principi è semplice, ma diventare un bravo rt pa Di programmatore lo è meno Maggiore è la distanza del linguaggio dal linguaggio macchina e la vicinanza al linguaggio naturale, più “alto” sarà il “livello” del linguaggio # 5 UD 2.c Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) I “livelli” dei linguaggi e Linguaggi ad altissimo livello (dichiarativi): si dice zion e a al computer cosa si vuole senza specificare come unic m o deve fare per operare (es.: SQL, Lisp, Prolog,a Cecc.) el l d ze modo Linguaggi ad alto livello: più vicini al nostro ien c S più facili da di comprendere e impostare problemi, di o t imparare e da trasferire e da ‘portare’ su un altro en m i t computer (es.: HTML, Java,aC++, Visualbasic, ecc.) r p Di Linguaggi a basso livello: vicini al linguaggio macchina e all’architettura fisica del computer (es.: Assembler) Linguaggio macchina: usa solo 0 e 1 ed è comprensibile direttamente dall’hardware, ma molto difficile per l’uomo UD 2.c # 6 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 3 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) I “livelli” dei linguaggi a el l d e nz e i Sc di o t en m i rt pa Di # 7 UD 2.c Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) I “livelli” dei linguaggi e i on z ica ¾ stringhe di bit corrispondenti ad istruzioni, operandi, etichette un m o ed indirizzi di memoria. aC l l de ¾ Strettamente legato alla macchina. ze n ie ¾ Persone in grado di manipolare simboli (parole) Sc più che sequenze di i od cifre nt e im rt Linguaggio assembler a p Di ¾ Rappresentazione simbolica del linguaggio macchina, più comprensibile perché utilizza simboli invece di stringhe di bit. Linguaggio macchina ne zio a nic mu o C Linguaggi di alto livello ¾ Linguaggio simile a quello naturale, il programmatore si astrae dai dettagli della macchina. UD 2.c # 8 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 4 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) I “livelli” dei linguaggi a el l d e nz e i Sc di o t en m i rt pa Di ne zio a nic mu o C int main(int argc, char *argv[]) { int i; int sum=0; for (i=0; i <= 100; i++) sum = sum + i; printf(“The sum from 0 .. 100 is %d\n”, sum); } UD 2.c # 9 Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Procedurale vs. Dichiarativo e e Linguaggi procedurali: Forniscono al computer una serie i on z ca di ordini su cosa debba fare e in quale circostanza.muni o a C esiste è L’aspetto della descrizione del problema, quando l l de minimizzato: il computer “non sa” niente enze ci e ¾ Procedurali: Cobol, Fortran, Pascal, Basic,diCS to en m ti ar p i Linguaggi dichiarativi: Descrive, dichiara quali sono i dati D del problema, fornisce le regole che si possono seguire e lascia che sia il computer a decidere come agire. Possono essere più faticosi per il computer perché deve derivare da solo le procedure da adottare UD 2.c # 10 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 5 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Fra i due litiganti…Object oriented e La caratteristica principale degli OOL è la modularità: zion e a nic certe porzioni di programma si possono usare in varie u om aC occasioni l l e e ed z E’ utile per costruire tali programmi partire ien dagli oggetti Sc i e dalle loro proprietà interne e di relazione con gli altri d to n e oggetti im rt a p La programmazione a oggetti Di funziona bene nei sistemi operativi grafici (a icone) Ognuno degli elementi di Windows, per es. icone, finestre, pulsanti, menù sono altrettanti oggetti che hanno proprietà e relazioni gli uni con gli altri UD 2.c # 11 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno L’INSIEME DELLE ISTRUZIONI DEL PROCESSORE 6 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) L’Insieme delle Istruzioni del Processore e ne Ogni processore è in grado di eseguire solo poche zio a nic istruzioni elementari quali: mu om aC ¾ Somma di due numeri (già la somma di tre numeri viene l l e ed effettuata tramite due somme elementari) z ien ¾ Confronto tra due numeri con individuazione Sc del fatto che ci sia i d o meno differenza (non tutti i processori to sanno distinguere in n e im precede l’altro) modo immediato, invece, quale deirtdue a p Di di una parola di qualche posizione ¾ Spostamento dei bit all’interno a destra o a sinistra. ¾ poche altre ancora … # 13 UD 2.c Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) L’Insieme delle Istruzioni del Processore e i on z ica un m o aC l l I linguaggi sono come dialetti regionali derivati da de ze n un’unica radice ie Sc i od nt e im Perché? rt a p Di ¾ Costruiti su tecnologie basate sugli stessi principi fondamentali Ogni famiglia di calcolatori ha un proprio linguaggio ¾ Esistono operazioni base comuni Apprendere un linguaggio Æ facile apprendere gli altri UD 2.c # 14 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 7 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) L’Insieme delle Istruzioni del Processore e Ogni istruzione del processore è composta da più zion e a nic operazioni elementari che accedono in momenti successivi u om aC alle risorse del computer (ad esempio prima alellcontenuto ed dell’istruzione, poi alla memoria centrale,epoi nz all’ALU …). ci e ¾ Quasi mai la singola istruzione del processore i S è eseguita in un solo d o nt la somma di due numeri ciclo di clock. Ad esempio, per effettuare e im 9 Bisogna leggere il primo addendoart p i D 9 Bisogna leggere il secondo addendo 9 Bisogna eseguire la somma 9 Bisogna memorizzare la somma ¾ E potrebbe darsi che alcune di queste mini-operazioni richieda più cicli di clock per essere completata. UD 2.c # 15 Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) L’Insieme delle Istruzioni del Processore e i on z ica un m o aC l l Vocabolario di un calcolatore: Insieme delledeistruzioni. ze ien Quanto più esso è povero c S di ¾ tante più parole saranno necessarie pertodescrivere un concetto, en m ¾ ma tanto più esse saranno “corte”rtei quindi veloci da eseguire, in pa quanto richiedono pochi impulsi Di di clock per essere completate. Parole del linguaggio: Istruzioni UD 2.c # 16 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 8 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Tipi di Istruzioni ne zio a nic ¾ Esempio: Valore assoluto, Somma, AND, Divisione, Moltiplicazione, mu o C NOR, OR, XOR, shift, rotazione, sottrazione lla e d Trasferimento dati ze n e ci ¾ Caricamento di registri dalla memoria e viceversa. iS d o nt e Confronto im rt pa ¾ Confronto tra due dati. Non effettuano azioni. i D Logico-aritmetiche ¾ Esempio: Set less than Salto ¾ Può essere assoluto o condizionato; se è condizionato è spesso preceduto da istruzione di confronto. ¾ Esempio: Branch if equal/not equal, Jump to register, Jump # 17 UD 2.c Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Tipi di Istruzioni e i on z ica ¾ Deve salvare tutte le informazioni correnti ed eseguire ununaltro m o pezzo di programma (subroutine). aC l l e ed ¾ L’istruzione di ritorno da subroutine ritorna ad zeseguire il n ie c programma da dove lo aveva lasciato precedentemente. S di o t en im t r Istruzioni di I/O pa Di ¾ Trasferire o ad acquisire dati dall’esterno del sistema. Simili alle istruzioni di trasferimento dati, utilizzano un codice diverso e particolari indirizzi. Salto a subroutine, ritorno da subroutine Istruzioni varie ¾ Ad esempio chiamate di sistema, gestione delle interruzioni, ecc… UD 2.c # 18 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 9 LINGUAGGIO MACCHINA Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Linguaggio Macchina e Per gestire hardware bisogna parlare il linguaggio delzion e a nic calcolatore mu om aC l l de ze n Linguaggio perché presenta ie Sc i ¾ Parole (cioè le istruzioni) od nt e ¾ Sintassi (regole di combinazione delle im parole per generare frasi rt a p corrette) Di Sintassi di un linguaggio di programmazione ¾ Molto semplice (poche regole) ¾ Molto rigorosa (per evitare ogni tipo di ambiguità) UD 2.c # 20 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 10 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Istruzioni in Linguaggio Macchina e ne In un linguaggio macchina, ogni istruzione è una sequenza zio a ic di cifre binarie un om C lla e d ¾ Perfettamente non ambiguo per la macchina nze e ci iS d o nt e Un’istruzione è formata da tim ar p i ¾ un codice operativo D ¾ Totalmente illeggibile per l’uomo ¾ uno o più operandi 9 Molti processori mantengono costante il numero di operandi per ogni istruzione (ad esempio le istruzioni aritmetiche ammettono sempre e solo 3 operandi) UD 2.c # 21 Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Istruzioni in Linguaggio Macchina e ne Normalmente, gli operandi risiedono in Memoria centrale zio ica un m o aC l l In fase di esecuzione ogni operando deve essere portato de ze n dalla memoria centrale in un registro delcieprocessore S di o t en im t r pa Di UD 2.c # 22 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 11 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Istruzioni in Linguaggio Macchina ne Istruzione in LM è una successione di 32 bits Æ zio a ic rappresentabile da un numero un om ¾ La funzione di questo numero è di codifica (rappresentazione di aC l l informazioni), non è un numero vero e proprio e de z ien c S di to Ogni istruzione è scomponibile inenframmenti più piccoli, m i ognuno dei quali rappresenta un rt tipo di informazione ipa D (codice operativo, una costante, il numero di un registro). Le istruzioni si distinguono per il valore contenuto nel primo campo In base ad opcode l’hardware sa come trattare il resto dell’istruzione UD 2.c # 23 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Istruzioni in Linguaggio Macchina e L’istruzione che somma due numeri che sono stati già zion e ca trasferiti dalla RAM nei registri numero 17 e 18mueni o memorizza il risultato nel registro numero 8ellaèC d ze rappresentabile come segue: n e ie Sc i 00000010001100100100000000100000 od nt e im rt a p Di 000000 6 bits 10001 5 bits 10010 5 bits 01000 5 bits 00000 5 bits 100000 6 bits 17 18 8 0 32 In decimale: 0 UD 2.c # 24 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 12 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Linguaggi macchina: problemi ne zio a nic ¾ Occorre conoscere l’architettura della macchina per scrivere mu o C programmi lla e d ¾ I programmi non sono trasportabili ze n e ci ¾ I programmatori si specializzano nel cercare i S efficienza su una d o macchina specifica, anziché concentrarsi nt sul problema e im rt pa i D Sono specifici della macchina Istruzioni e operandi sono rappresentati in forma numerica ¾ I codici sono poco leggibili e quindi difficilmente modificabili ¾ I programmi sono facilmente soggetti ad errori # 25 UD 2.c Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Linguaggio Macchina e Il Linguaggio Macchina non è facilmente “utilizzabile” zion e ca Binary machine language program (for MIPS) ic un m o aC l l de 00000000101000010000000000011000 ze n 00000000100011100001100000100001 ie Sc 10001100011000100000000000000000 i od 10001100111100100000000000000100 nt e 10101100111100100000000000000000 im rt 10101100011000100000000000000100 a p Di 00000011111000000000000000001000 Un programmatore utilizza una versione più “ad alto livello” del LM: il linguaggio Assembler UD 2.c # 26 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 13 LINGUAGGIO ASSEMBLER Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Linguaggio Assembler e ne Linguaggio simbolico che utilizza simboli invece che bits. zio ica ¾ I simboli associano nomi ai codici operativi o i riferimentiunai m o registri. aC l l de ¾ Permette di utilizzare etichette invece che indirizzi fisici ze n ie c S di o t Le istruzioni in Assembler sono quasi en tutte in im t r corrispondenza 1<->1 con quelle pa in linguaggio macchina Di UD 2.c # 28 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 14 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Programma in Linguaggio Macchina e Calcolo e stampa della somma dei quadrati dei numeri zion e a nic compresi tra 1 e 100. u m Programma in LM Æ UD 2.c # 29 m Co Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Modificata il 22/11/2007 a el l d e nz e i Sc di o t en m i rt pa Di Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Programma in Linguaggio Assembler e i on z ica un m o aC l l de ze n ie Sc i od nt e Operazioni e operandi sono im rt a rappresentati in maniera Dip Una prima rappresentazione simbolica del programma in LM visto in precedenza è la seguente Æ simbolica. UD 2.c # 30 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 15 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Programma in Linguaggio al alto livello e Il formato precedente è ancora difficile da seguire zion e a nic perché: u m om aC ¾ Usa molte piccole operazioni per eseguire compiti semplici l l e e d con z ¾ I costrutti per il controllo del flusso sono realizzati ien confronti e salti (più difficili da leggere) i Sc d to n e im rt a p Di UD 2.c # 31 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Programma in Linguaggio al alto livello Linguaggio “C”: Linguaggio “Pascal”: Program somma; Var i, somma : integer; e i on z main (int argc, char *argv[]) ica un { m o int i; aC l l de int sum = 0; zei = i + 1) sum = sum + i; n for (i = 0; i <=e100; i printf ("The Scsum from 0 .. 100 is %d\n", sum); i } od nt e im rt a p Di #include <stdio.h> int Begin somma := 0; for i:=1 to 100 do somma := somma + i; write (‘La somma dei primi 100 numeri vale: ‘, somma); End. UD 2.c # 32 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 16 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Esempio 2 PASCAL: x := h + x ASSEMBLER(*) : a el l d lw 8, 1200 e nz e i add 8, 18, 8 Sc di sw 8, 1200 o t en m i LINGUAGGIO MACCHINA(*) r(binario) t 100011 000000 101011 01001 10010 01001 ne zio a nic mu o C ar 01000 Dip 0000 0100 1011 0000 01000 01000 00000 010000 01000 0000 0100 1011 0000 Cioè: 10001101001010000000010010110000 00000010010010000100000000010000 10101101001010000000010010110000 (*) Si suppone che il registro 8 contiene x e che il registro 18 contiene h UD 2.c # 33 Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Assemblatore e e Uno strumento che traduce programmi scritti nel i on z a nic linguaggio assembler in linguaggio macchina. mu om aC l l de ze n L’assembler ie Sc i ¾ legge un file sorgente in assembler od nt e ¾ produce un file oggetto contenente im insieme di istruzioni in LM, di rt a p dati e di informazioni necessarie Di per il caricamento in memoria delle istruzioni UD 2.c # 34 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 17 Modificata il 22/11/2007 Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Quando usare un linguaggio Basso Livello e ne Velocità di esecuzione o occupazione di memoria sono zio a nic critiche mu om a C (anche ¾ programmazione di controller di processi e macchinari l l e e d auto) real-time) o computer embedded (es controllo freni z ien ¾ programmazione di apparati speciali: Sc i d 9 Portable Devices to n e 9 Telefonini cellulari im rt a p 9 Schede Smart Card, Di 9… Approccio ibrido: parti “critiche” di un programma in Assembler e le altre in HLL Accedere a caratteristiche hardware non accessibili ad un linguaggio ad alto livello. # 35 UD 2.c Modificata il 22/11/2007 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno Algoritmi, Strutture Dati e Programmi: La Programmazione (Linguaggi a Basso Livello) Svantaggi di un linguaggio a Basso Livello e e on I programmi sono più lunghi della versione in linguaggioziad ica alto livello, spesso di un fattore moltiplicativo elevato un m o aC (fattore di espansione) l l e de ze codice ¾ Produttività di un programmatori si misura in linee n ie Sc prodotte in unità di tempo i d to ¾ Programmatori scrivono più o meno loenstesso numero di linee di m i t codice per unità di tempo, indipendentemente dal linguaggio usato r ipa D ¾ scrivere in Assembler è più costoso, in termini di tempo, di qualche fattore rispetto allo scrivere con linguaggi ad alto livello. Leggibilità del codice e probabilità di errore peggiorano con l’aumentare delle linee di codice UD 2.c # 36 Prof Alberto Postiglione – Dipartimento di Scienze della Comunicazione – Università Salerno 18