Somma 4+2
Esegui con Johnny Simulator la somma di due numeri presenti in RAM. Osserva le macroistruzioni, la Control Unit, l'accumulatore e il salvataggio del risultato.
1. Prepara la simulazione
Leggi il programma nelle celle RAM: lo scenario iniziale rappresenta 2 + 3.
Apri il simulatore e riproduci in RAM la situazione mostrata nell'immagine. Gli indirizzi iniziali da usare sono 000–007. Inserisci nelle colonne Hi e Lo i codici indicati nella tabella: non è necessario cercare il programma nel manuale.

Come leggere la RAM: programma e dati iniziali
La tabella riporta le celle da compilare nel simulatore. Adr identifica la cella, Hi indica il codice operativo nelle istruzioni e Lo contiene l'operando o il valore memorizzato nelle celle dei dati.
| RAM | Significato | Descrizione | ||
|---|---|---|---|---|
| Adr | Hi | Lo | ||
| 000 | 01 | 006 | TAKE 006 | Carica in AC il contenuto della cella RAM 006. |
| 001 | 02 | 007 | ADD 007 | Somma ad AC il contenuto della cella RAM 007. |
| 002 | 04 | 005 | SAVE 005 | Salva il contenuto di AC nella cella RAM 005. |
| 003 | 10 | 000 | HLT 000 | Arresta l'esecuzione del programma. |
| 004 | 00 | 000 | — | Cella non utilizzata nel programma. |
| 005 | 00 | 000 | Risultato | Cella inizialmente a zero, destinata a contenere la somma. |
| 006 | 00 | 002 | Primo addendo | Contiene il numero 2. |
| 007 | 00 | 003 | Secondo addendo | Contiene il numero 3. |
Come leggere la RAM
Adr è l'indirizzo della cella; Hi è il codice della macroistruzione quando la cella contiene un comando; Lo è il campo operando. In TAKE 006 e ADD 007 il numero in Lo è un indirizzo, non il numero da sommare. Per le celle di dati 006 e 007, invece, 00 002 e 00 003 sono i valori memorizzati.
Esempio: TAKE 006 legge il valore 002 contenuto nella RAM all'indirizzo 006.
2. Esegui tutto il programma
Il doppio triangolo verde avvia l'esecuzione automatica delle macroistruzioni.
| Cella RAM | Macroistruzione | Effetto |
|---|---|---|
| 000 | TAKE 006 | Carica in AC il valore 002 della cella 006. |
| 001 | ADD 007 | Somma a AC il valore 003 della cella 007. |
| 002 | SAVE 005 | Salva il contenuto di AC nella cella 005. |
| 003 | HLT 000 | Arresta l'esecuzione. |
Avvia il programma
Premi il tasto con due triangoli verdi nella barra Macro Code. Johnny esegue le istruzioni in successione fino a HLT.

Risultato
002 + 003 = 005. Alla fine l'accumulatore (AC) contiene 005 e la cella RAM 005 contiene 005. Le celle 006 e 007 non cambiano.

| Memoria / registro | Prima | Dopo |
|---|---|---|
| RAM 006 | 002 | 002 |
| RAM 007 | 003 | 003 |
| RAM 005 | 000 | 005 |
| AC | 000 | 005 |
Nota: il valore 005 del risultato non va confuso con l'indirizzo 005 usato da SAVE.
3. Visualizza la Control Unit
Mostra i registri e i controlli delle microistruzioni.
Premi il tasto Ctrl, contrassegnato dagli ingranaggi, per rendere visibile la Control Unit e la barra Micro Code.

Vedrai anche il Program Counter (PC), che indica l'indirizzo della prossima istruzione; l'Instruction Register (IR/INS), che contiene il comando prelevato; e l'accumulatore (AC), che contiene dati e risultati.

RAM[005] a 00 000. Il Reset dei registri non cancella necessariamente i valori scritti in RAM: controllali.4. Osserva una macroistruzione alla volta
Usa il triangolo verde singolo nella barra Macro Code; registra i valori dopo ogni passo.
Confronta le schermate con il simulatore. I valori mostrati sui bus si riferiscono all'istante catturato: possono variare anche all'interno della stessa macroistruzione. I valori del PC e dell'AC nella tabella indicano lo stato dopo la macroistruzione.
Come leggere le tabelle: dopo ogni macroistruzione si aggiunge una riga alla tabella. Prg. Counter indica il PC prima dell’istruzione; le sottocolonne RAM: Adr, Hi e Lo identificano l’istruzione. Address Bus indica la cella selezionata e Data Bus il contenuto trasferito nel momento mostrato nella schermata. PC dopo e AC dopo sono i valori al termine del passo.
Passo 1 · TAKE 006
Carica nell’accumulatore il contenuto di RAM[006], cioè 002. AC passa da 000 a 002; PC passa da 000 a 001.

Tabella di esecuzione — 1 istruzione
| Prg. Counter (PC prima) | Macroistruzione | RAM: istruzione | Address Bus | Data Bus | PC dopo | AC dopo | ||
|---|---|---|---|---|---|---|---|---|
| Adr | Hi | Lo | ||||||
| 000 | TAKE 006 | 000 | 01 | 006 | 006 | 00 002 | 001 | 002 |
Passo 2 · ADD 007
Somma il valore 003 contenuto nella cella 007 al valore già presente in AC. AC diventa 005; PC passa a 002.

Tabella di esecuzione — 2 istruzioni
| Prg. Counter (PC prima) | Macroistruzione | RAM: istruzione | Address Bus | Data Bus | PC dopo | AC dopo | ||
|---|---|---|---|---|---|---|---|---|
| Adr | Hi | Lo | ||||||
| 000 | TAKE 006 | 000 | 01 | 006 | 006 | 00 002 | 001 | 002 |
| 001 | ADD 007 | 001 | 02 | 007 | 007 | 00 003 | 002 | 005 |
Passo 3 · SAVE 005
Scrive il contenuto dell’accumulatore nella cella RAM[005]. Ora RAM[005] vale 005, AC rimane 005 e PC passa a 003.

Tabella di esecuzione — 3 istruzioni
| Prg. Counter (PC prima) | Macroistruzione | RAM: istruzione | Address Bus | Data Bus | PC dopo | AC dopo | ||
|---|---|---|---|---|---|---|---|---|
| Adr | Hi | Lo | ||||||
| 000 | TAKE 006 | 000 | 01 | 006 | 006 | 00 002 | 001 | 002 |
| 001 | ADD 007 | 001 | 02 | 007 | 007 | 00 003 | 002 | 005 |
| 002 | SAVE 005 | 002 | 04 | 005 | 005 | 00 005 | 003 | 005 |
Passo 4 · HLT 000
Arresta l’esecuzione. Il risultato rimane 005 sia nell’accumulatore sia nella cella RAM[005].

Tabella di esecuzione — 4 istruzioni
| Prg. Counter (PC prima) | Macroistruzione | RAM: istruzione | Address Bus | Data Bus | PC dopo | AC dopo | ||
|---|---|---|---|---|---|---|---|---|
| Adr | Hi | Lo | ||||||
| 000 | TAKE 006 | 000 | 01 | 006 | 006 | 00 002 | 001 | 002 |
| 001 | ADD 007 | 001 | 02 | 007 | 007 | 00 003 | 002 | 005 |
| 002 | SAVE 005 | 002 | 04 | 005 | 005 | 00 005 | 003 | 005 |
| 003 | HLT 000 | 003 | 10 | 000 | 003 | 10 000 | Arresto | 005 |
Osservazione dei registri
PC: indica l'indirizzo del prossimo comando. INS (IR): conserva l'istruzione caricata dalla RAM. AC: contiene gli addendi intermedi e il risultato. Per analizzare l'ordine delle microistruzioni di TAKE, usa gli avanzamenti nella barra Micro Code e annota ciò che viene trasferito fra PC, AB, RAM, DB, INS e AC.
pc->ab, ram->db e db->ins sono microistruzioni osservabili nella Control Unit.5. Tocca a te: un'altra somma
Ripeti la procedura e completa la tabella senza guardare la soluzione.
Ora esegui 2 + 4. Mantieni le quattro macroistruzioni agli indirizzi 000–003, ma modifica il valore della cella 007 in 00 004. Riporta a 00 000 la cella 005, quindi usa Reset e riparti da 000.
1. Completa la RAM di partenza (Adr, Hi, Lo); 2. esegui le macroistruzioni una alla volta; 3. compila la seconda tabella con PC, AC e cella RAM 005 dopo ogni istruzione.
RAM di partenza
| RAM | Uso della cella | ||
|---|---|---|---|
| Adr | Hi | Lo | |
| 000 | TAKE | ||
| 001 | ADD | ||
| 002 | SAVE | ||
| 003 | HLT | ||
| 005 | Risultato (inizialmente zero) | ||
| 006 | Primo addendo | ||
| 007 | Secondo addendo | ||
Valori osservati durante l'esecuzione
| Prg. Counter (PC prima) | Macroistruzione | RAM: istruzione | Address Bus | Data Bus | PC dopo | AC dopo | RAM[005] dopo | ||
|---|---|---|---|---|---|---|---|---|---|
| Adr | Hi | Lo | |||||||
Qual è il risultato finale nell'accumulatore? ______________________ In quale cella RAM lo hai salvato? ______________________
Spiega perché l'indirizzo indicato da SAVE e il valore della somma non sono la stessa cosa: ________________________________________________________________.