Architettura PC

La RAM

Indirizzi e contenuti delle celle, lettura e scrittura della RAM in Johnny 1.01: teoria e laboratorio guidato.

Johnny Simulator | La RAM

La RAM conserva dati e istruzioni in celle numerate. In Johnny Simulator puoi osservarne il contenuto, inserire valori e seguire le operazioni di lettura e scrittura.

Per seguire gli esempi è utile riconoscere memoria, accumulatore e bus nell’interfaccia. L’obiettivo è distinguere le celle che contengono comandi da quelle usate per i dati e inserire correttamente entrambi.

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. La tabella RAM in Johnny 1.01

Riconoscere le colonne aiuta a leggere i dati senza confonderli con istruzioni.

Interfaccia desktop di Johnny 1.01: tabella RAM a sinistra con colonne Adr, Hi, Lo, Asm e Opnd, bus degli indirizzi azzurro in alto e bus dei dati verde in basso
La RAM si trova a sinistra. I pulsanti db->ram e ram->db indicano due trasferimenti con direzioni opposte.

Leggere le colonne della RAM

NomeDescrizione
AdrIndirizzo della cella di memoria, per esempio 005. Identifica la posizione della cella, non il valore che contiene.
HiParte alta del contenuto numerico: le prime due cifre. Quando il valore è interpretato come istruzione, identifica il codice operativo; per esempio 01 corrisponde a TAKE.
LoParte bassa del contenuto numerico: le ultime tre cifre. Quando il valore è interpretato come istruzione, rappresenta l’operando, normalmente l’indirizzo della cella coinvolta.
AsmNome simbolico dell’istruzione associata al codice operativo, per esempio TAKE, ADD o SAVE.
OpndOperando dell’istruzione mostrato in forma leggibile. In TAKE 005, l’operando 005 indica la cella da cui leggere il dato.

Hi e Lo sono due parti dello stesso valore: 01 005 rappresenta il numero 1005 e, con il set standard, l’istruzione TAKE 005. Le colonne Asm e Opnd ne mostrano l’interpretazione; non sono celle di memoria aggiuntive.

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.

Un esempio: macroistruzioni e dati nella stessa RAM

Esempio di memoria RAM con macroistruzioni, dati e risultato
Macroistruzioni e dati nella stessa memoria RAM.

Le celle da 000 a 003 contengono le macroistruzioni del programma. Le celle 005, 006 e 007 sono usate come dati e risultato. Indirizzo e contenuto hanno ruoli diversi: la cella 000 contiene il comando che leggerà un’altra cella, la 006.

Come leggere l’esempio: il programma carica il numero 2, aggiunge 3 e conserva il risultato 5 nella cella 005.

La tabella qui sotto descrive le singole righe. La figura è uno schema esplicativo, non una schermata dell’applicazione.

AdrHiLoAsmOpndSignificato
00001006TAKE006Carica in accumulatore il numero della cella 006.
00102007ADD007Somma al valore in accumulatore il contenuto della cella 007.
00204005SAVE005Copia il risultato dell’accumulatore nella cella 005.
00310000HLT000Termina il programma. Qui 000 non indica una cella da leggere.
00500005——Cella del risultato: nella schermata contiene 5 dopo la somma.
00600002——Primo dato: il numero 2.
00700003——Secondo dato: il numero 3.

Il programma calcola 2 + 3 = 5: TAKE legge il primo dato, ADD somma il secondo, SAVE scrive il risultato e HLT conclude l’esecuzione.

Hi e Lo formano un unico contenuto numerico. Per esempio 01 006 è il valore 1006, interpretato come TAKE 006. Asm e Opnd mostrano questa interpretazione, non altre celle. Il ruolo di comando o dato dipende da come il programma usa il contenuto.

La cella 004 contiene zero e non viene eseguita in questo programma, che si arresta alla cella 003. Un valore zero è comunque un contenuto valido della memoria.

3. Lettura e scrittura attraverso i bus

Il bus degli indirizzi sceglie la cella; il bus dei dati trasporta il contenuto.

Prima di leggere o scrivere, imposta sul bus degli indirizzi (AB, Address Bus) l’indirizzo della cella RAM coinvolta. Il bus dei dati (DB, Data Bus) trasporta invece il valore da leggere o da scrivere.

ComandoOperazione e direzioneChe cosa succede
ram->dbLETTURA DELLA RAM
Dalla cella RAM al bus dei dati.
Il contenuto della cella indicata da AB viene copiato nel bus dei dati. La cella RAM conserva lo stesso valore: leggere non lo cancella e non lo modifica.
db->ramSCRITTURA NELLA RAM
Dal bus dei dati alla cella RAM.
Il contenuto del bus dei dati viene copiato nella cella indicata da AB, sostituendo il valore che conteneva prima. In Johnny il valore sul bus dei dati resta disponibile anche dopo la scrittura.

Esempio di lettura: dalla RAM al bus dei dati

La cella 010 contiene 7. Imposta AB = 010 e premi ram->db: nel bus dei dati compare 7 e la cella 010 continua a contenere 7. Il numero è stato copiato, non spostato cancellando la sorgente.

Esempio di scrittura: dal bus dei dati alla RAM

Il bus dei dati contiene 7 e la cella 012 contiene 25. Imposta AB = 012 e premi db->ram: la cella 012 ora contiene 7 al posto di 25. Il valore 25 è stato sovrascritto; il valore sul bus dei dati resta 7.

Cambiare l’indirizzo non esegue una lettura: selezionare una cella con AB non ne copia automaticamente il contenuto su DB. Per leggerlo devi premere ram->db.

LABORATORIO

Inserire numeri interi e istruzioni nella RAM

Tempo: 25 minuti.


Lavora nell’editor delle celle, senza avviare il programma. Salva prima eventuali lavori precedenti.

Per aprire la finestra di inserimento, fai clic con il mouse su una cella della tabella RAM. Si apre la finestra Edit RAM Line, che permette di modificarne il contenuto. Controlla l’indirizzo della cella prima di inserire un valore.

1. Conoscere la finestra di inserimento nella RAM

Finestra Edit RAM Line con Address, Data, Hi, Lo e pulsanti di modifica
La finestra Edit RAM Line. Fai clic sull’immagine per ingrandirla.
ElementoSignificato e utilizzo
AddressIndirizzo della cella RAM che stai modificando, per esempio 006. Identifica la posizione della cella.
DataContenuto numerico della cella, suddiviso nelle parti Hi e Lo.
HiLe prime due cifre del contenuto. Per i piccoli numeri dell’esercizio resta 00; quando inserisci un’istruzione, identifica il codice operativo.
LoLe ultime tre cifre del contenuto. Per scrivere il numero 25, imposta Hi a 00 e Lo a 025.
Menu delle istruzioniIl menu sotto Hi permette di scegliere una macroistruzione, come TAKE o ADD. Verrà usato nell’attività sull’inserimento dei comandi.
Tastierino numericoPermette di inserire le cifre nella parte attiva. Controlla Hi e Lo prima di confermare; il tasto << permette di correggere l’immissione.
Pulsante 00 000Azzera il valore nell’editor. Per scrivere la modifica nella RAM devi poi confermarla.
Pulsante con freccia verso RAMConferma il valore inserito e lo scrive nella cella, sostituendo il contenuto precedente.
CancelChiude la finestra senza confermare la modifica.

2. Inserire un numero intero

  1. Apri la cella 010 e verifica l’indirizzo.
  2. Azzera il valore nell’editor. Per questi piccoli numeri mantieni Hi = 00 e inserisci 7 nella parte Lo; controlla 00 007.
  3. Conferma con il pulsante di scrittura RAM, poi controlla la tabella principale.
  4. Ripeti: cella 011 = 25; cella 012 = 0; cella 013 = 123.
  5. 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.

3. Inserire un’istruzione

Menu dell’editor RAM con codici 01 TAKE, 02 ADD, 03 SUB, 04 SAVE, 05 JMP, 06 TST e 07 INC
Il menu associa la parte Hi al codice dell’istruzione; Lo contiene l’operando.
  1. Apri la cella 000 e azzera il valore dell’editor.
  2. Nel menu sotto Hi scegli 01: TAKE.
  3. Imposta Lo a 010: è l’indirizzo del dato da caricare, non il dato stesso.
  4. Controlla 01 010 e conferma la scrittura. Nella tabella RAM verifica TAKE 010.
  5. Inserisci nella cella 001 ADD 011, nella 002 SAVE 012 e nella 003 HLT 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.

4. Salvare e controllare

Salva la RAM con il dischetto della barra Macro Code. Riapri il file e verifica istruzioni e dati. Il programma salvato potrà essere riaperto ed eseguito in seguito.

Documentazione

Le etichette e le procedure qui descritte si riferiscono alla versione desktop 1.01 mostrata nella schermata.