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