Il Programma

Preview:

DESCRIPTION

Il Programma. Dalla progettazione all’esecuzione. Perché programmare?. Un programma è un insieme di istruzioni che “insegna” al computer come svolgere particolari compiti che l’uomo preferisce delegare ad una macchina, che li può eseguire in maniera più veloce o più efficiente. - PowerPoint PPT Presentation

Citation preview

Il Programma

Dalla progettazione all’esecuzione

Perché programmare?

Un programma è un insieme di istruzioni che “insegna” al computer come svolgere particolari compiti che l’uomo preferisce delegare ad una macchina, che li può eseguire in maniera più veloce o più efficiente

Il programma in 6 fasi

•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione•Compilare il programma•Eseguire il programma

Il programma in 6 fasi

•Capire e descrivere il problema

1. Descrizione del problema

Problema: il signor Trinciapolli possiede una macelleria, e per fare il conto per i suoi clienti deve addizionare un certo numero di addendi.

Il programma in 6 fasi

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

2. Ricerca algoritmo

Problema: il signor Trinciapolli possiede una macelleria, e per fare il conto per i suoi clienti deve addizionare un certo numero di addendi.Metodo risolutivo (algoritmo): il signor Trinciapolli fornisce al computer il numero di acquisti che il cliente ha effettuato e poi ciascun importo parziale e il computer gli mostrerà sullo schermo il totale.Nota: il sistema di fornire prima il numero di addendi non è comodo per il signor Trinciapolli; ma è stato scelto per semplificare il procedimento per il lettore

2. Algoritmo in linguaggio naturale

Il programma del Trinciapolli deve quindi:1. Mostrare un titolo2. Chiedere quanti sono gli addendi e ottenere una

risposta, che memorizzerà in una cella di memoria che chiama N

3. Porre somma = 0 e k = 04. Finché k < N

1. Chiedere l’addendo N-esimo e ottenere una risposta (num)

2. Sommare l’addendo N-esimo a somma5. Visualizzare il risultato sullo schermo6. Terminare il programma

In blu sono state indicate le variabili, ovvero quelle parti del programma che cambiano valore durante l’esecuzione

In verde trovate le costanti, che non cambiano

maiAlcune osservazioni

Il programma in 6 fasi

•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo

3. Diagramma a blocchi1. Mostrare un titolo2. Chiedere quanti sono gli

addendi e ottenere una risposta, che memorizzerà in una cella di memoria che chiama N

3. Porre somma = 0 e k = 0

4. Finché k < N

1. Chiedere l’addendo N-esimo e ottenere una risposta (num)

2. Sommare l’addendo N-esimo a somma

5. Visualizzare il risultato sullo schermo

6. Terminare il programma

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

3. Diagramma a blocchi

Prendiamoci una piccola pausa perché il signor Trinciapolli non ha capito esattamente.Riprendiamo il diagramma e seguiamo il “flusso”, ovvero vediamo un po’ cosa succede nelle varie fasi…

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

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

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

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

acquisti ha fatto la cliente

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma memorizza il numero di

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

N

3

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma pone somma e k uguali a 0

N

3somma

0k

0

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede se k < N.

N

3somma

0k

0

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

In questo caso la risposta è sì

N

3somma

0k

0

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma mostra la scritta “Prossimo

addendo?”

N

3somma

0k

0

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma memorizza il primo

addendo, che il Trinciapolli digita sulla

tastiera (supponiamo 6€)

N

3somma

0k

0num

6

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

0k

0num

6

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

0num

6

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

0num

6

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

1num

6

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede se k < N.

La risposta è ancora sì

N

3somma

6k

1num

6

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

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

mette in num (supponiamo 2€)

N

3somma

6k

1num

6

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

N

3somma

6k

1num

2

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

mette in num (supponiamo 2€)

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

6k

1num

2

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

8k

1num

2

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

8k

2num

2

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede se k < N.

La risposta è ancora sì

N

3somma

8k

2num

2

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

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

mette in num (supponiamo 10€)

N

3somma

8k

2num

2

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

N

3somma

8k

2num

10

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

mette in num (supponiamo 10€)

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

8k

2num

10

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

18k

2num

10

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma incrementa somma di

num e k di 1

N

3somma

18k

3num

10

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma si chiede ancora se k < N.

La risposta è, finalmente, no

N

3somma

18k

3num

10

3. Diagramma a blocchiINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma mostra sullo schermo il

contenuto di somma, che è il risultato del

programma

N

3somma

18k

3num

10

Il programma in 6 fasi

•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione

4. Il programma in Pascal

Mostreremo ora, a partire dal diagramma a blocchi, come sia facile scrivere il programma.A titolo di esempio si è scelto come linguaggio di programmazione il Pascal, ma un altro linguaggio non presenterebbe sensibili differenze.

4. Il programma in PascalProgram Trinciapolli;

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Titolo del programma

4. Il programma in PascalProgram Trinciapolli;Var N, somma, k, num: integer;

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Elenco delle variabili, che

contengono numeri interi

4. Il programma in PascalProgram Trinciapolli;Var N, somma, k, num: integer;Begin

Writeln(‘Somma’);Writeln(‘Quanti?’);Readln(N);Somma := 0;k :=0;While k < N then

BeginWriteln(‘Prossimo

addendo?’);Readln(num);Inc(somma, num);Inc(k, 1);

End;Writeln(somma)

End.

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

Il programma in 6 fasi

•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione•Compilare il programma

5. Compilazione

Una notizia buona e una cattiva.Quella buona è per il Trinciapolli: ormai lui non deve fare più niente, il programma è completo e gli basta premere il tasto “compila” del Turbo Pascal o del Free Pascal per avere direttamente il programma funzionante…Quella cattiva è invece per i lettori che hanno ancora voglia di seguirmi: inizia una fase un tantino complicata di questo corso… Ma comincia anche la parte più interessante, che ci mostra la genialità di quelle teste che hanno costruito i primi computer.

Armatevi di un po’ di pazienza, e proseguiamo!

5. Compilazione

La compilazione è un’operazione chiave: è quella che trasforma il programma, così come l’abbiamo scritto ora, in un insieme di simboli e numeri, detto compilato, comprensibile al computer (molto meno a noi…), in modo che possa essere eseguito.

5. Compilazione

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

Memoria byte

5. Compilazione

Ogni byte, poi è formato da 8 bit (=binary digit). Ogni bit è come un “interruttore”, che può essere acceso o spento (ovvero può valere 1 o 0). Per chi conosce un po’ la matematica ad aritmetiche finite, sarà intuitivo che in un byte possiamo memorizzare un numero da 0 a 255 (28-1).

1 0 1 1 1 0 1 1

byte

bit bit bit bit bit bit bit bit

5. Compilazione

Un byte può contenere anche un carattere, come una lettera, un numero o un simbolo (ad esempio di punteggiatura).Per memorizzare un testo, invece, dobbiamo usare una stringa (insieme di caratteri). Una stringa occupa quindi tanti bytes quante sono le sue lettere, più uno iniziale che esprime appunto la lunghezza.

4 C i a o

string Questa stringa occupa 5 bytes

5. Compilazione

Per memorizzare un numero che vada oltre il 255, dobbiamo usare più di un byte: ad esempio con 2 bytes possiamo arrivare al numero 65535 (216-1)Fatte queste premesse, torniamo al programma…

Un’ultima precisazione: il computer che simuleremo nei prossimi passaggi non è un personal computer, ma una macchina immaginaria, spesso semplificata, comunque il più possibile aderente al computer “normale”

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

0 W string

A sinistra abbiamo indicato l’indirizzo

dove si trova in memoria questa istruzione (che,

essendo la prima, ha indirizzo 0)

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

0 W string

Segue il codice di funzione (l’abbiamo

chiamato W, per Writeln), e il

sottocodice (string significa che è un

insieme di caratteri, ovvero un insieme di

lettere)

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

0 W string

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

meglio come funzioni questa fase.

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

0 W string

Per ora lasciamo due bytes vuoti: non uno

solo perché così possiamo arrivare a scrivere un indirizzo fino a 65535 anziché

fino a 255

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

WW

string

string

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

prima, con sottofunzione string

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8

WWR

string

string

int

C’è poi una Readln, e questa volta la

sottofunzione è int: dobbiamo leggere un

numero intero.

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8

WWR

string

string

int

Lasciamo lo spazio per indicare dove

andrà memorizzato il valore immesso

dall’utente

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216

WWRZZ

string

string

int

Supponiamo che esista una funzione “azzera” (indicata

con Z).

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216

WWRZZ

string

string

int

Il codice di sottofunzione rimane vuoto; lasciamo poi

lo spazio per indicare cosa

azzerare

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8121620

WWRZZ<

string

string

int

int

La funzione seguente serve a verificare se due

interi sono il primo minore dell’altro

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8121620

WWRZZ<

string

string

int

int

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

per il secondo

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8121620

WWRZZ<

string

string

int

int

Gli ultimi due bytes servono per indicare

dove andare se il risultato è falso

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

812162028

WWRZZ<W

string

string

int

int

string

Ancora una Writeln di un

testo

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216202832

WWRZZ<WR

string

string

int

int

string

int

Readln di un numero intero

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

812162028323644

WWRZZ<WR++

string

string

int

int

string

int

int

int

Per le somme dobbiamo

indicare innanzi tutto che si tratta

di interi

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

812162028323644

WWRZZ<WR++

string

string

int

int

string

int

int

int

Poi dobbiamo specificare dov’è il primo numero;

dov’è il secondo e dove va messo il

risultato

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

81216202832364452

WWRZZ<WR++☞

string

string

int

int

string

int

int

int

Questa è un’istruzione di salto: dobbiamo specificare dove

“andare”

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

8121620283236445256

WWRZZ<WR++☞W

string

string

int

int

string

int

int

int

int

Questa Writeln deve mostrare un numero intero.

Lasciamo poi lo spazio per

indicare quale

5. Compilazione04

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

812162028323644525660

WWRZZ<WR++☞W•

string

string

int

int

string

int

int

int

int

Indichiamo che il programma

ha termine

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

048

12162028323644525660

WWRZZ<WR++☞W•

string

string

int

int

string

int

int

int

int

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

048

12162028323644525660

WWRZZ<WR++☞W•

string

string

int

int

string

int

int

int

int

Ora compattiamo un po’ inmodo da avere più spazio

libero

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

048

12162028323644525660

WWRZZ<WR++☞W•

string

string

int

int

string

int

int

int

int

0 1 2 3

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

0

812162028323644525660

W W

RZZ<WR++☞W•

string string

int

int

string

int

int

int

int

0 1 2 3 4 5 6 7

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

162028323644525660

W W R

ZZ<WR++☞W•

string string int

int

string

int

int

int

int

1 2 3 4 5 6 7 8 9

12

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

162028323644525660

W W RZ

Z<WR++☞W•

string string int

int

string

int

int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2028323644525660

W W RZ Z

<WR++☞W•

string string int

int

string

int

int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

20

28323644525660

W W RZ Z

<

WR++☞W•

string string int

int

string

int

int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030

323644525660

W W RZ Z

< W

R++☞W•

string string int

int string

int

int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030

3644525660

W W RZ Z

< WR

++☞W•

string string int

int string

int

int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

203040

44525660

W W RZ Z

< WR +

+☞W•

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

20304050

525660

W W RZ Z

< WR +

+

☞W•

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

20304050

5660

W W RZ Z

< WR +

+☞

W•

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

20304050

60

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Il programma in memoria è,per ora, come appare qui sopra.Se vi sembra confuso, vedrete

che poi… peggiora

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Ora dobbiamo aggiungerein coda al programma tutte

le costanti.

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Iniziamo con la prima: è la stringa“Somma”, e quindi prima

specifichiamo quanto è lunga, poi introduciamo ogni lettera

5 m mS o a

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Ora la seconda: è ancorauna stringa, “Quanti?”

m5 mS o a 7 Qu a ?n t i70

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Ora la terza:“Prossimo addendo?”

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

L’ultima costante è numerica: 1

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Passiamo infine alle variabili:la prima è N, ed è numerica;scriviamo [N] per ricordarci

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Poi somma, ancora numerico

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Poi k

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Poi num

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Finalmente il programma ècompleto e occupa 104 bytes

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Ora dobbiamo tornare indietroa riempire i buchi che avevamo

lasciato…

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Qui dobbiamo specificare dovesi trova quello che vogliamo

scrivere con la prima istruzione

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

1 2 3 4 5 6 7 8 9

Si tratta di “Somma”,memorizzata a partire dal byte

62

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

621 2 3 4 5 6 7 8 9

Memorizziamo quindi 62

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

621 2 3 4 5 6 7 8 9

Analogamente completiamoil secondo “buco” con 68

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 681 2 3 4 5 6 7 8 9

Analogamente completiamoil secondo “buco” con 68

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 681 2 3 4 5 6 7 8 9

Qui dobbiamo indicare dove va memorizzato il valore letto da

tastiera

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 681 2 3 4 5 6 7 8 9

La risposta è a partire dal byte96

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896

1 2 3 4 5 6 7 8 9

La risposta è a partire dal byte96

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896

1 2 3 4 5 6 7 8 9

Il primo valore da azzerareè contenuto dalla posizione 98

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98

1 2 3 4 5 6 7 8 9

Il primo valore da azzerareè contenuto dalla posizione 98

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98

1 2 3 4 5 6 7 8 9

Il secondo valore da azzerarecomincia al byte 100

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

1 2 3 4 5 6 7 8 9

Il secondo valore da azzerarecomincia al byte 100

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

1 2 3 4 5 6 7 8 9

Ora dobbiamo confrontare k e N:quindi dobbiamo scrivere

100 e 96

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

100 96

1 2 3 4 5 6 7 8 9

Ora dobbiamo confrontare k e N:quindi dobbiamo scrivere

100 e 96

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

100 96

1 2 3 4 5 6 7 8 9

Qui dobbiamo dire dove andarese k dovesse essere

maggiore di N

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

100 96

1 2 3 4 5 6 7 8 9

Dovremmo andare all’ultimaistruzione Writeln, che comincia

al byte 56

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

100 96 56

1 2 3 4 5 6 7 8 9

Dovremmo andare all’ultimaistruzione Writeln, che comincia

al byte 56

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

100 96 56

1 2 3 4 5 6 7 8 9

Ora indichiamo dove si trova“Prossimo addendo?”: al

byte 76

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076

96 56

1 2 3 4 5 6 7 8 9

Ora indichiamo dove si trova“Prossimo addendo?”: al

byte 76

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076

96 56

1 2 3 4 5 6 7 8 9

Dobbiamo memorizzare num,che va posto dal byte 102 in poi

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102

96 56

1 2 3 4 5 6 7 8 9

Dobbiamo memorizzare num,che va posto dal byte 102 in poi

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102

96 56

1 2 3 4 5 6 7 8 9

Ora dobbiamo sommare sommae num: indichiamo quindi

98 e 102

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

96

102

56

1 2 3 4 5 6 7 8 9

Ora dobbiamo sommare sommae num: indichiamo quindi

98 e 102

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

96

102

56

1 2 3 4 5 6 7 8 9

Dove va posto il risultato dellasomma? Ancora in somma,

in posizione 98

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

96

102

56

98

1 2 3 4 5 6 7 8 9

Dove va posto il risultato dellasomma? Ancora in somma,

in posizione 98

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

96

102

56

98

1 2 3 4 5 6 7 8 9

Ora dobbiamo sommare k,che si trova al byte 100, con

la costante 1, al byte 94

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

100

96

102 94

56

98

1 2 3 4 5 6 7 8 9

Ora dobbiamo sommare k,che si trova al byte 100, con

la costante 1, al byte 94

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

100

96

102 94

56

98

1 2 3 4 5 6 7 8 9

Il risultato va in k, al byte 100

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

100

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

Fatte le somme, dobbiamotornare indietro al byte 20

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. CompilazioneINIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

Fatte le somme, dobbiamotornare indietro al byte 20

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. Compilazione0

10

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

Infine dobbiamo mostraresullo schermo il contenuto di

somma, al byte 98

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

5. Compilazione0

10

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

Infine dobbiamo mostraresullo schermo il contenuto di

somma, al byte 98

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

INIZIO

“Somma”

“Quanti?”

N0 somma

0 k

k < N?

“Prossimo addendo?”

numsomma + num somma

k + 1 k

somma

no

FINE

5. Compilazione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

5. Compilazione

Quello che abbiamo appena visto è il programma oggetto o programma compilato.Ma è pieno di istruzioni complesse: ad esempio “mostra sullo schermo” (Writeln) dovrebbe essere scomposta in tantissime fasi di dialogo fra la scheda video e il programma. Tutte queste istruzioni sono, per così dire, già pronte in un linguaggio di programmazione.

5. Compilazione

Inizia quindi la fase di linking: il compilatore indica al computer come queste istruzioni complesse siano in realtà scomponibili in semplici istruzioni.Per semplicità salteremo questo passaggio, per andare direttamente all’ultimo stadio del programma…

Il programma in 6 fasi

•Capire e descrivere il problema•Trovare un metodo risolutivo e formularlo in linguaggio naturale (lingua corrente)•Elaborare un “diagramma a blocchi” del metodo risolutivo•Trascrivere il diagramma in un linguaggio di programmazione•Compilare il programma•Eseguire il programma

6. Esecuzione

Dunque… lo scopo di quest’ultima parte del corso è spiegare, attraverso un modello di “computer ideale”, come avvenga l’esecuzione del programma che abbiamo appena approntato.Iniziamo a vedere come sia fatto, concettualmente, un computer.

6. EsecuzioneIndividuiamo innanzi tutto due sezioni importanti del computer:•CPU: è la parte “pensante”, che elabora i dati•Periferiche: sono le parti esterne, come il monitor, la tastiera, il modem, la stampante, …

CPU

Periferiche

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

CPU

Periferiche

6. EsecuzionePerifericheSi dividono in:•Periferiche di InputConsentono di immettere dati. Es.: tastiera, mouse, scanner

•Periferiche di OutputConsentono di mostrare dati. Es.: schermo, stampante

•Periferiche I/OSvolgono entrambe le funzioni. Es.: modem, fax, schermi touch screen

CPU

Periferiche

6. EsecuzioneCPUDistinguiamo:•Program counter•Sezione indirizzamento•Registro decodifica•Arithmetic – logic unit (ALU)•Governo Input/Output

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

Registro Decodifica

Unità logico-aritm.

Governo I/O

6. EsecuzioneCPU: Program counterHa una funzione molto semplice: indicare “a che punto siamo” nell’esecuzione del programma (per questo gli affianchiamo una casellina con un numero).

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

Registro Decodifica

Unità logico-aritm.

Governo I/O

0

6. EsecuzioneCPU: Sezione indirizzamentoÈ composta da:•Registro indirizziSi occupa di “scartabellare” nel Core. Possiamo immaginarlo come un magazziniere.

•CoreÈ la memoria RAM, dove è contenuto tutto il programma. È il vero e proprio magazzino.

•Registro datiÈ un registro temporaneo, per tenere i pochi bytes che devono essere elaborati. È come un carrello.

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

Registro Decodifica

Unità logico-aritm.

Governo I/O

0

6. EsecuzioneCPU: Registro decodificaContiene l’elenco di tutti i comandi che il processore è in grado di effettuare, e, dopo aver riconosciuto ciascuna operazione da eseguire, la smista alla zona della CPU di pertinenza: in particolare si tratterà di un circuito dell’unità logico-aritmetica o di un circuito della sezione di governo I/O.

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

6. EsecuzioneCPU: Unità logico-aritmeticaEffettua operazioni aritmetiche (somma, differenza, prodotto, divisione, modulo), logiche (confronto, coordinazione) e tutte le altre operazioni che modificano o elaborano i dati presenti nella memoria.

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

6. EsecuzioneCPU: Governo I/OGestisce le periferiche, ovvero comunica con i componenti esterni (schermo, tastiera) o con i circuiti “specializzati” (schede video, audio, Lan, ecc.).

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

6. Esecuzione

Ora affianchiamo il programma allo schema della CPU. Come abbiamo detto, esso è contenuto nel Core, per questo lo colleghiamo con esso.Abbiamo creato anche qualche altro collegamento fra le varie aree della CPU, poi sarà chiaro il perché fra poco.

6. Esecuzione

Pronti per l’ultima tranche?Ora, come avevamo fatto con il diagramma a blocchi, seguiamo il flusso del programma e lo vedremo funzionare!Immagino già l’emozione…

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il programma inizia dal Program Counter, che

indica 0: la prima istruzione da eseguire è al

posto 0

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il registro indirizzi chiede al Core che cosa c’è in

posizione 0 e 1 (le istruzioni sono sempre

lunghe 2 bytes)

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il Core risponde “W string”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il Registro Decodifica sa che questo significa

“scrivi una stringa” e che è un’istruzione lunga 4

bytes

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

0

Registro Decodifica

Unità logico-aritm.

Governo I/O

Quindi somma 4 al Program Counter

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

Quindi somma 4 al Program Counter

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

Poi richiede alla memoria che cosa deve mostrare

sullo schermo

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

Poi richiede alla memoria che cosa deve mostrare

sullo schermo

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il Core risponde: “guarda a partire dal byte 62”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

Questa informazione è memorizzata nel Registro

Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Questa informazione è memorizzata nel Registro

Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Il Registro Decodifica ora attiva il circuito della

sezione di governo I/O per mostrare le stringhe

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Il governo I/O sa quindi che deve mostrare una

stringa, e vede dal Registro Dati che essa

comincia al byte 62

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Al byte 62 scopre che la stringa è lunga 5: legge quindi i 5 bytes seguenti

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Ottenuta la parola “Somma”, la invia alla periferica interessata

(nell’ipotesi, lo schermo)

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Ora la prima istruzione è terminata: l’esecuzione “ricomincia” da capo

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Il Program Counter indica 4, e quindi verrà eseguita l’istruzione che comincia

al byte 4

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

4

Registro Decodifica

Unità logico-aritm.

Governo I/O

62

Questa è del tutto analoga alla precedente, quindi salteremo direttamente

alla successiva

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

8

Registro Decodifica

Unità logico-aritm.

Governo I/O

Questa è del tutto analoga alla precedente, quindi salteremo direttamente

alla successiva

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

8

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il registro indirizzi chiede al Core che cosa c’è in

posizione 8 e 9

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

8

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il Core risponde “R int”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

8

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il Registro Decodifica sa che questo significa “leggi

un intero” e che è un’istruzione lunga 4

bytes

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

8

Registro Decodifica

Unità logico-aritm.

Governo I/O

Quindi somma 4 al Program Counter

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

Quindi somma 4 al Program Counter

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

Poi richiede alla memoria dove deve memorizzare

ciò che legge dalla tastiera

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

Poi richiede alla memoria dove deve memorizzare

ciò che legge dalla tastiera

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

Il Core risponde: “guarda a partire dal byte 96”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

Questa informazione è memorizzata nel Registro

Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Questa informazione è memorizzata nel Registro

Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Il Registro Decodifica ora attiva il circuito della

sezione di governo I/O per leggere i numeri interi

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Il governo I/O sa quindi che deve mostrare una

stringa, e vede dal Registro Dati che essa

comincia al byte 62

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Supponiamo che il Trinciapolli introduca 3

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 [N] [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Questo numero viene memorizzato in posizione

96, come indica il Registro Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Questo numero viene memorizzato in posizione

96, come indica il Registro Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Anche questa istruzione è terminata, e il Program

Counter indica di ricominciare dal byte 12

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Il Core indica al Registro Decodifica che dobbiamo

eseguire “Z”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

12

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Il Registro Decodifica riconosce “Z”: si tratta di

“azzera”, lunga 4

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

16

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Il Program Counter viene incrementato di 4

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

16

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Il Registro Decodifica chiede quale byte debba

essere azzerato.

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

16

Registro Decodifica

Unità logico-aritm.

Governo I/O

96

Il Core risponde 98: questo numero è

memorizzato nel Registro Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

16

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Registro Decodifica indica alla memoria di impostare il byte 98 al

valore 0

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 [s]

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

16

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Core esegue

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

16

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Core esegue

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

[k]100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

16

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Si riparte dall’istruzione in posizione 16, che non

discutiamo perché analoga alla precedente

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

100

Siamo ora all’istruzione che occupa il posto 20

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

100

Il Core indica al Registro Decodifica che si tratta di

un “< int”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

100

Il Registro Decodifica sa che deve confrontare due

interi, e che è un’istruzione lunga 8

bytes

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

100

Pertanto somma 8 al Program Counter

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

100

Pertanto somma 8 al Program Counter

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

100

Poi chiede al Core dove sono i valori da

confrontare

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

100;96

Il Core risponde che si trovano al posto 100 e 96 e ripone questi valori nel

Registro Dati

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

100;96

Il Registro Dati chiede allora quali siano questi

valori

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

100;96

Il Registro Dati chiede allora quali siano questi

valori

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

0;3

Il Core risponde che valgono 0 e 3

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

0;3

Il registro passa questi numeri all’unità logica

che li confronta. Visto che 0<3 l’esecuzione procede

normalmente

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

28

Registro Decodifica

Unità logico-aritm.

Governo I/O

0;3

Si tratta della già nota istruzione per mostrare una stringa (“Prossimo

addendo?”)

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

32

Registro Decodifica

Unità logico-aritm.

Governo I/O

76

Saltiamo alla “R int”, che legge un’intero

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 [n]

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

32

Registro Decodifica

Unità logico-aritm.

Governo I/O

76

Abbiamo già spiegato come funzioni, quindi ci limitiamo ad immettere nel posto “giusto” (byte

102), ad es., 6€

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

32

Registro Decodifica

Unità logico-aritm.

Governo I/O

102

Abbiamo già spiegato come funzioni, quindi ci limitiamo ad immettere nel posto “giusto” (byte

102), ad es., 6€

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

36

Registro Decodifica

Unità logico-aritm.

Governo I/O

102

Passiamo ad un’istruzione nuova: quella di somma

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

36

Registro Decodifica

Unità logico-aritm.

Governo I/O

102

Il Core comunica che si tratta di un “+ int”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

36

Registro Decodifica

Unità logico-aritm.

Governo I/O

102

Il Registro Decodifica riconosce e incrementa il

Program Counter di 8

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

102

Il Registro Decodifica riconosce e incrementa il

Program Counter di 8

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

102

Il Registro Decodifica chiede dove si trovino i

numeri da sommare

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

98;102

Il Core risponde che si trovano in posizione 98 e

102; il Registro Decodifica chiede quanto

valgano questi

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

0;6

Il Core risponde 0 e 6

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

0;6

L’unità aritmetica svolge il calcolo e risponde che

la somma è 6

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Registro Decodifica chiede dove memorizzare questo 6: il Core risponde

“alla posizione 98”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 0

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Registro Decodifica indica al Core di memorizzare alla

posizione 98 il valore 6

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Core esegue

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

L’istruzione seguente opera nella stessa

maniera, sommando il numero in posizione 100 e

quello in posizione 94

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

0100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il risultato (0+1 0) è posto alla posizione 100

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

44

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il risultato (0+1 1) è posto alla posizione 100

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

52

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Troviamo ora un’istruzione nuova: il

Program Counter indica 52, e in posizione 52 il

Core trova “☞”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

52

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Registro Decodifica riconosce che deve “saltare”, ovvero

modificare il Program Counter

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

52

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Chiede quindi al Core da dove deve ricominciare

l’esecuzione

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

52

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Core risponde “a partire dalla posizione 20”

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

52

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Registro Decodifica reimposta il Program

Counter a 20

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Registro Decodifica reimposta il Program

Counter a 20

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Program Counter ora indica 20: pertanto

l’esecuzione ripartirà da qui

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Vengono confrontati i valori in posizione 100 e

96

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

1<3, quindi l’esecuzione prosegue regolarmente,

come prima

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

1<3, quindi l’esecuzione prosegue regolarmente,

come prima

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 6

1100 6

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Supponiamo che l’utente introduca 2€ come

importo e aggiorniamo i vari valori; poi si

ricomincia ancora dalla 20

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 8

2100 2

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Supponiamo che l’utente introduca 2€ come

importo e aggiorniamo i vari valori; poi si

ricomincia ancora dalla 20

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 8

2100 2

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

2<3, quindi l’esecuzione prosegue regolarmente,

come prima

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 8

2100 2

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Supponiamo che l’utente introduca questa volta 10€

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Supponiamo che l’utente introduca questa volta 10€

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

A questo punto, ciò che si trova in posizione 100 non è più minore di ciò che si trova in 96 (3=3)

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Quindi il Registro Decodifica sa che in

questo caso deve saltare, e chiede al Core dove

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

20

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Core risponde “alla posizione 56”, e il

Registro Decodifica imposta il Program

Counter a 56

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

56

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il Core risponde “alla posizione 56”, e il

Registro Decodifica imposta il Program

Counter a 56

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

56

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

L’esecuzione ricomincia dal Program Counter, che

indica di accedere appunto alla posizione 56

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

56

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Questa “W int”, molto simile alle precedenti “W

string”, mostra il contenuto della cella di

posto 98

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

56

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Questo valore è 18, il risultato del conto del

Trinciapolli!!!!!

6. Esecuzione

010

0

2030405060

W W RZ Z

< WR +

+☞ W

string string int

int string

int int

int

int

62 6896 98 100

10076 102 98

10020 98

96

102 94

56

98100

1 2 3 4 5 6 7 8 9

m5 mS o a 7 Qu a ?n t i70 17 P r os s i m o A d d en d o ?

8090 1 3 18

3100 10

CPU

Periferiche

Program Counter

Registro IndirizziCore

Registro Dati

60

Registro Decodifica

Unità logico-aritm.

Governo I/O

98

Il programma si conclude quando, in posizione 60,

si trova il simbolo “•”, che indica la fine

Epilogo

Allora, com’è andata?Il nostro viaggio nella programmazione si è concluso.Morale della favola: il Trinciapolli avrebbe potuto comprare una cassa invece di costringerci a scrivergli un programma

Il ProgrammaDalla progettazione all’esecuzione

Una realizzazione di

Gabriele Agliardigabrieleagl@gmail.com

Febbraio 2006