diff --git a/README.md b/README.md
index 948272dae4d718f8391cef823eb1bcac09314634..6b6b01b210416ebdbc1af481d2a22bde3962726d 100644
--- a/README.md
+++ b/README.md
@@ -15,14 +15,33 @@ Per eseguire le istruzioni nel simulatore di CPU, si consiglia di aprire il prog
 trasformato nella sezione **code** del simulatore.
 
 ## Soluzioni degli esercizi del libro
-1. [Esercizio n. 13 pag. 53](libro/e13-quadrato.ed.txt) (Quadrato di un numero)
-2. [Esercizio n. 14 pag. 53](libro/e14-sommaquad.ed.txt) (Somma di quadrati)
-3. [Esercizio n. 16 pag. 53](libro/e16-multiplo7.ed.txt) (Multiplo di 7)
-4. [Esercizio n. 17 pag. 53](libro/e17-conta5.ed.txt) (Conta cifra 5)
-5. [Esercizio n. 18 pag. 53](libro/e18-potenza3.ed.txt) (Potenza di 3)
-6. [Esercizio n. 20 pag. 53](libro/e20-palindromo.ed.txt) (Vettore palindromo)
-
-
-
-
-
+* [Esercizio n. 13 pag. 53](libro/e13-quadrato.ed.txt) (Quadrato di un numero)
+* [Esercizio n. 14 pag. 53](libro/e14-sommaquad.ed.txt) (Somma di quadrati)
+* [Esercizio n. 16 pag. 53](libro/e16-multiplo7.ed.txt) (Multiplo di 7)
+* [Esercizio n. 17 pag. 53](libro/e17-conta5.ed.txt) (Conta cifra 5)
+* [Esercizio n. 18 pag. 53](libro/e18-potenza3.ed.txt) (Potenza di 3)
+* [Esercizio n. 20 pag. 53](libro/e20-palindromo.ed.txt) (Vettore palindromo)
+
+## Esercizi di programmazione in Assembly per CPU Sim
+
+1. [[maggiore](es/maggiore)] - Dati 2 numeri interi a e b memorizzati nelle celle 100 e 101, determinare il 
+   numero maggiore e memorizzare il risultato nella cella 102.
+
+2. [[media](es/media)] - Dati 3 numeri memorizzati nelle celle 101, 102 e 103 determinare la media 
+   aritmetica di tali numeri memorizzando il risultato nella cella 100. 
+   (Nota: risolvere il problema senza ricorrere ai vettori).
+
+3. [[produttoria](es/produttoria)] - Dato un vettore di N numeri, determinare la "*PRODUTTORIA*" degli elementi 
+   memorizzando il risultato in un'opportuna cella di memoria.
+   La produttoria è il risultato del prodotto di tutti gli elementi del vettore.
+
+4. [[contaneg](es/contaneg)] - Dato un vettore di N numeri interi con segno (positivi, negativi o nulli), 
+   contare il numero di valori negativi presenti nel vettore e memorizzare 
+   il risultato nella cella 100.
+
+5. [[multiplo5](es/multiplo5)] - Dato un numero N contenuto nella cella di memoria 100, determinare la cifra 
+   delle unità memorizzandola nella cella 101.
+   Successivamente, utilizzare tale cifra per stabilire se il numero N sia 
+   un multiplo di 5.
+   Se N è multiplo di 5, scrivere il numero 1 nella cella 102, altrimenti 
+   scrivere 0.
diff --git a/es/contaneg/contaneg.ed.txt b/es/contaneg/contaneg.ed.txt
new file mode 100644
index 0000000000000000000000000000000000000000..55b7a54aab1f43807391e95e047b4ff834b7c340
--- /dev/null
+++ b/es/contaneg/contaneg.ed.txt
@@ -0,0 +1,61 @@
+;            File: contaneg.ed.txt
+;
+;          Autore: Roberto FULIGNI
+;
+; Ultima modifica: 16/11/2024
+;
+;     Descrizione: Dato un vettore di N numeri interi con segno (positivi, negativi o nulli), 
+;                  contare il numero di valori negativi presenti nel vettore e memorizzare 
+;                  il risultato nella cella 100. 
+;
+;    MEMORIA RAM (DATA)
+;    Variabile    Indirizzo    Valore  
+;    --------------------------------
+;      conta         100:         ?     (soluzione: 2)
+;      i             101:         ?     
+;      N             102:         5     (dimensione del vettore)
+;      v             103:         0
+;                    104:        -11
+;                    105:         22
+;                    106:        -33
+;                    107:         44
+;
+
+
+SET A #0        
+STO 101         ; i = 0 
+STO 100         ; conta = 0
+
+ciclo:
+LOD R0 101
+LOD R1 102
+SUB
+JMZ fine        ; Salta alla fine del programma se i-N = 0 (cioè se i = N)
+
+LOD R0 101      ; Trasferimento del valore della variabile i nel registro A
+SET R1 #0
+ADD
+MOV IX          ; Sposta A nel registro IX
+
+LOD R0 @103     ; Carica in R0 il valore di v[i]
+SET R1 #0       ; 
+SUB             ; Scrive v[i] nel registro A
+JML negativo    ; se A < 0, salta al codice di aggiornamento del contatore
+
+JMP continua    ; se A non è negativo, continua con la parte rimanente del ciclo
+negativo:
+LOD R0 100      ; Incremento del contatore di numeri negativi (cella 100)
+SET R1 #1
+ADD
+STO 100
+
+continua:
+LOD R0 101      ; Incremento della variabile i
+SET R1 #1
+ADD
+STO 101
+
+JMP ciclo
+
+fine:
+HLT
diff --git a/es/contaneg/contaneg.png b/es/contaneg/contaneg.png
new file mode 100644
index 0000000000000000000000000000000000000000..2acc917ce2156e47736e9bdd8443f57787885113
Binary files /dev/null and b/es/contaneg/contaneg.png differ
diff --git a/es/maggiore/maggiore.ed.txt b/es/maggiore/maggiore.ed.txt
new file mode 100644
index 0000000000000000000000000000000000000000..17f1b03d2fd6a8c75a378b08166293fcad59e027
--- /dev/null
+++ b/es/maggiore/maggiore.ed.txt
@@ -0,0 +1,33 @@
+;            File: maggiore.ed.txt
+;
+;          Autore: Roberto FULIGNI
+;
+; Ultima modifica: 16/11/2024
+;
+;     Descrizione: Dati 2 numeri interi a e b memorizzati nelle celle 100 e 101, 
+;                  determinare il numero maggiore e memorizzare il risultato nella cella 102. 
+;
+;    MEMORIA RAM (DATA)
+;    Variabile    Indirizzo    Valore  
+;    --------------------------------
+;      a             100:         16
+;      b             101:         9
+;      max           102:         ?     (soluzione: 16)
+;
+
+LOD R0 100      ; Carica i valori di a e b rispettivamente in R0 e R1
+LOD R1 101
+SUB
+JMG magg_a      ; Se A > 0, salta alla riga contrassegnata dalla label "magg_a"
+
+SET R0 #0       ; Se non ho eseguito il salto precedente, allora il maggiore è b e lo metto nel registro accumulatore
+ADD
+JMP fine        ; Salta alla parte finale del programma
+
+magg_a:
+SET R1 #0       ; Se arrivo qui, significa che a > b, quindi carico a nell'acculumatore
+ADD
+
+fine:
+STO 102         ; scrivo il valore dell'acculumatore nella cella del risultato
+HLT
diff --git a/es/maggiore/maggiore.png b/es/maggiore/maggiore.png
new file mode 100644
index 0000000000000000000000000000000000000000..bded5e2ac03a67cffdd167551dabb4380c05e0f9
Binary files /dev/null and b/es/maggiore/maggiore.png differ
diff --git a/es/media/media.ed.txt b/es/media/media.ed.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d51f105118ece06fcd40b41869ce81b014af3d62
--- /dev/null
+++ b/es/media/media.ed.txt
@@ -0,0 +1,33 @@
+;            File: media.ed.txt
+;
+;          Autore: Roberto FULIGNI
+;
+; Ultima modifica: 16/11/2024
+;
+;     Descrizione: Dati 3 numeri memorizzati nelle celle 101, 102 e 103 determinare la media 
+;                  aritmetica di tali numeri memorizzando il risultato nella cella 100. 
+;                  (Nota: risolvere il problema senza ricorrere ai vettori). 
+;
+;    MEMORIA RAM (DATA)
+;    Variabile    Indirizzo    Valore  
+;    --------------------------------
+;      m             100:         ?     (soluzione: 5)
+;      x             101:         4
+;      y             102:         8
+;      z             103:         3
+;
+
+
+LOD R0 101      ; Carica i valori di x e y rispettivamente in R0 e R1
+LOD R1 102
+ADD
+MOV R0          ; Sposta la somma temporanea in R0
+LOD R1 103      ; Aggiunge z
+ADD              
+
+MOV R0          ; Sposta nuovamente la somma in R0
+SET R1 #3       ; Divide per il numero di valori processati
+DIV
+
+STO 100         ; Memorizza la media finale nella variabile m (cella 100)
+HLT
diff --git a/es/media/media.png b/es/media/media.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b85ba9f91e3efc38da88fd4c136a15d7b8ef34e
Binary files /dev/null and b/es/media/media.png differ
diff --git a/es/multiplo5/multiplo5.ed.txt b/es/multiplo5/multiplo5.ed.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c6e74f16df24fcf6d284f75ec7b1e515424f1edd
--- /dev/null
+++ b/es/multiplo5/multiplo5.ed.txt
@@ -0,0 +1,53 @@
+;            File: multiplo5.ed.txt
+;
+;          Autore: Roberto FULIGNI
+;
+; Ultima modifica: 16/11/2024
+;
+;     Descrizione: Dato un numero naturale N contenuto nella cella di memoria 100, determinare la cifra 
+;                  delle unità memorizzandola nella cella 101.
+;                  Successivamente, utilizzare tale cifra per stabilire se il numero N sia 
+;                  un multiplo di 5.
+;                  Se N è multiplo di 5, scrivere il numero 1 nella cella 102, altrimenti 
+;                  scrivere 0. 
+;
+;    MEMORIA RAM (DATA)
+;    Variabile    Indirizzo    Valore  
+;    --------------------------------
+;      N             100:         135    
+;      u             101:         ?     
+;      ris           102:         ?      (soluzione: 1)
+
+
+; Calcolo delle unità di N mediante l'algoritmo del resto 
+LOD R0 100      ; Carica N in R0
+SET R1 #10
+DIV
+MOV R0          ; Sposta il quoziente q in R0
+MUL             ; Calcola q * 10 ...
+MOV R1          ; ... e sposta il risultato in R1
+
+LOD R0 100      ; Ricarica N in R0
+SUB             ; Determina il resto della divisione come R0 - R1 (cioè N - q*10)
+STO 101         ; Scrive il resto nella variabile delle unità
+
+; Per determinare se N sia un multiplo di 5, occorre confrontare u con lo zero e con il cinque.
+
+LOD R0 101
+SET R1 #0
+SUB
+JMZ multiplo5   ; Se A = 0, allora u = 0 e il numero N è un multiplo di 5.
+
+SET R1 #5
+SUB
+JMZ multiplo5   ; Se A = 0, allora u-5 = 0 (cioè u = 5) e il numero N è di nuovo un multiplo di 5.
+
+SET A #0        ; N non è multiplo di 5, ris = 0
+JMP fine
+
+multiplo5:
+SET A #1        ; N è multiplo di 5, ris = 1
+
+fine:
+STO 102         ; Memorizza il risutato finale nella cella richiesta
+HLT
diff --git a/es/multiplo5/multiplo5.png b/es/multiplo5/multiplo5.png
new file mode 100644
index 0000000000000000000000000000000000000000..f763baa983b755af5233a3ba35865d1716ab7b0a
Binary files /dev/null and b/es/multiplo5/multiplo5.png differ
diff --git a/es/produttoria/produttoria.ed.txt b/es/produttoria/produttoria.ed.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ded2350f2c42d7c8bc986acd288152c8688b3177
--- /dev/null
+++ b/es/produttoria/produttoria.ed.txt
@@ -0,0 +1,53 @@
+;            File: produttoria.ed.txt
+;
+;          Autore: Roberto FULIGNI
+;
+; Ultima modifica: 16/11/2024
+;
+;     Descrizione: Dato un vettore di N numeri, determinare la "PRODUTTORIA" degli elementi 
+;                  memorizzando il risultato in un'opportuna cella di memoria.
+;                  La produttoria è il risultato del prodotto di tutti gli elementi del vettore. 
+;
+;    MEMORIA RAM (DATA)
+;    Variabile    Indirizzo    Valore  
+;    --------------------------------
+;      i             100:         ?     
+;      prod          101:         ?     (soluzione: 120)
+;      N             102:         4     (dimensione del vettore)
+;      v             103:         2
+;                    104:         4
+;                    105:         5
+;                    106:         3
+;
+
+
+SET A #0        ; i = 0
+STO 100
+SET A #1        ; prod = 1
+STO 101
+
+ciclo:
+LOD R0 100
+LOD R1 102
+SUB
+JMZ fine        ; Salta alla fine del programma se i-N = 0 (cioè se i = N)
+
+LOD R0 100      ; Trasferimento del valore della variabile i nel registro A
+SET R1 #0
+ADD
+MOV IX          ; Sposta A nel registro IX
+
+LOD R0 101      ; Carica in R0 il prodotto elaborato fino a questo momento
+LOD R1 @103     ; Carica in R1 il valore di v[i]
+MUL             ; Aggiorna la produttoria
+STO 101
+
+LOD R0 100      ; Incremento della variabile i
+SET R1 #1
+ADD
+STO 100
+
+JMP ciclo
+
+fine:
+HLT
diff --git a/es/produttoria/produttoria.png b/es/produttoria/produttoria.png
new file mode 100644
index 0000000000000000000000000000000000000000..189610f48c4b5142dfcc8e488b73175e74524cb5
Binary files /dev/null and b/es/produttoria/produttoria.png differ