Architettura PC

Laboratorio Somma

Laboratorio guidato con Johnny Simulator: somma, RAM, macroistruzioni, Control Unit e prova autonoma.

Johnny Simulator | Laboratorio Somma
Laboratorio

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.

Software: Johnny Simulator 1.01

Durata indicativa: 40 minuti

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.

Schermata iniziale di Johnny Simulator con TAKE 006, ADD 007, SAVE 005, HLT 000 e accumulatore zero
Situazione iniziale: RAM programmata, risultato ancora da calcolare.

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.

RAMSignificatoDescrizione
AdrHiLo
00001006TAKE 006Carica in AC il contenuto della cella RAM 006.
00102007ADD 007Somma ad AC il contenuto della cella RAM 007.
00204005SAVE 005Salva il contenuto di AC nella cella RAM 005.
00310000HLT 000Arresta l'esecuzione del programma.
00400000—Cella non utilizzata nel programma.
00500000RisultatoCella inizialmente a zero, destinata a contenere la somma.
00600002Primo addendoContiene il numero 2.
00700003Secondo addendoContiene 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 RAMMacroistruzioneEffetto
000TAKE 006Carica in AC il valore 002 della cella 006.
001ADD 007Somma a AC il valore 003 della cella 007.
002SAVE 005Salva il contenuto di AC nella cella 005.
003HLT 000Arresta 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.

Pulsante con due triangoli verdi di esecuzione automatica
Doppio triangolo verde

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.

Stato finale del programma: accumulatore 005 e cella RAM 005 pari a 005
Schermata dopo l'esecuzione completa.
Memoria / registroPrimaDopo
RAM 006002002
RAM 007003003
RAM 005000005
AC000005

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.

Tasto Ctrl con ingranaggi per visualizzare Control Unit

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.

Johnny con Control Unit visualizzata: PC, INS e Micro Code
Control Unit visibile con i registri e il microcodice.
Prima di ripartire: usa il pulsante Reset dei registri per ricominciare dall'indirizzo 000 e riporta 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.

Dopo TAKE: PC 001, AC 002, Address Bus 006
Schermata di Johnny dopo il passo 1: TAKE 006.

Tabella di esecuzione — 1 istruzione

Prg.
Counter
(PC prima)
MacroistruzioneRAM: istruzioneAddress
Bus
Data
Bus
PC dopoAC dopo
AdrHiLo
000TAKE 0060000100600600 002001002

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.

Dopo ADD: PC 002 e AC 005
Schermata di Johnny dopo il passo 2: ADD 007.

Tabella di esecuzione — 2 istruzioni

Prg.
Counter
(PC prima)
MacroistruzioneRAM: istruzioneAddress
Bus
Data
Bus
PC dopoAC dopo
AdrHiLo
000TAKE 0060000100600600 002001002
001ADD 0070010200700700 003002005

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.

Dopo SAVE: PC 003 e cella RAM 005 aggiornata
Schermata di Johnny dopo il passo 3: SAVE 005.

Tabella di esecuzione — 3 istruzioni

Prg.
Counter
(PC prima)
MacroistruzioneRAM: istruzioneAddress
Bus
Data
Bus
PC dopoAC dopo
AdrHiLo
000TAKE 0060000100600600 002001002
001ADD 0070010200700700 003002005
002SAVE 0050020400500500 005003005

Passo 4 · HLT 000

Arresta l’esecuzione. Il risultato rimane 005 sia nell’accumulatore sia nella cella RAM[005].

Programma fermo su HLT: AC 005
Schermata di Johnny dopo il passo 4: HLT 000.

Tabella di esecuzione — 4 istruzioni

Prg.
Counter
(PC prima)
MacroistruzioneRAM: istruzioneAddress
Bus
Data
Bus
PC dopoAC dopo
AdrHiLo
000TAKE 0060000100600600 002001002
001ADD 0070010200700700 003002005
002SAVE 0050020400500500 005003005
003HLT 0000031000000310 000Arresto005

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.

Da ricordare: TAKE, ADD, SAVE e HLT sono macroistruzioni. Operazioni interne come 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

RAMUso della cella
AdrHiLo
000TAKE
001ADD
002SAVE
003HLT
005Risultato (inizialmente zero)
006Primo addendo
007Secondo addendo

Valori osservati durante l'esecuzione

Prg.
Counter
(PC prima)
MacroistruzioneRAM: istruzioneAddress
Bus
Data
Bus
PC dopoAC dopoRAM[005] dopo
AdrHiLo

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: ________________________________________________________________.

Torna all'indice