il ciclo di vita di un programma
Transcript
il ciclo di vita di un programma
Fondamenti di Informatica Linguaggi e traduttori IL CICLO DI VITA DI UN PROGRAMMA (Programming in the small) Definizione problema Identificazione algoritmo risolutivo Progettazione algoritmo Codifica programma Prova programma Rilascio programma ¾ L'importanza delle "fasi alte". ¾ Il costo del ritorno alle fasi precedenti. ¾ I parametri di qualità (correttezza, affidabilità, efficienza, riusabilità, facilità d'uso). G. Piscitelli Politecnico di Bari pag. 1 di 16 Fondamenti di Informatica Linguaggi e traduttori PROGETTAZIONE DEGLI ALGORITMI (Lo schema a blocchi o flow chart) Lo schema a blocchi è uno strumento rudimentale, anche se molto diffuso, per rappresentare il flusso di esecuzione di un programma, o meglio per descrivere graficamente un algoritmo. I singoli blocchi indicano operazioni logiche (su variabili) e non operazioni fisiche (su registri). I blocchi che possono essere presenti in un flow chart sono: 9 il blocco di inizio della descrizione dell’algoritmo 9 il blocco di fine della descrizione dell’algoritmo 9 il blocco di assegnazione ad una variabile del risultato di un’espressione 9 il blocco di test di verità di un’espressione logica (o predicato o condizione); in base al risultato del test sono indicati due differenti percorsi di avanzamento dell’algoritmo 9 il blocco di lettura che assegna ad una variabile un valore ricavato da un dispositivo di input (per esempio dalla tastiera) 9 il blocco di scrittura che riporta su un dispositivo di output (per esempio il video) il valore di una variabile G. Piscitelli Politecnico di Bari pag. 2 di 16 Fondamenti di Informatica Linguaggi e traduttori I BLOCCHI DI UN FLOW CHART C A + 2*B Blocco di assegnazione A, B C, D Blocco di lettura Blocco di scrittura Blocco di test C>3 si start no Blocco di inizio stop G. Piscitelli Politecnico di Bari Blocco di fine pag. 3 di 16 Fondamenti di Informatica Linguaggi e traduttori UN ESEMPIO DI FLOW CHART Algoritmo: lettura di numeri e inversione della sequenza start N 1 N NUM N+1 A(N) NUM = 0 NUM no si NUM N N-1 NUM N=0 A(N) no si stop G. Piscitelli Politecnico di Bari pag. 4 di 16 Fondamenti di Informatica Linguaggi e traduttori CODIFICA DEI PROGRAMMI (La codifica in linguaggio di macchina) IL FORMATO DELLE ISTRUZIONI codice operativo operando 1 operando 2 operando 3 Il codice operativo è sempre presente ed identifica l’operazione da svolgere. Gli operandi, che possono anche mancare, specificano la dislocazione (in memoria centrale o in un registro generale della CPU) dei dati cui l’operazione si riferisce. Se un dato è in un registro, l’operando indica il numero di tale registro. Se un dato è in memoria, l’operando ne indica l’indirizzo. La lunghezza di un’istruzione in bit (l istr) dipende, oltre che dalla lunghezza del codice operativo (in genere 8 bit), dal numero e dalla dislocazione dei dati-operandi. La lunghezza in bit di un’istruzione a 3 operandi è perciò l istr = l cod.oper. + l op.1 + l op2 + l op3 La lunghezza di un’istruzione è in genere pari a quella di una cella di memoria. Alcune volte ne è un multiplo o sottomultiplo. G. Piscitelli Politecnico di Bari pag. 5 di 16 Fondamenti di Informatica Linguaggi e traduttori IL LINGUAGGIO DI MACCHINA IL SET DELLE ISTRUZIONI L’insieme delle istruzioni eseguibili, rappresentate dai rispettivi codici operativi, viene detto set di istruzioni. La cardinalità del set di istruzioni è ≤ 2l cod.oper. L’ampiezza della memoria centrale è ≤ 2l op. i Per semplicità consideriamo nel seguito: ) istruzioni con al più un operando; ) operandi che si riferiscono solo a dati che sono dislocati nella memoria centrale; ) istruzioni di lunghezza uguale a quella di una cella di memoria. In tal caso l istr = l cod.oper. + l op. = l cella G. Piscitelli Politecnico di Bari pag. 6 di 16 Fondamenti di Informatica Linguaggi e traduttori IL LINGUAGGIO DI MACCHINA L’ESECUZIONE DELLE ISTRUZIONI 0 cella load store MAR MEMORIA MDR PC IR CPU G. Piscitelli Politecnico di Bari pag. 7 di 16 Fondamenti di Informatica Linguaggi e traduttori IL LINGUAGGIO DI MACCHINA LE PRINCIPALI ISTRUZIONI Per semplicità consideriamo nel seguito: ) che siano disponibili solo i registri A e B; Codice Operativo 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 Operando indirizzo binario indirizzo binario indirizzo binario indirizzo binario indirizzo binario indirizzo binario Significato carica operando in reg. A carica operando in reg. B scarica reg.A in operando scarica reg.B in operando leggi da I in operando scrivi da operando in O aggiungi reg. B a reg. A sottrai reg. B da reg. A moltiplica reg. A e reg.B dividi reg.A per reg. B indirizzo binario salta a istr. in operando indirizzo binario c.s. se reg. A = 0 (*) pausa di una istruzione termina esecuzione (*) Utilizza il registro di stato della CPU ed in particolare lo “zero bit”, il quale indica valore nullo per il registro A G. Piscitelli Politecnico di Bari pag. 8 di 16 Fondamenti di Informatica Linguaggi e traduttori IL LINGUAGGIO DI MACCHINA I PRINCIPALI TIPI DI DATI • intero • floating point • carattere • booleano ¾ Lo spazio di memoria occupato dai diversi tipi di dati. ¾ L'intervallo di rappresentazione dei diversi tipi di dati. Per semplicità consideriamo nel seguito: ) che siano disponibili solo gli interi; G. Piscitelli Politecnico di Bari pag. 9 di 16 Fondamenti di Informatica Linguaggi e traduttori UN PROGRAMMA IN LINGUAGGIO MACCHINA ... consta di una parte contenente le istruzioni e di una contenente i dati ... le due parti sono separate dall’istruzione di termine Per semplicità consideriamo nel seguito: ) che la prima istruzione del programma sia caricata nella cella 0 di memoria; Cella 0 1 2 3 4 5 6 7 8 9 G. Piscitelli Codice Operativo 0100 0100 0000 0001 1000 0010 0101 1101 0000 0000 Indirizzo binario 0000000000001000 0000000000001001 0000000000001000 0000000000001001 0000000000000000 0000000000001000 0000000000001000 0000000000000000 0000000000000000 0000000000000000 Politecnico di Bari pag. 10 di 16 Fondamenti di Informatica Linguaggi e traduttori IL LINGUAGGIO DI MACCHINA I MODI DI INDIRIZZAMENTO ) diretto, quando l’indirizzo indicato come operando è quello assoluto della parola di memoria interessata dall’operazione ) indiretto, quando l’indirizzo indicato come operando è quello di una parola di memoria che a sua volta contiene l’indirizzo assoluto della parola di memoria interessata dall’operazione. Può essere indirizzata una memoria più grande di quella indirizzabile dal solo operando ) relativo (tramite un registro indice), quando l’indirizzo della parola di memoria interessata dall’operazione si ottiene sommando il numero contenuto in un registro (registro indice o registro base) al valore dell’indirizzo-operando. Può essere indirizzata una memoria più grande di quella indirizzabile dal solo operando ) immediato, quando l’operando non indirizza la memoria, ma fornisce direttamente il valore interessato dall’operazione Il modo di indirizzamento caratterizza l’operando. In genere i suoi primi 2 bit esprimono il suo modo di indirizzamento. codice operativo operando modo di indirizzamento LINGUAGGI E TRADUTTORI G. Piscitelli Politecnico di Bari pag. 11 di 16 Fondamenti di Informatica Linguaggi e traduttori Il programmatore scrive L'algoritmo in linguaggio L legge Il programma traduttore traduce L'algoritmo in linguaggio macchina che viene eseguito da L'automa calcolatore Il programma traduttore può: tradurre ed eseguire frase per frase (interprete) tradurre tutte le frasi e solo successivamente eseguire (assemblatore o compilatore) G. Piscitelli Politecnico di Bari pag. 12 di 16 Fondamenti di Informatica Linguaggi e traduttori CODIFICA DEI PROGRAMMI (La codifica in linguaggio simbolico a assemblativo) I CODICI SIMBOLICI Codice Operativo 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 nome Æ Simbolo LOADA LOADB STOREA STOREB READ WRITE ADD DIF MUL DIV JUMP JUMPZ NOP HALT Operando dato con nome dato con nome dato con nome dato con nome dato con nome dato con nome istruzione con nome istruzione con nome modo di indirizzamento diretto @nome Æ modo di indirizzamento indiretto nome(R) Æ modo di indirizzamento relativo #nome G. Piscitelli Æ modo di indirizzamento immediato Politecnico di Bari pag. 13 di 16 Fondamenti di Informatica Linguaggi e traduttori IL LINGUAGGIO SIMBOLICO GLI OPERANDI SIMBOLICI Ogni dato (costante o variabile) è identificato da un nome. Con tale nome viene etichettata la cella di memoria che contiene il dato. Nome (etichetta o label) Indirizzo valore Le istruzioni possono essere identificate da un nome. Il programma in linguaggio simbolico Cella Label 0 1 2 3 4 5 6 7 8 9 G. Piscitelli X Y READ READ LOADA LOADB MUL STOREA WRITE HALT INT INT X Y X Y X X Codice Indirizzo Operativo binario 0100 0000000000001000 0100 0000000000001001 0000 0000000000001000 0001 0000000000001001 1000 0000000000000000 0010 0000000000001000 0101 0000000000001000 1101 0000000000000000 0000 0000000000000000 0000 0000000000000000 Politecnico di Bari pag. 14 di 16 Fondamenti di Informatica Linguaggi e traduttori UN ESEMPIO DI CODIFICA con indirizzamento relativo CICLO1 CICLO2 G. Piscitelli LOADA STOREA UNO N READ LOADA JUMPZ LOADI STOREA LOADA LOADB ADD STOREA JUMP NUM NUM CICLO2 N A(I) N UNO LOADA LOADB DIF JUMPZ STOREA LOADI LOADA STOREA WRITE JUMP N UNO FINE HALT UNO N NUM A1 A2 ......... A10 1 INT INT INT INT N CICLO1 FINE N N A(I) NUM NUM CICLO2 INT Politecnico di Bari pag. 15 di 16 Fondamenti di Informatica Linguaggi e traduttori UN ALTRO ESEMPIO DI CODIFICA con indirizzamento indiretto CICLO1 CICLO2 G. Piscitelli LOADA LOADB ADD STOREA X #NUM #1 READ LOADA JUMPZ STOREA LOADA LOADB ADD STOREA JUMP NUM NUM CICLO2 @X X #1 LOADA LOADB DIF LOADB DIFF JUMPZ WRITE JUMP X #1 FINE HALT X NUM A1 A2 ......... A10 INT INT INT INT X CICLO1 #NUM FINE @X CICLO2 INT Politecnico di Bari pag. 16 di 16