Lezione 2 · Teoria e laboratorio
La RAM è una sequenza di celle numerate. Impariamo a scegliere una cella, leggerne il contenuto e scriverci un nuovo valore, seguendo i trasferimenti in Johnny Simulator.
Prerequisiti: aver esplorato l’interfaccia di Johnny e riconosciuto memoria, accumulatore e bus. Obiettivo: copiare un valore da una cella a un’altra e spiegare quali operazioni modificano la RAM.
1. Che cos’è la RAM
La memoria di lavoro conserva i dati e le istruzioni utilizzati durante l’esecuzione.
RAM significa Random Access Memory, memoria ad accesso casuale: si può selezionare direttamente una posizione tramite il suo indirizzo, senza leggere prima tutte le posizioni precedenti. “Casuale” descrive il modo di accedere, non una scelta casuale dei dati.
Nel modello di Von Neumann, dati e istruzioni condividono la memoria principale. La CPU legge un’istruzione, la interpreta e può leggere o modificare altre celle per svolgere il lavoro richiesto.
La RAM dei computer reali è normalmente volatile: richiede alimentazione per conservare le informazioni. Salvare un documento su un’unità di archiviazione è un’operazione diversa dal tenerlo in RAM. In Johnny, il salvataggio su file conserva una rappresentazione della memoria simulata che puoi riaprire in seguito.
Il simulatore semplifica la macchina e mostra numeri decimali. Le sue celle non vanno confuse con byte reali o con la capacità della RAM del computer su cui lo esegui.
2. Indirizzo e contenuto di una cella
La posizione identifica la cella; il contenuto è ciò che quella cella conserva.
Immagina una cassettiera: il numero sul cassetto è l’indirizzo; il foglio al suo interno è il contenuto. Cambiare il foglio non cambia il numero del cassetto.
| Indirizzo | Contenuto | Come leggerlo |
|---|---|---|
| 010 | 00 007 | La cella 010 contiene il numero 7. |
| 011 | 00 025 | La cella 011 contiene il numero 25. |
| 012 | 00 000 | La cella 012 contiene zero. |
RAM[010] = 7 è una notazione esplicativa: significa “nella cella all’indirizzo 010 si trova 7”. Non è un comando da digitare nel simulatore. Se scrivi 9 nella stessa cella, avrai RAM[010] = 9: l’indirizzo resta 010.
Zero è un valore: una cella visualizzata come 00 000 contiene zero. Non significa che quella posizione non esista.
3. La tabella RAM in Johnny 1.01
Riconoscere le colonne aiuta a leggere i dati senza confonderli con istruzioni.

db->ram e ram->db indicano due trasferimenti con direzioni opposte.| Colonna | Significato | Esempio |
|---|---|---|
| Adr | Indirizzo della cella. | 010 |
| Hi | Parte alta del valore, le prime due cifre. | 00 in 00 025 |
| Lo | Parte bassa del valore, le ultime tre cifre. | 025 in 00 025 |
| Asm | Nome dell’istruzione associata al codice, quando riconosciuto. | TAKE |
| Opnd | Operando dell’istruzione, quando interpretata come comando. | 010 in TAKE 010 |
Hi e Lo sono parti dello stesso contenuto, non due celle distinte: 01 010 rappresenta il numero 1010. Con il set standard, quando eseguito come istruzione, corrisponde a TAKE 010. Il ruolo del numero dipende da come il programma lo utilizza.
La RAM di Johnny 1.01 ha 1000 celle, con indirizzi da 000 a 999; ciascuna conserva un valore da 0 a 19999. Questi limiti appartengono al modello didattico.
I due riquadri della RAM mostrano porzioni della stessa memoria. Sono utili per tenere visibili istruzioni e dati in zone diverse; non rappresentano due memorie indipendenti.
4. Lettura e scrittura attraverso i bus
Prima scegli la posizione; poi scegli la direzione del trasferimento.
Il bus degli indirizzi (Address Bus, azzurro) indica la cella coinvolta. Il bus dei dati (Data Bus, verde) trasporta il valore. Per leggere la cella 010, l’indirizzo sul bus deve essere 010.
| Comando | Direzione | Effetto sulla RAM |
|---|---|---|
ram->db | Dalla cella selezionata al bus dei dati. | Lettura: conserva il contenuto della cella. |
db->ram | Dal bus dei dati alla cella selezionata. | Scrittura: sostituisce il contenuto precedente. |
Una lettura copia il valore senza cancellarlo. Una scrittura sovrascrive il valore precedente: se la cella 012 contiene 25 e vi scrivi 7, dopo l’operazione contiene 7.
In Johnny il bus dei dati può trattenere il valore fra due comandi, per rendere osservabili i trasferimenti. È una semplificazione: nei sistemi reali i bus sono collegamenti e la conservazione dei valori richiede registri o memoria.
Cambiare l’indirizzo non esegue una lettura: dopo aver selezionato una nuova cella devi usare ram->db per aggiornare il dato sul bus.
LABORATORIO GUIDATO
5. Inserire numeri interi e istruzioni nella RAM
Tempo: 25 minuti. Lavora nell’editor delle celle, senza avviare il programma. Salva prima eventuali lavori precedenti.
A. Riconoscere la finestra Edit RAM Line

Fai clic su una riga della RAM per aprire Edit RAM Line. Controlla Address prima di modificare il dato. Hi e Lo sono le due parti dello stesso valore: 00 025 rappresenta 25.
- Tastierino numerico: inserisce le cifre nella parte attiva; controlla sempre Hi e Lo prima di confermare. Il tasto
<<permette di correggere l’immissione. - Pulsante 00 000: imposta a zero il valore nell’editor.
- Pulsante con freccia verso RAM: conferma e scrive la modifica nella cella.
- Cancel: chiude senza confermare la modifica.
B. Inserire un numero intero
- Apri la cella 010 e verifica l’indirizzo.
- Azzera il valore nell’editor. Per questi piccoli numeri mantieni Hi = 00 e inserisci 7 nella parte Lo; controlla
00 007. - Conferma con il pulsante di scrittura RAM, poi controlla la tabella principale.
- Ripeti: cella 011 = 25; cella 012 = 0; cella 013 = 123.
- Riapri 011, modifica il valore in 9 e premi Cancel. Verifica che in RAM sia rimasto 25.
Numeri consentiti: in Johnny 1.01 i valori sono interi da 0 a 19999. Per questo esercizio usa numeri interi non negativi; non inserire virgole decimali o segni meno.
C. Inserire un’istruzione

- Apri la cella 000 e azzera il valore dell’editor.
- Nel menu sotto Hi scegli
01: TAKE. - Imposta Lo a 010: è l’indirizzo del dato da caricare, non il dato stesso.
- Controlla
01 010e conferma la scrittura. Nella tabella RAM verificaTAKE 010. - Inserisci nella cella 001
ADD 011, nella 002SAVE 012e nella 003HLT 000, scorrendo il menu quando necessario.
Non occorre scrivere il nome del comando come testo libero: seleziona l’istruzione nel menu e imposta l’operando. Il dato 7 nella cella 010 e il comando TAKE nella cella 000 sono entrambi numeri conservati nella stessa RAM, usati con ruoli diversi.
| Cella | Inserimento richiesto | Hi osservato | Lo osservato | Dato o istruzione? |
|---|---|---|---|---|
| 010 | 7 | _____ | _____ | _____ |
| 011 | 25 | _____ | _____ | _____ |
| 013 | 123 | _____ | _____ | _____ |
| 000 | TAKE 010 | _____ | _____ | _____ |
| 001 | ADD 011 | _____ | _____ | _____ |
| 002 | SAVE 012 | _____ | _____ | _____ |
| 003 | HLT 000 | _____ | _____ | _____ |
D. Salvare e controllare
Salva la RAM con il dischetto della barra Macro Code. Riapri il file e verifica istruzioni e dati. Nella lezione successiva eseguirai il programma e confronterai macro passi e micro passi.
Controlla gli inserimenti
Dati: 7 → Hi 00, Lo 007; 25 → 00, 025; 123 → 00, 123. Istruzioni: TAKE 010 → 01, 010; ADD 011 → 02, 011; SAVE 012 → 04, 012; HLT 000 → 10, 000.
6. Verifica e consegna
Spiega come hai inserito e verificato i contenuti.
- Qual è la differenza tra Address e Data?
- Quali valori inserisci in Hi e Lo per scrivere 123?
- Quale pulsante conferma la scrittura e quale annulla la modifica?
- Come si inserisce TAKE 010 usando il menu?
- Perché Lo contiene 010, mentre il dato da caricare è 7?
- Quali numeri interi sono consentiti nel simulatore?
Mostra le risposte corrette
- Address identifica la cella, Data è il valore conservato nella cella.
- Per 123: Hi = 00 e Lo = 123.
- La freccia verso RAM conferma la scrittura; Cancel annulla la modifica.
- Apri la cella, seleziona 01: TAKE nel menu, imposta Lo a 010 e conferma.
- 010 è l’indirizzo della cella sorgente; 7 è il contenuto che si trova in quella posizione.
- Sono ammessi gli interi da 0 a 19999; non numeri negativi o con parte decimale.
Consegna: file RAM, tabella completata, risposte e una schermata con le celle del programma e dei dati.
Documentazione
Le etichette e le procedure qui descritte si riferiscono alla versione desktop 1.01 mostrata nella schermata.