Upload
kanoa
View
29
Download
0
Embed Size (px)
DESCRIPTION
Il Programma. Dalla progettazione all’esecuzione. Perché programmare?. Un programma è un insieme di istruzioni che “insegna” al computer come svolgere particolari compiti che l’uomo preferisce delegare ad una macchina, che li può eseguire in maniera più veloce o più efficiente. - PowerPoint PPT Presentation
Citation preview
Il Programma
Dalla progettazione all’esecuzione
Perché programmare?
Un programma è un insieme di istruzioni che “insegna” al computer come svolgere particolari compiti che l’uomo preferisce delegare ad una macchina, che li può eseguire in maniera più veloce o più efficiente
Il programma in 6 fasi
•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione•Compilare il programma•Eseguire il programma
Il programma in 6 fasi
•Capire e descrivere il problema
1. Descrizione del problema
Problema: il signor Trinciapolli possiede una macelleria, e per fare il conto per i suoi clienti deve addizionare un certo numero di addendi.
Il programma in 6 fasi
•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)
2. Ricerca algoritmo
Problema: il signor Trinciapolli possiede una macelleria, e per fare il conto per i suoi clienti deve addizionare un certo numero di addendi.Metodo risolutivo (algoritmo): il signor Trinciapolli fornisce al computer il numero di acquisti che il cliente ha effettuato e poi ciascun importo parziale e il computer gli mostrerà sullo schermo il totale.Nota: il sistema di fornire prima il numero di addendi non è comodo per il signor Trinciapolli; ma è stato scelto per semplificare il procedimento per il lettore
2. Algoritmo in linguaggio naturale
Il programma del Trinciapolli deve quindi:1. Mostrare un titolo2. Chiedere quanti sono gli addendi e ottenere una
risposta, che memorizzerà in una cella di memoria che chiama N
3. Porre somma = 0 e k = 04. Finché k < N
1. Chiedere l’addendo N-esimo e ottenere una risposta (num)
2. Sommare l’addendo N-esimo a somma5. Visualizzare il risultato sullo schermo6. Terminare il programma
In blu sono state indicate le variabili, ovvero quelle parti del programma che cambiano valore durante l’esecuzione
In verde trovate le costanti, che non cambiano
maiAlcune osservazioni
Il programma in 6 fasi
•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo
3. Diagramma a blocchi1. Mostrare un titolo2. Chiedere quanti sono gli
addendi e ottenere una risposta, che memorizzerà in una cella di memoria che chiama N
3. Porre somma = 0 e k = 0
4. Finché k < N
1. Chiedere l’addendo N-esimo e ottenere una risposta (num)
2. Sommare l’addendo N-esimo a somma
5. Visualizzare il risultato sullo schermo
6. Terminare il programma
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
3. Diagramma a blocchi
Prendiamoci una piccola pausa perché il signor Trinciapolli non ha capito esattamente.Riprendiamo il diagramma e seguiamo il “flusso”, ovvero vediamo un po’ cosa succede nelle varie fasi…
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma mostra sullo schermo la parola “Somma” come titolo
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma mostra sullo schermo la parola “Quanti?” per chiedere al Trinciapolli quanti
acquisti ha fatto la cliente
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma memorizza il numero di
acquisti, che il Trinciapolli digita sulla tastiera (supponiamo 3)
N
3
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma pone somma e k uguali a 0
N
3somma
0k
0
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma si chiede se k < N.
N
3somma
0k
0
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
In questo caso la risposta è sì
N
3somma
0k
0
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma mostra la scritta “Prossimo
addendo?”
N
3somma
0k
0
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma memorizza il primo
addendo, che il Trinciapolli digita sulla
tastiera (supponiamo 6€)
N
3somma
0k
0num
6
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
0k
0num
6
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
6k
0num
6
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
6k
0num
6
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
6k
1num
6
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma si chiede se k < N.
La risposta è ancora sì
N
3somma
6k
1num
6
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma chiede al Trinciapolli e ottiene il secondo addendo, che
mette in num (supponiamo 2€)
N
3somma
6k
1num
6
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
N
3somma
6k
1num
2
Il programma chiede al Trinciapolli e ottiene il secondo addendo, che
mette in num (supponiamo 2€)
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
6k
1num
2
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
8k
1num
2
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
8k
2num
2
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma si chiede se k < N.
La risposta è ancora sì
N
3somma
8k
2num
2
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma chiede al Trinciapolli e ottiene il secondo addendo, che
mette in num (supponiamo 10€)
N
3somma
8k
2num
2
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
N
3somma
8k
2num
10
Il programma chiede al Trinciapolli e ottiene il secondo addendo, che
mette in num (supponiamo 10€)
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
8k
2num
10
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
18k
2num
10
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma incrementa somma di
num e k di 1
N
3somma
18k
3num
10
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma si chiede ancora se k < N.
La risposta è, finalmente, no
N
3somma
18k
3num
10
3. Diagramma a blocchiINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma mostra sullo schermo il
contenuto di somma, che è il risultato del
programma
N
3somma
18k
3num
10
Il programma in 6 fasi
•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione
4. Il programma in Pascal
Mostreremo ora, a partire dal diagramma a blocchi, come sia facile scrivere il programma.A titolo di esempio si è scelto come linguaggio di programmazione il Pascal, ma un altro linguaggio non presenterebbe sensibili differenze.
4. Il programma in PascalProgram Trinciapolli;
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Titolo del programma
4. Il programma in PascalProgram Trinciapolli;Var N, somma, k, num: integer;
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Elenco delle variabili, che
contengono numeri interi
4. Il programma in PascalProgram Trinciapolli;Var N, somma, k, num: integer;Begin
Writeln(‘Somma’);Writeln(‘Quanti?’);Readln(N);Somma := 0;k :=0;While k < N then
BeginWriteln(‘Prossimo
addendo?’);Readln(num);Inc(somma, num);Inc(k, 1);
End;Writeln(somma)
End.
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
Il programma in 6 fasi
•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione•Compilare il programma
5. Compilazione
Una notizia buona e una cattiva.Quella buona è per il Trinciapolli: ormai lui non deve fare più niente, il programma è completo e gli basta premere il tasto “compila” del Turbo Pascal o del Free Pascal per avere direttamente il programma funzionante…Quella cattiva è invece per i lettori che hanno ancora voglia di seguirmi: inizia una fase un tantino complicata di questo corso… Ma comincia anche la parte più interessante, che ci mostra la genialità di quelle teste che hanno costruito i primi computer.
Armatevi di un po’ di pazienza, e proseguiamo!
5. Compilazione
La compilazione è un’operazione chiave: è quella che trasforma il programma, così come l’abbiamo scritto ora, in un insieme di simboli e numeri, detto compilato, comprensibile al computer (molto meno a noi…), in modo che possa essere eseguito.
5. Compilazione
Dobbiamo aprire però una piccola parentesi su come è strutturata la memoria (RAM) di un computer. Essa è formata da moltissimi bytes.
Memoria byte
5. Compilazione
Ogni byte, poi è formato da 8 bit (=binary digit). Ogni bit è come un “interruttore”, che può essere acceso o spento (ovvero può valere 1 o 0). Per chi conosce un po’ la matematica ad aritmetiche finite, sarà intuitivo che in un byte possiamo memorizzare un numero da 0 a 255 (28-1).
1 0 1 1 1 0 1 1
byte
bit bit bit bit bit bit bit bit
5. Compilazione
Un byte può contenere anche un carattere, come una lettera, un numero o un simbolo (ad esempio di punteggiatura).Per memorizzare un testo, invece, dobbiamo usare una stringa (insieme di caratteri). Una stringa occupa quindi tanti bytes quante sono le sue lettere, più uno iniziale che esprime appunto la lunghezza.
4 C i a o
string Questa stringa occupa 5 bytes
5. Compilazione
Per memorizzare un numero che vada oltre il 255, dobbiamo usare più di un byte: ad esempio con 2 bytes possiamo arrivare al numero 65535 (216-1)Fatte queste premesse, torniamo al programma…
Un’ultima precisazione: il computer che simuleremo nei prossimi passaggi non è un personal computer, ma una macchina immaginaria, spesso semplificata, comunque il più possibile aderente al computer “normale”
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
0 W string
A sinistra abbiamo indicato l’indirizzo
dove si trova in memoria questa istruzione (che,
essendo la prima, ha indirizzo 0)
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
0 W string
Segue il codice di funzione (l’abbiamo
chiamato W, per Writeln), e il
sottocodice (string significa che è un
insieme di caratteri, ovvero un insieme di
lettere)
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
0 W string
Occorre poi indicare dove è il testo che vogliamo scrivere. Poi spiegheremo
meglio come funzioni questa fase.
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
0 W string
Per ora lasciamo due bytes vuoti: non uno
solo perché così possiamo arrivare a scrivere un indirizzo fino a 65535 anziché
fino a 255
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
WW
string
string
Siamo ora al 4° byte, si tratta di nuovo di una Writeln come
prima, con sottofunzione string
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
8
WWR
string
string
int
C’è poi una Readln, e questa volta la
sottofunzione è int: dobbiamo leggere un
numero intero.
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
8
WWR
string
string
int
Lasciamo lo spazio per indicare dove
andrà memorizzato il valore immesso
dall’utente
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
81216
WWRZZ
string
string
int
Supponiamo che esista una funzione “azzera” (indicata
con Z).
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
81216
WWRZZ
string
string
int
Il codice di sottofunzione rimane vuoto; lasciamo poi
lo spazio per indicare cosa
azzerare
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
8121620
WWRZZ<
string
string
int
int
La funzione seguente serve a verificare se due
interi sono il primo minore dell’altro
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
8121620
WWRZZ<
string
string
int
int
Lasciamo due bytes per indicare dov’è il primo numero e due
per il secondo
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
8121620
WWRZZ<
string
string
int
int
Gli ultimi due bytes servono per indicare
dove andare se il risultato è falso
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
812162028
WWRZZ<W
string
string
int
int
string
Ancora una Writeln di un
testo
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
81216202832
WWRZZ<WR
string
string
int
int
string
int
Readln di un numero intero
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
812162028323644
WWRZZ<WR++
string
string
int
int
string
int
int
int
Per le somme dobbiamo
indicare innanzi tutto che si tratta
di interi
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
812162028323644
WWRZZ<WR++
string
string
int
int
string
int
int
int
Poi dobbiamo specificare dov’è il primo numero;
dov’è il secondo e dove va messo il
risultato
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
81216202832364452
WWRZZ<WR++☞
string
string
int
int
string
int
int
int
Questa è un’istruzione di salto: dobbiamo specificare dove
“andare”
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
8121620283236445256
WWRZZ<WR++☞W
string
string
int
int
string
int
int
int
int
Questa Writeln deve mostrare un numero intero.
Lasciamo poi lo spazio per
indicare quale
5. Compilazione04
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
812162028323644525660
WWRZZ<WR++☞W•
string
string
int
int
string
int
int
int
int
Indichiamo che il programma
ha termine
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
048
12162028323644525660
WWRZZ<WR++☞W•
string
string
int
int
string
int
int
int
int
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
048
12162028323644525660
WWRZZ<WR++☞W•
string
string
int
int
string
int
int
int
int
Ora compattiamo un po’ inmodo da avere più spazio
libero
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
048
12162028323644525660
WWRZZ<WR++☞W•
string
string
int
int
string
int
int
int
int
0 1 2 3
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
0
812162028323644525660
W W
RZZ<WR++☞W•
string string
int
int
string
int
int
int
int
0 1 2 3 4 5 6 7
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
162028323644525660
W W R
ZZ<WR++☞W•
string string int
int
string
int
int
int
int
1 2 3 4 5 6 7 8 9
12
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
162028323644525660
W W RZ
Z<WR++☞W•
string string int
int
string
int
int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2028323644525660
W W RZ Z
<WR++☞W•
string string int
int
string
int
int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
20
28323644525660
W W RZ Z
<
WR++☞W•
string string int
int
string
int
int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030
323644525660
W W RZ Z
< W
R++☞W•
string string int
int string
int
int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030
3644525660
W W RZ Z
< WR
++☞W•
string string int
int string
int
int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
203040
44525660
W W RZ Z
< WR +
+☞W•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
20304050
525660
W W RZ Z
< WR +
+
☞W•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
20304050
5660
W W RZ Z
< WR +
+☞
W•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
20304050
60
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Il programma in memoria è,per ora, come appare qui sopra.Se vi sembra confuso, vedrete
che poi… peggiora
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Ora dobbiamo aggiungerein coda al programma tutte
le costanti.
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Iniziamo con la prima: è la stringa“Somma”, e quindi prima
specifichiamo quanto è lunga, poi introduciamo ogni lettera
5 m mS o a
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Ora la seconda: è ancorauna stringa, “Quanti?”
m5 mS o a 7 Qu a ?n t i70
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Ora la terza:“Prossimo addendo?”
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
L’ultima costante è numerica: 1
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Passiamo infine alle variabili:la prima è N, ed è numerica;scriviamo [N] per ricordarci
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Poi somma, ancora numerico
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Poi k
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Poi num
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Finalmente il programma ècompleto e occupa 104 bytes
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Ora dobbiamo tornare indietroa riempire i buchi che avevamo
lasciato…
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Qui dobbiamo specificare dovesi trova quello che vogliamo
scrivere con la prima istruzione
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
1 2 3 4 5 6 7 8 9
Si tratta di “Somma”,memorizzata a partire dal byte
62
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
621 2 3 4 5 6 7 8 9
Memorizziamo quindi 62
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
621 2 3 4 5 6 7 8 9
Analogamente completiamoil secondo “buco” con 68
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 681 2 3 4 5 6 7 8 9
Analogamente completiamoil secondo “buco” con 68
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 681 2 3 4 5 6 7 8 9
Qui dobbiamo indicare dove va memorizzato il valore letto da
tastiera
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 681 2 3 4 5 6 7 8 9
La risposta è a partire dal byte96
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896
1 2 3 4 5 6 7 8 9
La risposta è a partire dal byte96
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896
1 2 3 4 5 6 7 8 9
Il primo valore da azzerareè contenuto dalla posizione 98
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98
1 2 3 4 5 6 7 8 9
Il primo valore da azzerareè contenuto dalla posizione 98
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98
1 2 3 4 5 6 7 8 9
Il secondo valore da azzerarecomincia al byte 100
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
1 2 3 4 5 6 7 8 9
Il secondo valore da azzerarecomincia al byte 100
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
1 2 3 4 5 6 7 8 9
Ora dobbiamo confrontare k e N:quindi dobbiamo scrivere
100 e 96
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
100 96
1 2 3 4 5 6 7 8 9
Ora dobbiamo confrontare k e N:quindi dobbiamo scrivere
100 e 96
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
100 96
1 2 3 4 5 6 7 8 9
Qui dobbiamo dire dove andarese k dovesse essere
maggiore di N
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
100 96
1 2 3 4 5 6 7 8 9
Dovremmo andare all’ultimaistruzione Writeln, che comincia
al byte 56
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
100 96 56
1 2 3 4 5 6 7 8 9
Dovremmo andare all’ultimaistruzione Writeln, che comincia
al byte 56
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
100 96 56
1 2 3 4 5 6 7 8 9
Ora indichiamo dove si trova“Prossimo addendo?”: al
byte 76
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076
96 56
1 2 3 4 5 6 7 8 9
Ora indichiamo dove si trova“Prossimo addendo?”: al
byte 76
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076
96 56
1 2 3 4 5 6 7 8 9
Dobbiamo memorizzare num,che va posto dal byte 102 in poi
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102
96 56
1 2 3 4 5 6 7 8 9
Dobbiamo memorizzare num,che va posto dal byte 102 in poi
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102
96 56
1 2 3 4 5 6 7 8 9
Ora dobbiamo sommare sommae num: indichiamo quindi
98 e 102
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
96
102
56
1 2 3 4 5 6 7 8 9
Ora dobbiamo sommare sommae num: indichiamo quindi
98 e 102
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
96
102
56
1 2 3 4 5 6 7 8 9
Dove va posto il risultato dellasomma? Ancora in somma,
in posizione 98
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
96
102
56
98
1 2 3 4 5 6 7 8 9
Dove va posto il risultato dellasomma? Ancora in somma,
in posizione 98
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
96
102
56
98
1 2 3 4 5 6 7 8 9
Ora dobbiamo sommare k,che si trova al byte 100, con
la costante 1, al byte 94
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
100
96
102 94
56
98
1 2 3 4 5 6 7 8 9
Ora dobbiamo sommare k,che si trova al byte 100, con
la costante 1, al byte 94
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
100
96
102 94
56
98
1 2 3 4 5 6 7 8 9
Il risultato va in k, al byte 100
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
100
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
Fatte le somme, dobbiamotornare indietro al byte 20
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. CompilazioneINIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
Fatte le somme, dobbiamotornare indietro al byte 20
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. Compilazione0
10
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
Infine dobbiamo mostraresullo schermo il contenuto di
somma, al byte 98
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
5. Compilazione0
10
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
Infine dobbiamo mostraresullo schermo il contenuto di
somma, al byte 98
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
INIZIO
“Somma”
“Quanti?”
N0 somma
0 k
k < N?
“Prossimo addendo?”
numsomma + num somma
k + 1 k
sì
somma
no
FINE
5. Compilazione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
5. Compilazione
Quello che abbiamo appena visto è il programma oggetto o programma compilato.Ma è pieno di istruzioni complesse: ad esempio “mostra sullo schermo” (Writeln) dovrebbe essere scomposta in tantissime fasi di dialogo fra la scheda video e il programma. Tutte queste istruzioni sono, per così dire, già pronte in un linguaggio di programmazione.
5. Compilazione
Inizia quindi la fase di linking: il compilatore indica al computer come queste istruzioni complesse siano in realtà scomponibili in semplici istruzioni.Per semplicità salteremo questo passaggio, per andare direttamente all’ultimo stadio del programma…
Il programma in 6 fasi
•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione•Compilare il programma•Eseguire il programma
6. Esecuzione
Dunque… lo scopo di quest’ultima parte del corso è spiegare, attraverso un modello di “computer ideale”, come avvenga l’esecuzione del programma che abbiamo appena approntato.Iniziamo a vedere come sia fatto, concettualmente, un computer.
6. EsecuzioneIndividuiamo innanzi tutto due sezioni importanti del computer:•CPU: è la parte “pensante”, che elabora i dati•Periferiche: sono le parti esterne, come il monitor, la tastiera, il modem, la stampante, …
CPU
Periferiche
6. EsecuzionePerifericheÈ l’insieme di quegli oggetti fisici che consentono al computer di interagire con l’utente e con il mondo esterno.
CPU
Periferiche
6. EsecuzionePerifericheSi dividono in:•Periferiche di InputConsentono di immettere dati. Es.: tastiera, mouse, scanner
•Periferiche di OutputConsentono di mostrare dati. Es.: schermo, stampante
•Periferiche I/OSvolgono entrambe le funzioni. Es.: modem, fax, schermi touch screen
CPU
Periferiche
6. EsecuzioneCPUDistinguiamo:•Program counter•Sezione indirizzamento•Registro decodifica•Arithmetic – logic unit (ALU)•Governo Input/Output
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
Registro Decodifica
Unità logico-aritm.
Governo I/O
6. EsecuzioneCPU: Program counterHa una funzione molto semplice: indicare “a che punto siamo” nell’esecuzione del programma (per questo gli affianchiamo una casellina con un numero).
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
Registro Decodifica
Unità logico-aritm.
Governo I/O
0
6. EsecuzioneCPU: Sezione indirizzamentoÈ composta da:•Registro indirizziSi occupa di “scartabellare” nel Core. Possiamo immaginarlo come un magazziniere.
•CoreÈ la memoria RAM, dove è contenuto tutto il programma. È il vero e proprio magazzino.
•Registro datiÈ un registro temporaneo, per tenere i pochi bytes che devono essere elaborati. È come un carrello.
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
Registro Decodifica
Unità logico-aritm.
Governo I/O
0
6. EsecuzioneCPU: Registro decodificaContiene l’elenco di tutti i comandi che il processore è in grado di effettuare, e, dopo aver riconosciuto ciascuna operazione da eseguire, la smista alla zona della CPU di pertinenza: in particolare si tratterà di un circuito dell’unità logico-aritmetica o di un circuito della sezione di governo I/O.
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
6. EsecuzioneCPU: Unità logico-aritmeticaEffettua operazioni aritmetiche (somma, differenza, prodotto, divisione, modulo), logiche (confronto, coordinazione) e tutte le altre operazioni che modificano o elaborano i dati presenti nella memoria.
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
6. EsecuzioneCPU: Governo I/OGestisce le periferiche, ovvero comunica con i componenti esterni (schermo, tastiera) o con i circuiti “specializzati” (schede video, audio, Lan, ecc.).
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
6. Esecuzione
Ora affianchiamo il programma allo schema della CPU. Come abbiamo detto, esso è contenuto nel Core, per questo lo colleghiamo con esso.Abbiamo creato anche qualche altro collegamento fra le varie aree della CPU, poi sarà chiaro il perché fra poco.
6. Esecuzione
Pronti per l’ultima tranche?Ora, come avevamo fatto con il diagramma a blocchi, seguiamo il flusso del programma e lo vedremo funzionare!Immagino già l’emozione…
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il programma inizia dal Program Counter, che
indica 0: la prima istruzione da eseguire è al
posto 0
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il registro indirizzi chiede al Core che cosa c’è in
posizione 0 e 1 (le istruzioni sono sempre
lunghe 2 bytes)
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il Core risponde “W string”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il Registro Decodifica sa che questo significa
“scrivi una stringa” e che è un’istruzione lunga 4
bytes
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
0
Registro Decodifica
Unità logico-aritm.
Governo I/O
Quindi somma 4 al Program Counter
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
Quindi somma 4 al Program Counter
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
Poi richiede alla memoria che cosa deve mostrare
sullo schermo
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
Poi richiede alla memoria che cosa deve mostrare
sullo schermo
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il Core risponde: “guarda a partire dal byte 62”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
Questa informazione è memorizzata nel Registro
Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Questa informazione è memorizzata nel Registro
Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Il Registro Decodifica ora attiva il circuito della
sezione di governo I/O per mostrare le stringhe
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Il governo I/O sa quindi che deve mostrare una
stringa, e vede dal Registro Dati che essa
comincia al byte 62
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Al byte 62 scopre che la stringa è lunga 5: legge quindi i 5 bytes seguenti
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Ottenuta la parola “Somma”, la invia alla periferica interessata
(nell’ipotesi, lo schermo)
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Ora la prima istruzione è terminata: l’esecuzione “ricomincia” da capo
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Il Program Counter indica 4, e quindi verrà eseguita l’istruzione che comincia
al byte 4
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
4
Registro Decodifica
Unità logico-aritm.
Governo I/O
62
Questa è del tutto analoga alla precedente, quindi salteremo direttamente
alla successiva
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
8
Registro Decodifica
Unità logico-aritm.
Governo I/O
Questa è del tutto analoga alla precedente, quindi salteremo direttamente
alla successiva
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
8
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il registro indirizzi chiede al Core che cosa c’è in
posizione 8 e 9
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
8
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il Core risponde “R int”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
8
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il Registro Decodifica sa che questo significa “leggi
un intero” e che è un’istruzione lunga 4
bytes
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
8
Registro Decodifica
Unità logico-aritm.
Governo I/O
Quindi somma 4 al Program Counter
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
Quindi somma 4 al Program Counter
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
Poi richiede alla memoria dove deve memorizzare
ciò che legge dalla tastiera
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
Poi richiede alla memoria dove deve memorizzare
ciò che legge dalla tastiera
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
Il Core risponde: “guarda a partire dal byte 96”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
Questa informazione è memorizzata nel Registro
Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Questa informazione è memorizzata nel Registro
Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Il Registro Decodifica ora attiva il circuito della
sezione di governo I/O per leggere i numeri interi
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Il governo I/O sa quindi che deve mostrare una
stringa, e vede dal Registro Dati che essa
comincia al byte 62
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Supponiamo che il Trinciapolli introduca 3
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 [N] [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Questo numero viene memorizzato in posizione
96, come indica il Registro Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Questo numero viene memorizzato in posizione
96, come indica il Registro Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Anche questa istruzione è terminata, e il Program
Counter indica di ricominciare dal byte 12
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Il Core indica al Registro Decodifica che dobbiamo
eseguire “Z”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
12
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Il Registro Decodifica riconosce “Z”: si tratta di
“azzera”, lunga 4
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
16
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Il Program Counter viene incrementato di 4
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
16
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Il Registro Decodifica chiede quale byte debba
essere azzerato.
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
16
Registro Decodifica
Unità logico-aritm.
Governo I/O
96
Il Core risponde 98: questo numero è
memorizzato nel Registro Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
16
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Registro Decodifica indica alla memoria di impostare il byte 98 al
valore 0
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 [s]
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
16
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Core esegue
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
16
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Core esegue
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
[k]100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
16
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Si riparte dall’istruzione in posizione 16, che non
discutiamo perché analoga alla precedente
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
100
Siamo ora all’istruzione che occupa il posto 20
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
100
Il Core indica al Registro Decodifica che si tratta di
un “< int”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
100
Il Registro Decodifica sa che deve confrontare due
interi, e che è un’istruzione lunga 8
bytes
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
100
Pertanto somma 8 al Program Counter
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
100
Pertanto somma 8 al Program Counter
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
100
Poi chiede al Core dove sono i valori da
confrontare
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
100;96
Il Core risponde che si trovano al posto 100 e 96 e ripone questi valori nel
Registro Dati
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
100;96
Il Registro Dati chiede allora quali siano questi
valori
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
100;96
Il Registro Dati chiede allora quali siano questi
valori
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
0;3
Il Core risponde che valgono 0 e 3
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
0;3
Il registro passa questi numeri all’unità logica
che li confronta. Visto che 0<3 l’esecuzione procede
normalmente
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
28
Registro Decodifica
Unità logico-aritm.
Governo I/O
0;3
Si tratta della già nota istruzione per mostrare una stringa (“Prossimo
addendo?”)
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
32
Registro Decodifica
Unità logico-aritm.
Governo I/O
76
Saltiamo alla “R int”, che legge un’intero
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 [n]
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
32
Registro Decodifica
Unità logico-aritm.
Governo I/O
76
Abbiamo già spiegato come funzioni, quindi ci limitiamo ad immettere nel posto “giusto” (byte
102), ad es., 6€
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
32
Registro Decodifica
Unità logico-aritm.
Governo I/O
102
Abbiamo già spiegato come funzioni, quindi ci limitiamo ad immettere nel posto “giusto” (byte
102), ad es., 6€
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
36
Registro Decodifica
Unità logico-aritm.
Governo I/O
102
Passiamo ad un’istruzione nuova: quella di somma
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
36
Registro Decodifica
Unità logico-aritm.
Governo I/O
102
Il Core comunica che si tratta di un “+ int”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
36
Registro Decodifica
Unità logico-aritm.
Governo I/O
102
Il Registro Decodifica riconosce e incrementa il
Program Counter di 8
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
102
Il Registro Decodifica riconosce e incrementa il
Program Counter di 8
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
102
Il Registro Decodifica chiede dove si trovino i
numeri da sommare
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
98;102
Il Core risponde che si trovano in posizione 98 e
102; il Registro Decodifica chiede quanto
valgano questi
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
0;6
Il Core risponde 0 e 6
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
0;6
L’unità aritmetica svolge il calcolo e risponde che
la somma è 6
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Registro Decodifica chiede dove memorizzare questo 6: il Core risponde
“alla posizione 98”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 0
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Registro Decodifica indica al Core di memorizzare alla
posizione 98 il valore 6
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Core esegue
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
L’istruzione seguente opera nella stessa
maniera, sommando il numero in posizione 100 e
quello in posizione 94
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
0100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il risultato (0+1 0) è posto alla posizione 100
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
44
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il risultato (0+1 1) è posto alla posizione 100
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
52
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Troviamo ora un’istruzione nuova: il
Program Counter indica 52, e in posizione 52 il
Core trova “☞”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
52
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Registro Decodifica riconosce che deve “saltare”, ovvero
modificare il Program Counter
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
52
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Chiede quindi al Core da dove deve ricominciare
l’esecuzione
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
52
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Core risponde “a partire dalla posizione 20”
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
52
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Registro Decodifica reimposta il Program
Counter a 20
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Registro Decodifica reimposta il Program
Counter a 20
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Program Counter ora indica 20: pertanto
l’esecuzione ripartirà da qui
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Vengono confrontati i valori in posizione 100 e
96
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
1<3, quindi l’esecuzione prosegue regolarmente,
come prima
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
1<3, quindi l’esecuzione prosegue regolarmente,
come prima
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 6
1100 6
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Supponiamo che l’utente introduca 2€ come
importo e aggiorniamo i vari valori; poi si
ricomincia ancora dalla 20
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 8
2100 2
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Supponiamo che l’utente introduca 2€ come
importo e aggiorniamo i vari valori; poi si
ricomincia ancora dalla 20
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 8
2100 2
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
2<3, quindi l’esecuzione prosegue regolarmente,
come prima
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 8
2100 2
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Supponiamo che l’utente introduca questa volta 10€
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Supponiamo che l’utente introduca questa volta 10€
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
A questo punto, ciò che si trova in posizione 100 non è più minore di ciò che si trova in 96 (3=3)
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Quindi il Registro Decodifica sa che in
questo caso deve saltare, e chiede al Core dove
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
20
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Core risponde “alla posizione 56”, e il
Registro Decodifica imposta il Program
Counter a 56
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
56
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il Core risponde “alla posizione 56”, e il
Registro Decodifica imposta il Program
Counter a 56
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
56
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
L’esecuzione ricomincia dal Program Counter, che
indica di accedere appunto alla posizione 56
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
56
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Questa “W int”, molto simile alle precedenti “W
string”, mostra il contenuto della cella di
posto 98
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
56
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Questo valore è 18, il risultato del conto del
Trinciapolli!!!!!
6. Esecuzione
010
0
2030405060
W W RZ Z
< WR +
+☞ W
•
string string int
int string
int int
int
int
62 6896 98 100
10076 102 98
10020 98
96
102 94
56
98100
1 2 3 4 5 6 7 8 9
m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?
8090 1 3 18
3100 10
CPU
Periferiche
Program Counter
Registro IndirizziCore
Registro Dati
60
Registro Decodifica
Unità logico-aritm.
Governo I/O
98
Il programma si conclude quando, in posizione 60,
si trova il simbolo “•”, che indica la fine
Epilogo
Allora, com’è andata?Il nostro viaggio nella programmazione si è concluso.Morale della favola: il Trinciapolli avrebbe potuto comprare una cassa invece di costringerci a scrivergli un programma
Il ProgrammaDalla progettazione all’esecuzione
Una realizzazione di
Gabriele [email protected]
Febbraio 2006