240
Il Programma Dalla progettazione all’esecuzione

Il Programma

  • Upload
    kanoa

  • View
    32

  • 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

Page 1: Il Programma

Il Programma

Dalla progettazione all’esecuzione

Page 2: Il Programma

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

Page 3: Il 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

Page 4: Il Programma

Il programma in 6 fasi

•Capire e descrivere il problema

Page 5: Il Programma

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.

Page 6: Il Programma

Il programma in 6 fasi

•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)

Page 7: Il Programma

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

Page 8: Il Programma

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

Page 9: Il 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

Page 10: Il Programma

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

somma

no

FINE

Page 11: Il Programma

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…

Page 12: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma mostra sullo schermo la parola “Somma” come titolo

Page 13: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma mostra sullo schermo la parola “Quanti?” per chiedere al Trinciapolli quanti

acquisti ha fatto la cliente

Page 14: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma memorizza il numero di

acquisti, che il Trinciapolli digita sulla tastiera (supponiamo 3)

N

3

Page 15: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma pone somma e k uguali a 0

N

3somma

0k

0

Page 16: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede se k < N.

N

3somma

0k

0

Page 17: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

In questo caso la risposta è sì

N

3somma

0k

0

Page 18: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma mostra la scritta “Prossimo

addendo?”

N

3somma

0k

0

Page 19: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma memorizza il primo

addendo, che il Trinciapolli digita sulla

tastiera (supponiamo 6€)

N

3somma

0k

0num

6

Page 20: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

0k

0num

6

Page 21: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

0num

6

Page 22: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

0num

6

Page 23: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

1num

6

Page 24: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede se k < N.

La risposta è ancora sì

N

3somma

6k

1num

6

Page 25: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma chiede al Trinciapolli e ottiene il secondo addendo, che

mette in num (supponiamo 2€)

N

3somma

6k

1num

6

Page 26: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

N

3somma

6k

1num

2

Il programma chiede al Trinciapolli e ottiene il secondo addendo, che

mette in num (supponiamo 2€)

Page 27: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

1num

2

Page 28: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

8k

1num

2

Page 29: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

8k

2num

2

Page 30: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede se k < N.

La risposta è ancora sì

N

3somma

8k

2num

2

Page 31: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma chiede al Trinciapolli e ottiene il secondo addendo, che

mette in num (supponiamo 10€)

N

3somma

8k

2num

2

Page 32: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

N

3somma

8k

2num

10

Il programma chiede al Trinciapolli e ottiene il secondo addendo, che

mette in num (supponiamo 10€)

Page 33: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

8k

2num

10

Page 34: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

18k

2num

10

Page 35: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

18k

3num

10

Page 36: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede ancora se k < N.

La risposta è, finalmente, no

N

3somma

18k

3num

10

Page 37: Il Programma

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma mostra sullo schermo il

contenuto di somma, che è il risultato del

programma

N

3somma

18k

3num

10

Page 38: Il 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

Page 39: Il Programma

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.

Page 40: Il Programma

4. Il programma in PascalProgram Trinciapolli;

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Titolo del programma

Page 41: Il 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

somma

no

FINE

Elenco delle variabili, che

contengono numeri interi

Page 42: Il Programma

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

somma

no

FINE

Page 43: Il 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

Page 44: 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!

Page 45: Il Programma

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.

Page 46: Il Programma

5. Compilazione

Dobbiamo aprire però una piccola parentesi su come è strutturata la memoria (RAM) di un computer. Essa è formata da moltissimi bytes.

Memoria byte

Page 47: Il Programma

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

Page 48: Il Programma

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

Page 49: Il Programma

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”

Page 50: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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)

Page 51: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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)

Page 52: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

0 W string

Occorre poi indicare dove è il testo che vogliamo scrivere. Poi spiegheremo

meglio come funzioni questa fase.

Page 53: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 54: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

WW

string

string

Siamo ora al 4° byte, si tratta di nuovo di una Writeln come

prima, con sottofunzione string

Page 55: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8

WWR

string

string

int

C’è poi una Readln, e questa volta la

sottofunzione è int: dobbiamo leggere un

numero intero.

Page 56: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8

WWR

string

string

int

Lasciamo lo spazio per indicare dove

andrà memorizzato il valore immesso

dall’utente

Page 57: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216

WWRZZ

string

string

int

Supponiamo che esista una funzione “azzera” (indicata

con Z).

Page 58: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216

WWRZZ

string

string

int

Il codice di sottofunzione rimane vuoto; lasciamo poi

lo spazio per indicare cosa

azzerare

Page 59: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8121620

WWRZZ<

string

string

int

int

La funzione seguente serve a verificare se due

interi sono il primo minore dell’altro

Page 60: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8121620

WWRZZ<

string

string

int

int

Lasciamo due bytes per indicare dov’è il primo numero e due

per il secondo

Page 61: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8121620

WWRZZ<

string

string

int

int

Gli ultimi due bytes servono per indicare

dove andare se il risultato è falso

Page 62: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

812162028

WWRZZ<W

string

string

int

int

string

Ancora una Writeln di un

testo

Page 63: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216202832

WWRZZ<WR

string

string

int

int

string

int

Readln di un numero intero

Page 64: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 65: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 66: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216202832364452

WWRZZ<WR++☞

string

string

int

int

string

int

int

int

Questa è un’istruzione di salto: dobbiamo specificare dove

“andare”

Page 67: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 68: Il Programma

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

812162028323644525660

WWRZZ<WR++☞W•

string

string

int

int

string

int

int

int

int

Indichiamo che il programma

ha termine

Page 69: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

048

12162028323644525660

WWRZZ<WR++☞W•

string

string

int

int

string

int

int

int

int

Page 70: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 71: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

048

12162028323644525660

WWRZZ<WR++☞W•

string

string

int

int

string

int

int

int

int

0 1 2 3

Page 72: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 73: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 74: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 75: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 76: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 77: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 78: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 79: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 80: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 81: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 82: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 83: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 84: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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.

Page 85: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 86: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 87: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 88: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 89: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 90: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 91: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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

Page 92: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 93: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 94: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 95: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 96: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 97: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 98: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 99: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 100: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 101: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 102: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 103: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 104: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 105: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 106: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 107: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 108: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 109: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 110: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 111: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 112: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 113: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 114: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 115: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 116: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 117: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 118: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 119: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 120: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 121: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 122: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 123: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 124: Il Programma

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

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]

Page 125: Il Programma

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

somma

no

FINE

Page 126: Il Programma

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

somma

no

FINE

Page 127: Il Programma

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]

Page 128: Il Programma

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.

Page 129: Il Programma

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…

Page 130: Il 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

Page 131: 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.

Page 132: Il Programma

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

Page 133: Il Programma

6. EsecuzionePerifericheÈ l’insieme di quegli oggetti fisici che consentono al computer di interagire con l’utente e con il mondo esterno.

CPU

Periferiche

Page 134: Il Programma

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

Page 135: Il Programma

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

Page 136: Il Programma

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

Page 137: Il Programma

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

Page 138: Il Programma

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

Page 139: Il Programma

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

Page 140: Il Programma

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

Page 141: Il Programma

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.

Page 142: Il Programma

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…

Page 143: Il Programma

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

Page 144: Il Programma

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)

Page 145: Il Programma

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”

Page 146: Il Programma

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

Page 147: Il Programma

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

Page 148: Il Programma

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

Page 149: Il Programma

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

Page 150: Il Programma

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

Page 151: Il Programma

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”

Page 152: Il Programma

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

Page 153: Il Programma

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

Page 154: Il Programma

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

Page 155: Il Programma

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

Page 156: Il Programma

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

Page 157: Il Programma

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)

Page 158: Il Programma

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

Page 159: Il Programma

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

Page 160: Il Programma

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

Page 161: Il Programma

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

Page 162: Il Programma

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

Page 163: Il Programma

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”

Page 164: Il Programma

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

Page 165: Il Programma

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

Page 166: Il Programma

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

Page 167: Il Programma

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

Page 168: Il Programma

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

Page 169: Il Programma

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”

Page 170: Il Programma

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

Page 171: Il Programma

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

Page 172: Il Programma

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

Page 173: Il Programma

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

Page 174: Il Programma

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

Page 175: Il Programma

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

Page 176: Il Programma

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

Page 177: Il Programma

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

Page 178: Il Programma

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”

Page 179: Il Programma

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

Page 180: Il Programma

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

Page 181: Il Programma

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.

Page 182: Il Programma

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

Page 183: Il Programma

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

Page 184: Il Programma

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

Page 185: Il Programma

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

Page 186: Il Programma

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

Page 187: Il Programma

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

Page 188: Il Programma

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”

Page 189: Il Programma

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

Page 190: Il Programma

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

Page 191: Il Programma

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

Page 192: Il Programma

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

Page 193: Il Programma

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

Page 194: Il Programma

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

Page 195: Il Programma

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

Page 196: Il Programma

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

Page 197: Il Programma

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

Page 198: Il Programma

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?”)

Page 199: Il Programma

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

Page 200: Il Programma

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€

Page 201: Il Programma

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€

Page 202: Il Programma

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

Page 203: Il Programma

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”

Page 204: Il Programma

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

Page 205: Il Programma

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

Page 206: Il Programma

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

Page 207: Il Programma

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

Page 208: Il Programma

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

Page 209: Il Programma

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

Page 210: Il Programma

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”

Page 211: Il Programma

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

Page 212: Il Programma

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

Page 213: Il Programma

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

Page 214: Il Programma

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

Page 215: Il Programma

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

Page 216: Il Programma

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 “☞”

Page 217: Il Programma

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

Page 218: Il Programma

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

Page 219: Il Programma

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”

Page 220: Il Programma

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

Page 221: Il Programma

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

Page 222: Il Programma

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

Page 223: Il Programma

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

Page 224: Il Programma

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

Page 225: Il Programma

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

Page 226: Il Programma

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

Page 227: Il Programma

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

Page 228: Il Programma

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

Page 229: Il Programma

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€

Page 230: Il Programma

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€

Page 231: Il Programma

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)

Page 232: Il Programma

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

Page 233: Il Programma

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

Page 234: Il Programma

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

Page 235: Il Programma

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

Page 236: Il Programma

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

Page 237: Il Programma

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!!!!!

Page 238: Il Programma

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

Page 239: Il Programma

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

Page 240: Il Programma

Il ProgrammaDalla progettazione all’esecuzione

Una realizzazione di

Gabriele [email protected]

Febbraio 2006