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

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.

Esempio di tre celle
IndirizzoContenutoCome leggerlo
01000 007La cella 010 contiene il numero 7.
01100 025La cella 011 contiene il numero 25.
01200 000La 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.

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.
ColonnaSignificatoEsempio
AdrIndirizzo della cella.010
HiParte alta del valore, le prime due cifre.00 in 00 025
LoParte bassa del valore, le ultime tre cifre.025 in 00 025
AsmNome dell’istruzione associata al codice, quando riconosciuto.TAKE
OpndOperando 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.

ComandoDirezioneEffetto sulla RAM
ram->dbDalla cella selezionata al bus dei dati.Lettura: conserva il contenuto della cella.
db->ramDal 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

Editor RAM: indirizzo 006, contenuto diviso in Hi e Lo, tastierino, azzeramento, pulsante di scrittura RAM e Cancel
Address identifica la cella. Data, diviso in Hi e Lo, mostra il suo contenuto.

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

  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.

C. 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.

Completa la scheda dopo aver inserito i valori
CellaInserimento richiestoHi osservatoLo osservatoDato o istruzione?
0107_______________
01125_______________
013123_______________
000TAKE 010_______________
001ADD 011_______________
002SAVE 012_______________
003HLT 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.

  1. Qual è la differenza tra Address e Data?
  2. Quali valori inserisci in Hi e Lo per scrivere 123?
  3. Quale pulsante conferma la scrittura e quale annulla la modifica?
  4. Come si inserisce TAKE 010 usando il menu?
  5. Perché Lo contiene 010, mentre il dato da caricare è 7?
  6. Quali numeri interi sono consentiti nel simulatore?
Mostra le risposte corrette
  1. Address identifica la cella, Data è il valore conservato nella cella.
  2. Per 123: Hi = 00 e Lo = 123.
  3. La freccia verso RAM conferma la scrittura; Cancel annulla la modifica.
  4. Apri la cella, seleziona 01: TAKE nel menu, imposta Lo a 010 e conferma.
  5. 010 è l’indirizzo della cella sorgente; 7 è il contenuto che si trova in quella posizione.
  6. 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.

↑ Torna all’indice della lezione