capitolo 7 - DEI - Università degli Studi di Padova

Download Report

Transcript capitolo 7 - DEI - Università degli Studi di Padova

CAPITOLO 7
Le macchine programmabili
7.1 Le Macchine Programmabili
Nel capitolo precedente trattando le reti sequenziali si è introdotto il concetto
generale di circuito sequenziale, chiamato anche macchina a stati finiti:si è
infatti visto che un generico circuito sequenziale è costituito da una sezione di
logica combinatoria e da una sezione di memoria individuata dai FLIP-FLOP. Si è
anche affrontato il problema della sincronicità delle macchine a stati finiti facendo
in modo che i cambiamenti di stato avvenissero in corrispondenza dei cicli di
clock.
Abbiamo visto che il principale inconveniente delle macchine a stati è quello di
essere poco versatili in quanto al variare del problema da risolvere si è costretti a
cambiare il comportamento delle transizioni degli stati e quindi cambiare la
macchina.
In questo capitolo si tratterà l’argomento relativo alle macchine programmabili
che possiamo definire come delle macchine a stati finiti viste in precedenza, ma
che a differenza di quelle viste nel capitolo 6, hanno la caratteristica che oltre ad
avere n ingressi rappresentati dai fili o bit ed m uscite, come per le reti
combinatorie e sequenziali, contengono un programma in cui le informazioni
date in ingresso non sono solamente relative al problema da risolvere, ma
riguardano anche il modo con cui risolvere il problema. Quindi a differenza delle
reti finora viste, i dati inviati alle macchine programmabili non coincidono con gli
ingressi finora visti per le reti combinatorie e sequenziali, poiché si è visto che
questi sono semplici input selezionati a sua volta dai vari comandi di controllo al
fine di ottenere uno o più valori di uscita, ma contengono anche le informazioni
su ciò che la macchina deve fare per risolvere il problema.
La macchina programmabile è dunque una macchina a stati particolare, generata
non per risolvere un problema specifico, come invece facevano le reti
combinatorie e quella sequenziali, ma per effettuare una qualunque elaborazione
in base a delle istruzioni che vengono inviate in ingresso.
Quindi le macchine programmabili dovendo risolvere qualunque problema, per cui
non sono però in grado di conoscere a priori quanti gli stati necessari per
risolvere il problema stesso.
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
189
Prima di vedere in dettaglio come si compone una macchina programmabile
introduciamo il concetto di memoria. Anche se l’argomento in realtà è già stato
introdotto quando si è parlato delle reti sequenziali: si è infatti visto che le reti
combinatorie non sono dotate di memoria, mentre le reti sequenziali necessitano
di una memoria per mantenere gli stati codificati da bit e graficamente
rappresentati dai cerchi dell’automa a stati finiti.
Si è poi identificata la memoria con un circuito chiamato FLIP FLOP che fissa lo
stato corrente in attesa che il segnale di clock lo faccia passare a stato
successivo, per cui lo stato corrente viene fissato per il periodo di tempo
impiegato dal clock per passare al fronte di salita successivo.
7.2 La memoria
Si è visto dunque che i dati inviati alla macchina programmabile, sono composti
anche da istruzioni che definiscono una serie di azioni che la macchina deve
eseguire su un particolare insieme di dati allo scopo di risolvere un problema.
Per questo tipo di dati si fa riferimento a dei registri in cui si memorizzano
sequenze di bit in celle di memoria. Per comprendere il concetto di memoria,
consideriamo un semplice esempio di memoria in grado di memorizzare due bit:
F.F. 0
1/0
demux
mux
U
F.F. 1
s2
s0
s3
s1
Figura 7.1: esempio di memoria a due celle di memoria
in figura 7.1 abbiamo un ingresso dato da un bit che può essere assumere o il
valore 1 o il valore 0. Il dato in ingresso entra in un circuito demultiplexer che
con un filo di selezione decide su quale dei due fili di uscita il dato deve essere
copiato in uno dei due FLIP FLOP, i quali a sua volta, restituiranno in uscita il
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
190
dato entrante quando ricevono l’impulso del clock. Una volta ricevuto il segnale
dal clock, il dato viene messo in uscita.
Abbiamo dunque un primo selezionatore S2 che comanda quale bit di ingresso
entra nel circuito, un demultiplexer che indirizza il dato nei singoli registri che
realizzano le diverse celle di memoria, ossia i FLIP FLOP, e un selettore
multiplexer che decide quale dei due fili il circuito deve dare in uscita.
Con riferimento alla figura 7.1, supponiamo che venga messo in ingresso il bit 1,
viene allora attivato il selezionatore S2 che supponiamo vada a 0, in questo caso
il demultiplexer indirizza l’ingresso 1 al FLIP FLOP FF0 che lo memorizza . Poi ogni
volta che il filo S1 viene messo a 0 il valore 1 viene a copiato in uscita dal
multiplexer.
1
F.F. 0
1
1
1
mux
demux
F.F. 1
s2
s0
s3
s1
Figura 7.2: esempio di memoria a due celle di memoria con un ingresso pari a 1
I due FLIP FLOP inseriti in questo esempio di memoria a due bit, possono essere
immaginati come due caselle di una tabella in cui viene memorizzato un solo bit
che può essere o 0 o 1. Nell’esempio della figura l’ingresso
pari a 1 è stato
indirizzato e memorizzato nel FLIP FLOP FF0 e quando il bit S1 va a 0, l’uscita
riporta il contenuto che è stato memorizzato nel FLIP FLOP FF0. Quindi all’interno
del FLIP FLOP FF0 è stata fatta una scrittura del bit 1 mentre con il selettore
multiplexer S1 = 0 è stato letto il contenuto della casella copiandolo in uscita.
La memoria che abbiamo descritto è caratterizzata dalla presenza di un congruo
numero di celle identificate da un numero (detto indirizzo), ciascuna di queste
in grado di contenere informazioni codificate in bit.
Avendo a disposizione due celle di memoria in cui vengono registrati i dati e poi
restituiti in uscita, con l’esempio dato dalla figura 7.2, si è attuato un
indirizzamento mediante la selezione del FLIP FLOP o cella di memoria che si
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
191
vuole scrivere o leggere a seconda del valore del bit S1 selezionato dal
multiplexer.
Nell’esempio dell’ingresso pari a 1, si è memorizzato dentro il FLIP FLOP FF0 il
valore del bit pari ad 1 che rimane fino a che il multiplexer lo seleziona in lettura,
dandolo come valore di uscita.
Quindi la memoria è data da una serie di n celle numerate dove vengono
registrati i vari input entranti che rimangono disponibili nel tempo fino a quando
non vengono imputati altri nuovi ingressi.
Lo schema della figura 7.2 considera solamente due celle di memoria ma in realtà
ce ne possono essere molte di più le quali vengono sempre selezionate attraverso
meccanismi di demultiplexer che per scrittura restituiscono in uscita il dato a sua
volta registrato nelle celle di memoria.
Osservando la figura 7.2, notiamo che le reti combinatorie date dal multiplexer e
demultiplexer e la macchina a stati composta dai FLIP FLOP, sono tutte
relazionate tra di loro mediante dei fili che le collegano dando origine così alla
memoria.
Quindi una memoria, al di come è poi realizzata all’interno, è una macchina a
stati in cui si distinguono l’ingresso, l’uscita, un filo che stabilisce se si vuole
scrivere nella memoria (fase di WRITE) o se si vuole leggere la memoria (fase
READ), e un indirizzo che corrisponde ai comandi S3 ed S1 della figura 7.2, cioè
quelli che decidono rispettivamente su quale FLIP FLOP (S3) si va a leggere (S1)
il dato che è stato memorizzato.
Figura 7.3: configurazione di una memoria
Nell’esempio abbiamo considerato solamente due FLIP FLOP, ma si è appena
detto che normalmente ci possono essere più celle di memoria, se ad esempio
considerassimo
n FLIP FLOP, è evidente che
i fili necessari alle due reti
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
192
combinatorie demultiplexer e multiplexer per smistare ed eventualmente leggere
il dato in uscita,
sarebbero
log2N dove N è il numero di celle in cui vengono
memorizzati i bit in ingresso.
Supponendo allora che in figura 2 ci siano 4 celle di memoria ossia 4 FLIP FLOP,
avremo dunque due bit di indirizzo e supponendo che con il bit 0 il bit
READ/WRITE dia il comando “leggi” e con il bit 1, il comando “scrivi”, allora con
ingresso pari ad 1 e con un valore del bit READ/WRITE pari a 0, l’input 1 viene
indirizzato e poi memorizzato nella cella 1 ovvero nel FLIP FLOP 1, senza avere
alcuna uscita.
Figura 7.4: memoria a quattro bit
Se poi in un secondo momento si attribuisce 0 al filo che comanda la lettura o la
scrittura del dato, quindi viene dato un comando di lettura,
l’indirizzo che
abbiamo ha selezionato la cella 1, darà in uscita il dato pari a 1.
La memoria descritta dalla figura 7.4 è detta memoria a 4 celle per 1 bit per cui
ciascuna cella di memoria registra un bit.
7.2.1Memoria a 8 bit
Ora dati che vengono imputati in ingresso e che potrebbero essere un carattere
ASCII, un numero intero, o un numero in virgola mobile ad esempio, in realtà
sono vettori di n bit che vengono inviati in input al sistema, e non dunque singoli
bit come invece abbiamo considerato nelle figure prese in esempio per descrivere
le macchine programmabili, quindi difficilmente in un sistema troviamo una
memoria organizzata ad un solo bit.
Pertanto la cella di memoria fino ad ora descritta, anziché essere vista come una
casella in cui viene registrato un solo bit, è più corretto considerarla come una
memoria che registra un vettore di n bit, ad esempio di 8 bit. Possiamo quindi
immaginare una qualsiasi cella in questo modo:
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
193
indirizzo Codice istruzione 8 bit = 1 byte
0
1
2
…
…
0
1
0
0
0
0
0
1
Figura 7.5: la memoria principale a 8 bit
Ciascuna cella è caratterizzata da un indirizzo che corrispondono all’ordinamento
nelle celle della sequenza. Gli indirizzi sono numerati con numeri interi partendo
da zero e codificati in bit, ciascuna cella contiene un vettore di otto bit1.
Detto questo possiamo allora in generale definire una memoria come un
dispositivo in grado di immagazzinare informazioni (istruzioni e dati) codificate in
forma binaria.
La memoria è pensabile dal punto di vista logico come una sequenza finita di
locazioni (o celle) della dimensione di uno o più byte; ogni locazione prende il
nome di parola (word).Ogni cella di memoria deve essere in qualche modo
identificata univocamente, per potervi accedere senza essere confusa con le
altre. Ogni cella viene cosi ad avere un proprio numero identificativo, che viene
detto indirizzo2
Per la memoria della figura 7.5 ogni indirizzo identifica univocamente un byte
all'interno della memoria, quindi se in un ipotetico sistema di elaborazione si
avessero a disposizione ad esempio 4 linee di indirizzo, sarebbe possibile
collegare memorie della dimensione massima di 24 = 16 byte.
Con riferimento alla figura 7.5 in corrispondenza di ciascuna cella (data dalle
righe numerate) verrà registrato allora un carattere a 8 bit, che costituirà l’unità
informativa indirizzabile più piccola in termini di bit impiegati, tant’è che questa
unità di otto bit prende il nome di byte, quindi si considerano vettori di 8 bit che
vengono letti contemporaneamente.
Vediamo allora come si indirizza una memoria che anziché contenere un solo bit,
contiene un byte, ossia una sequenza di 8 bit presi contemporaneamente.
In questo caso sarà sufficiente prendere tanti FLIP FLOP come quelli dati dalla
figura 2, condividere con loro un indirizzo e metterli tutti in parallelo come la
seguente figura:
1
Si considerano vettori di 8 bit perché ad essi si associa un carattere codificato in maniera standard, come ad esempio il carattere ASCII
Per fare un paragone con una cassettiera, il contenuto della locazione di memoria è ciò che è contenuto all'interno del cassetto, mentre l'indirizzo è l'etichetta
che identifica il cassetto stesso.
2
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
0
194
0
M0
1
0
3
1
0
M1
1
1
3
0
M2
0
M3
0
M4
0
M5
0
M6
0
1
0
3
1
M7
in d ir iz z o
Figura 7.6: composizione di una cella di memoria a un byte
si aggregano otto unità di memoria, ovvero otto FLIP FLOP in cui entrano otto fili
ciascuno collegato ad uno stesso indirizzo, per cui ogni cella di memoria della
figura 5, memorizza un singolo bit come componente del vettore di otto bit,
ovvero come componente del byte.
Spesso però nella rappresentazione dell’informazione non sempre si considerano
sufficienti 8 bit perché non sono molti gli oggetti da essi rappresentabili, si è
infatti visto che ad esempio il floating point standard dei numeri impiega 32 bit,
per cui in realtà spesso si usano più di otto bit per rappresentare un dato base.
Si osserva però, che una volta che si è organizzata in byte la memoria, se ad
esempio si impiegano 10 bit per codificare l’informazione inserita nel programma,
si ha un problema di allineamento dei bit nelle varie celle di memoria:
osservando la figura 4 infatti, con informazioni codificate ad esempio con 10 bit,
le celle non sarebbero più occupate interamente e così si andrebbe a perdere
l’allineamento tra i dati e l’indirizzo; infatti una parte del dato (esattamente i
primi otto bit) verrà smistata ad un determinato indirizzo, mentre il resto del
dato, (gli ultimi 2 bit) va ad essere smistata ad un indirizzo diverso.
Avendo dunque scelto il byte come unità indirizzabile, siamo poi vincolati a far si
che i dati più grossi di un byte affinché
possano essere gestiti facilmente e
quindi collocati correttamente nella memoria, devono essere multipli di 8 bit, per
cui ad esempio un dato di 16 bit non darà problemi in quanto si fanno due letture
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
195
della memoria occupata interamente nelle otto microcelle di cui è composta,
senza averne nemmeno una scoperta in quanto il dato è codificato in maniera
tale da occupare interamente l’indirizzo della memoria.
Ciò ha portato ad individuare altri vettori di bit, oltre al byte, che sono a sua
volta multipli del byte: più esattamente:
2 byte = 16 bit corrispondono ad una WORD
4 byte = 32 bit corrispondono ad una DWORD o double word
8 byte = 64 bit corrispondono ad una QWORD o quadrupla word
Si è visto che con il
byte l’indirizzamento porta a selezionare una cella che
memorizza il dato inviato in entrata.
Alla luce delle osservazioni appena fatte è utile impostare la memoria in modo
tale che quando si chiede al sistema di dare il contenuto di una determinata cella
che contiene ad esempio una word, la memoria risponda dando come uscita due
byte.
7.2.2 La memoria R.A.M.
La memoria che abbiamo descritto nei paragrafi precedenti è la memoria R.A.M.
La
memoria
R.A.M.
(Random
Access
Memory)
è
un
dispositivo
di
memorizzazione ad accesso casuale che viene generalmente utilizzato per
realizzare la memoria centrale del computer e consente all’utente di effettuare
sulle singole celle entrambe le operazioni di lettura e scrittura.
Con il termine memoria ad accesso casuale si riferisce al fatto che si può
accedere direttamente a qualsiasi parola di memoria in contrasto con il concetto
di memoria ad accesso sequenziale dove per raggiungere una parola è necessario
leggere tutte le precedenti3. Random infatti sta a significare che l’accesso al dato
può essere fatto senza alcun vincolo, nel senso che possiamo scegliere
liberamente l’indirizzo dove andare a leggere il dato memorizzato.
Con la memoria R.A.M si attua invece un meccanismo di selezione che permette
di scegliere il FLIP FLOP interrogato con un solo selettore del multiplexer o del
demultiplexer a seconda che il dato sia di sola lettura o anche di scrittura, senza
così dover seguire un percorso obbligato come invece impone un circuito
sequenziale.
3
Si pensi per esempio ai vecchi calcolatori che utilizzavano i nastri per memorizzare tutti dati, per cui ogni volta che si doveva leggere a un dato bisognava
per forza scorrere il nastro fino ad individuare la posizione del dato memorizzato e qyindi averlo in lettura.
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
196
Questo modo di salvare uno stato di una macchina a stati, ossia tramite l’impiego
della memoria R.A.M., random access machine, è talmente importante che ha
dato il nome di R.A.M. alla macchina programmabile, ma in realtà è quest’ultima
ad essere collegata ad una memoria R.A.M., infatti la macchina programmabile è
un’altro sistema che si relaziona con la memoria R.A.M.
7.3. Funzionamento di una macchina programmabile
Fatte
queste
premesse
vediamo
allora
come
funziona
una
macchina
programmabile: consideriamo la seguente figura:
indirizzo Codice istruzione 8 bit = 1 byte
0
1
0
0
1
0
0
0
0
1
2
istruzioni
…
…
i
i+1
Dati
n
Figura 7.7: struttura della memoria R.A.M.
La figura 7.7 rappresenta la R.A.M., ossia una tabella che elenca gli indirizzi delle
informazioni codificate da un byte.
Si è detto inizialmente che la macchina programmabile, oltre a ricevere in
ingresso i dati relativi ad un determinato problema, riceve anche le istruzioni
relative alle modalità con cui risolvere il problema.
La memoria R.A.M allora, contiene due tipi di dati separati che corrispondono ai
dati del problema e alle istruzioni che servono a risolvere il problema. Per cui in
una parte di memoria ci saranno i dati e in una parte di memoria ci saranno le
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
197
istruzioni su come la macchina programmabile deve comportarsi per risolvere il
problema.
7.4. le Fasi di esecuzione di un’istruzione
Per avere idea di come funziona una macchina programmabile, supponiamo che
venga inviata alla macchina la seguente serie di istruzioni:
1. “scrivi il numero 4 nella cella 100”
2. “scrivi il numero 6 nella cella 101”
3. “somma il contenuto della cella 101 con il contenuto della 100”
4. “scrivi il risultato nella cella 100”
In questo caso il sistema ricevendo in ingresso le istruzioni, le eseguirà scrivendo
il numero 4 in binario usando 8 bit e selezionando con l’indirizzo la casella 100, la
stesa cosa farà per la seconda istruzione. Successivamente eseguirà la somma
dei due numeri e scriverà il risultato nella cella 100, “eliminando” il numero 4
scritto prima, e inserendo un dato nuovo dato dal risultato della somma,
selezionata sempre tramite l’indirizzo.
Questo esempio fa capire come il semplice fatto di aver dato delle precise
istruzioni alla memoria R.A.M, ha comandato al sistema di eseguire una somma
senza che il sistema stesso fosse a priori progettato come sommatore, ma si è
comportato in maniera tale semplicemente imputando al sistema un’istruzione di
come comportarsi. Per cui se come istruzione di ingresso veniva imputato un
altro dato, chiedendo al sistema di comportarsi ad esempio come sottrattore,
esso avrebbe letto ed eseguito l’istruzione comportandosi esattamente come un
sottrattore.
Vediamo allora come fa la macchina programmabile ad eseguire i vari ingressi e a
restituire i risultati dati dagli ingressi.
Innanzitutto bisogna delimitare il numero di istruzioni base le quali saranno
codificate: ad esempio per la prima istruzione data “scrivi il numero 4 nella cella
100”, ci sarà una sequenza di bit che codifica tale informazione. Le istruzioni
base sono quelle che la macchina esegue indipendentemente dal problema e dati
inviati in ingresso.
Una volta codificate le informazioni da inviare come ingressi attraverso il
programma, la macchina programmabile che riceve le istruzioni sarà una
macchina a stati che svolgerà le operazioni seguenti:
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
198
FATCH
DECODE
EXECUTE
Figura 7.8: fasi di esecuzione dell’istruzione
La figura 7.8 rappresenta un automa a stati finiti con tre stati, dove il primo stato
è
dato dalla fase di lettura della memoria definita fase di FETCH, in questa
prima operazione, il sistema ha inserito l’istruzione dentro ad una memoria
interna della macchina programmabile; l’istruzione è dunque pronta per essere
interpretata ovvero, dati una sequenza di bit in ingresso si comanda che cosa
deve fare la macchina.
A
questo
punto
dell’istruzione”
si
detta
passa
al
secondo
stato
che
si
chiama
“decodifica
anche operazione DECODE, cioè si interpretano le
operazioni dettate dalla configurazione di bit date in istruzione che la macchina
dovrà svolgere internamente.
Si passa poi alla fase di esecuzione EXECUTE, che esegue le istruzioni date in
entrata.
L’automa descritto in figura 7.8 viene eseguito continuamente in maniera ciclica,
cioè ad un primo ingresso la macchina legge, decodifica ed esegue, poi quando
ricomincia a leggere l’istruzione seguente a partire dalla cella di memoria
immediatamente successiva, per cui quando inseriamo la generica istruzione
“leggi l’istruzione dalla memoria all’indirizzo i” la macchina si comporta secondo
quanto indicato in figura 7.8, e una volta compiuto le tre fasi di FATCH; DECODE
ed EXECUTE, prima di eseguire l’istruzione successiva, il sistema incrementerà di
1 il numero che individua l’indirizzo della cella di memoria contenente l’istruzione
appena eseguita.
In generale dunque il sistema prima legge l’istruzione all’indirizzo i=0, poi legge
l’istruzione all’indirizzo i=2, poi all’indirizzo i=3, e così via prende cioè dalla
memoria l’istruzione una dopo l’altra eseguendo secondo l’ordine, ogni volta per
ciascuna istruzione, le tre fasi individuate dalla figura 5.
Nella seconda fase della figura 7.8, ossia la fase di DECODE o decodifica
dell’istruzione, viene interpretatala la sequenza di bit inviati in ingresso e
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
199
convertita in segnali interni, ossia una volta letta l’istruzione in fase di FATCH, il
sistema attiva delle sottounità secondo quanto dato e letto in comando alla prima
fase di ingresso dell’istruzione.
Se ad esempio l’istruzione iniziale era quella di fare la somma ad esempio tra due
numeri, allora in fase di decodifica, il sistema collocherà i dati presi dalla memoria
R.A.M., in un’unità interconnessa alle unità che fanno i calcoli.
Se dunque nel sistema c’è un circuito che fa la somma, a tale circuito dovrà
essere connesso anche il registro dove stanno gli operandi, per cui se ci sono
tanti luoghi in cui si memorizzano gli operandi, ci sarà anche una rete di
selezione che invierà in ingresso al sommatore gli operandi giusti attivando una
serie di fili o di controlli che permettono di attuare l’istruzione così come è stata
definita.
Per cui una somma in realtà corrisponderà ad una serie di operazioni: quella di
interconnettere il sommatore nel registro dove sta l’operando, scrivere il risultato
in uscita dal sommatore in un registro specifico e tutto questo mediante una
serie di fili interconnessi attraverso multiplexer o demultiplexer che consentono il
funzionamento della macchina.
Le tre fasi della figura 7.8 attivano ciascuna delle parti del processore.
7.5 La macchina di Von Newman.
Si è visto che la R.A.M. è una macchina su cui è possibile scrivere dei dati e
leggerli mantenendo questi dati in apposite celle di memoria ciascuna delle quali
contiene 8 bit o anche byte.
La macchina programmabile è una macchina che si connette ad una memoria
R.A.M. da cui prende non solo i dati, ma anche le istruzioni dove ciascuna
istruzione dice alla macchina programmabile che cosa deve fare. Quindi in una
macchina programmabile ci saranno alcune celle che terranno i dati che vengono
elaborati e che possono essere considerati gli ingressi delle macchine finora viste,
e altre celle l’una in fila all’altra, che si troveranno in una parte della memoria e
che saranno numerate continuamente in base alla sequenza di istruzioni da
eseguire.
Il modo per rappresentare una memoria R.A.M. è quella di considerare un a
tabella che numera le righe date dagli indirizzi e dove ad ogni indirizzo è
associato un contenuto composto da celle di memoria da 8 bit o byte:
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
200
indirizzo b0 b1 b2 b3 b4 b5 b6 b7
I0
I1
I2
.....
In
Figura 7.9: la memoria R.A.M.
In alcune celle della R.A.M., abbiamo detto che ci sono bit che hanno significato
di istruzione, altri invece che hanno significato di dati. Quindi anche l’istruzione
diventa un dato.
Se per esempio abbiamo un programma di 6 istruzioni, queste si troveranno nelle
prime 6 celle di memoria, quando poi verrà imputata la prima istruzione, questa
verrà letta nella fase di fatc, poi decodificata nella fase di decode, e una volta
interpretata l’istruzione dalla macchina, ci sarà la fase di esecuzione o fase
execute che consisterà nell’abilitazione di certe unità all’interno della macchina
programmabile che eseguono esattamente l’istruzione ricevuta.
La sequenza con cui vengono svolte queste operazioni, non sta dentro la
macchina programmabile, ma sta nel programma. Questa idea di portare la logica
di funzionamento della macchina, fuori dalla macchina è il salto di qualità
introdotto dall’idea di Von Newman.
La macchina che stiamo per descrivere è quella che fu ideata dal matematico e
fisico John Von Neumann che portò a definire le basi dei moderni calcolatori:
John Von Neumann definì per la prima volta il concetto di elaboratore elettronico
a programma memorizzato, la cosiddetta 'macchina di von Neumann'. Neumann
fu il primo a inquadrare in una teoria matematica coerente le 'macchine
intelligenti e gli automi. Per questo è anche il padre dell'informatica.
7.5.1 La macchina di Von Neumann: elementi
Prima di descrivere il funzionamento della macchina programmabile, vediamo di
capire come è composta la macchina di Von Neumann. Si consideri la seguente
figura:
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
201
Figura 7.10:l’architettura della macchina di Von Newman
la macchina di Von Neumann è composta da tre tipologie di componenti
funzionali:
1. L'unità centrale di elaborazione (CPU) è la parte del sistema che contiene
gli elementi circuitali necessari al funzionamento dell’elaboratore.
Questa esegue i programmi che risiedono nella memoria centrale, prelevando,
decodificando ed eseguendo le istruzioni in essi contenute e coordinando il
trasferimento dei dati tra le varie unità funzionali;
La struttura generale di una CPU può essere a sua volta così schematizzata:
CPU = CU + ALU + Registri.
L’unità di controllo (o controller) è un dispositivo in grado di generare segnali sia
per i circuiti esterni alla CPU (ad esempio segnali di lettura/scrittura per le
memorie) che per i circuiti interni (ad esempio per l’ALU). Questa unità esamina
il codice operativo dell’istruzione da eseguire e decide quali sono i vari passi che
consentono l’esecuzione dell’istruzione stessa. In altre parole, l’unità di controllo
interpreta un’istruzione del programma per volta e comanda l’esecuzione
dell’istruzione inviando alle altre unità appropriati segnali di controllo.
L'unità aritmetico-logica (ALU):
Questa unità riceve in ingresso due operandi e, a seconda del tipo di segnale
proveniente dall’unità di controllo (CU), esegue una delle operazioni aritmetiche
(somma, sottrazione, …) o logiche (and, or, not, …). In generale l’ALU è in grado
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
202
di eseguire anche operazioni quali lo shift a destra o a sinistra: tutti i bit di un
operando vengono spostati di una posizione verso destra o verso sinistra.
2. La memoria centrale è la memoria interna al calcolatore, direttamente
accessibile
dalla
CPU, essa
contiene
i
programmi
e
i
dati
necessari
all'esecuzione dei programmi. Per memoria si intende un dispositivo in grado di
immettere, conservare ed estrarre informazioni. La memoria centrale a cui
riferiamo, è la memoria R.A.M.
3: Il bus di sistema è il mezzo che, sotto il diretto controllo della CPU, collega
le varie unità funzionali della macchina di Von Neumann.
Tramite il bus è possibile collegare solo due unità funzionali alla volta, una che
trasmette dati e una che riceve.
E’ la CPU che tramite i suoi organi assegna il bus ad uno specifico collegamento.
Nelle implementazioni concrete il bus di sistema è costituito da tre parti distinte:
una monodirezionale dal processore alla memoria detta bus degli indirizzi,
una bidirezionale dal processore alla memoria e viceversa detta bus dei dati ed
una monodirezionale dal processore alle altre unità funzionali detto bus dei
comandi
Fatte
queste
premesse,
vediamo
di
descrivere
in
maniera
generica
il
funzionamento di una macchina programmabile di Von Neumann
7.5.2 Funzionamento della macchina di Von Neumann
Come si è detto in precedenza, l'esecuzione di ogni programma della macchina
programmabile avviene attraverso le tre fasi operative di fetch, decode ed
execute, si è visto che tali fasi sono costituite da un certo numero di azioni
elementari sequenzilamente eseguite dalla CPU.
Abbiamo anche visto che i dati che sono imputati alla macchina possono essere
o dati o istruzioni, consideriamo il caso in cui vengano imputate solamente le
istruzioni, ossia descriviamo la fase di fetch. Si consideri al riguardo la seguente
figura:
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
203
MEMORIA
R.A.M.
Dati
MUX
DEMUX
N
Indirizzo
Registro IR
R.W.
P.C.
Controller
Figura7.11: fase di fetch
Supponiamo che la macchina legga la prima istruzione Io data, di indirizzo 0, ci
troviamo cioè nel
filo relativo all’indirizzo da dove proviene l’indicazione, e
supponendo che n sia pari ad 8 bit (quindi i possibili indirizzi che possono entrare
nella R.A.M. sono 28= 256 righe di programma o byte) ci saranno allora 8 fili in
indirizzo che danno tutti 0 in uscita: in questa fase dunque, la macchina comanda
alla memoria una lettura del contenuto della cella 0, e il terzo filo che collega la
macchina alla R.A.M. assumerà un certo valore. A questo input la memoria
risponde dando in uscita una sequenza di otto bit
La prima istruzione I0 è data dunque da una serie di 8 bit che vengono
interpretati
dalla
macchina
programmabile
come
un’istruzione:
volendo
riprendere l’esempio fatto precedentemente, supponiamo che la prima istruzione
equivalga a dire “leggi dalla cella 100 il valore che c’è dentro”. Vediamo allora di
capire dove finisce la prima istruzione I0. A questo punto, con riferimento alla
figura 7.11, il controllore comanderà al demultiplexer, al quale sono collegati vari
fili di uscita e che riceve tutti i dati dalla memoria R.A.M. provenienti dalla prima
istruzione, di fare uscire l’informazione su un apposito registro chiamato
instruction register: con riferimento alla figura il controller fa in modo che il
demultiplexer colleghi uno dei
suoi vari fili di uscita con il registro dove viene
memorizzata la prima istruzione.
I registri sono dispositivi di memorizzazione usati per le elaborazioni interne alla
CPU e sono sequenze di n celle di memoria nelle quali si può leggere e scrivere
un dato di n bit. Ogni cella di memoria elementare è costituita da un flip-flop, in
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
204
grado di memorizzare un bit (1 o 0). I registri possono memorizzare un numero
piuttosto limitato di bit (8, 16, 32 o 64).
Figura7.12: esempio di registro
Il sistema carica l’istruzione all’indirizzo 0 che sta dentro la R.A.M., dentro un
registro attraverso il controller che comanda al demultiplexer di collegarsi con il
registro dove memorizzare il primo indirizzo, in quanto l’informazione dovrà
rimanere memorizzata per tutto il tempo dell’esecuzione dell’istruzione.
La prima istruzione inviata dalla macchina programmabile è quella contenuta
nella cella di memoria R.A.M.
di indirizzo zero; c’ è infatti un’altro registro
chiamato program counter o contatore di programma, che comanda alla
memoria di caricare il dato di indirizzo 0.
Il progam counter, o contatore di programma, è una macchina a stati che conta
le istruzioni in sequenza e in ordine di arrivo, passando cioè sempre all’istruzione
immediatamente successiva una volta che la macchina ha eseguito la generica
istruzione i, il contatore dunque determina l’indirizzo sommando 1 ad ogni
istruzione successiva. Quindi Il Program Counter è il registro che contiene
l'indirizzo della prossima istruzione da eseguire. Tale registro deve essere
aggiornato almeno una volta per ciclo macchina, fase di fatc, decode ed execute,
(comunque mai più di due), puntando all'istruzione successiva a quella
attualmente in esecuzione,
A questo punto Il controllore comanda al mutilplexer collegato con il program
counter di selezionare il numero dato in uscita dal program counter per poi
inviarlo alla R.A.M. al fine di metterla nelle condizioni di dare la prima istruzione.
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
205
MEMORIA
R.A.M.
m
Dati
MUX
DEMUX
Registro IR
0
R
Indirizzo
R.W.
P.C.
Controller
Figura: 7.13
Riassumendo il controllore invia alla memoria R.A.M. la lettura del dato e
comanda di prendere l’indirizzo dal program counter, a questo punto
alla
memoria R.A.M. arriva una richiesta di lettura del dato dall’indirizzo 0 per cui
essa provvederà a prelevare dalla tabella contenente, sia le istruzioni che i dati,
l’istruzione I0, la trasmette nel filo dei dati e quando il controllore riceve la
conferma del dato restituito in uscita dalla R.A.M., lo inserisce dentro
l’instruction register.
In questa fase di fetch, la memoria accede alla cella indirizzata, il cui contenuto
di (ovvero l’istruzione) viene inviato dalla R.A.M. e trasferito, siu comando del
controller nell’instruction register tramite il demultiplexer. Nel frattempo il
controller comanda al program counter di incrementare di 1 l’indirizzo della prima
istruzione, affinché identifichi la successiva istruzione da eseguire.
In questa fase di fetch, la CU preleva dalla memoria l’istruzione che deve essere
eseguita, il cui indirizzo è contenuto nel Program Counter (PC), la pone
nell’Instruction Register (IR) ed incrementa il valore del PC per prepararsi poi ad
eseguire l’istruzione successiva;
In questa fase il controllore svolge il compito di attivare le varie unità, in modo
tale che la memoria riceva una richiesta di lettura e il dato che esce dalla
memoria venga messo nel registro di istruzione. In questa fase dunque entrano
in gioco le unità il multiplexer il demultiplexer e la memoria che collegano
temporaneamente il program counter alla linea di indirizzo della R.A.M. e
l’instruction register alla linea di uscita della memoria R.A.M..
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
206
Dopo che l’indirizzo di memoria è stato utilizzato, quindi è stata caricata
l’istruzione I0 nella memoria R.A.M., il program counter incrementa di una unità il
valore del byte in esso contenuto, per cui il program counter, da 0 diventa 1
pronto per l’istruzione successiva.
Attenzione però che la memoria R.A.M. non vedrà questo cambiamento, perché il
controller comanderà al multiplexer di non dare in uscita il valore ricevuto dal
program counter, quindi si aggiorna il contatore ma il valore assunto da questo
non viene visualizzato in uscita dalla R.A.M., in quanto il multiplexer selezionerà
un’altro ingresso, ma non quello relativo al program counter.
Una volta che l’istruzione è stata memorizzata nel registro, bisogna capire che
cosa deve fare a questo punto la macchina programmabile.
Si è visto che la macchina programmabile è una macchina a stati che sulla base
di un certo ingresso dato dai bit dell’istruzione pilota le varie unità i cui essa è
composta (vedi paragrafo precedente): quindi l’operazione di leggere l’istruzione,
decodificarla ed eseguirla va sempre attuata indipendentemente dal programma
poiché è una procedura che sta scritta dentro la macchina programmabile, in che
cosa poi consiste l’esecuzione dell’istruzione è una cosa che varia sempre e
dipende da quale è l’istruzione data.
Fatte queste premesse, si passa alla seconda fase, ossia la fase di DECODE; in
questa fase la CU interpreta il codice operativo dell’istruzione da eseguire
contenuta in Instruction Register.
L’Instruction Register che contiene l’istruzione ricevuta in prima fase, verrà
decodificato attraverso un decoder facente parte del controller: il decoder
dunque legge l’istruzione e informa il controller che cosa deve attivare in seguito
all’istruzione che il decoder ha letto. Il decoder provvede a decodificare
l'istruzione presente nell'apposito registro in veri e propri segnali da inviare ai
componenti della macchina.
All’interno del processore ci sono un certo numero finito di registri detti registri
di memoria che, come quello visto in figura 7.13, sono le unità di accesso
minime alla memoria contenenti 8 bit ossia un solo dato e la cui funzione è quella
di memorizzare un dato alla volta. Supponiamo allora di considerare una
macchina programmabile che contiene quattro registri come la seguente figura:
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
207
MEMORIA
R.A.M.
R1
R2
R3
R3
R4
Dati
Indirizzo
DEMUX
DEMUX1
R/W
MUX
decoder
Controller
Figura 7.14: fase di decode
La figura 7.14 è la stessa figura 7.13 (e anche della 7.12), solo che ai fini
esplicativi della fase di decode e di esecuzione che si sta descrivendo, vengono
evidenziate solamente le unità coinvolte, fermo restando che le parti omesse per
ragioni di spazio, sono elementi sempre presenti nella macchina programmabile.
Nella macchina della figura 7.14 ci sono quattro registri che chiameremo R1, R2,
R3, R4.
Supponendo ad esempio che la prima istruzione sia “leggi il dato dalla cella 100”,
l’istruzione è incompleta perché deve anche indicare in quale dei quattro registri
deve essere memorizzato il dato.
In questo caso dunque entra in gioco un’altro demultiplexer collegato al
demultiplexer che prima ha indirizzato su comando del controller l’istruzione zero
all’Instruction register, questo ultimo demultiplexer, sempre controllato dal
controller, si collegherà con il demux1 che smisterà il dato dentro ad uno dei
quattro registri. Se dunque l’istruzione iniziale era “leggi il dato dalla cella 100 e
scrivi il dato in R3”, in fase di decodificata il controller attiverà tutte le operazioni
necessarie per prendere dalla cella di indirizzo 100 il dato D0 in essa contenuto.
L’indirizzo, a differenza di prima non viene dal program counter, ma viene
direttamente dato dal decoder che ha letto l’istruzione I0.
Il decoder ha letto l’istruzione dall’instruction register, il controller produce
l’indirizzo 100, quindi nel filo relativo all’indirizzo uscirà 100 che a sua volta
entrerà nella memoria R.A.M.. A questo punto la memoria R.A.M. ricevendo dalla
macchina una richiesta di lettura del dato D0 alla cella 100, restituisce al sistema
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
208
il valore D0 (sempre un dato di otto bit) e visto che l’istruzione precisa di inserirlo
in R3, il controller attiverà il demultiplexer demux in maniera tale che il dato non
finisca dentro l’instruction register, ma venga trasmesso direttamente al
demultiplexer demux1 il quale si attiverà secondo quanto stabilito dall’istruzione,
ossia inserendo D0 dentro il registro R3.
Quindi in seguito all’attivazione dei fili di controllo evidenziati in figura 7.14, la
macchina programmabile o processore, ha richiesto alla memoria di prendere il
dato e di memorizzarlo all’interno di uno specifico registro.
Le azioni che avvengono nella fase di esecuzione dipendono dall’istruzione da
eseguire. L’unità di controllo, su suggerimento del decoder, genera la necessaria
sequenza di segnali di controllo e trasferimento dati alle altre unità
Terminata l’esecuzione dell’istruzione I0, l’elaborazione riprende ciclicamente con
la fase di fetch dell’istruzione successiva I1.
Quando il sistema riceve la successiva istruzione, il contatore incrementerà di 1,
e l’istruzione I1 verrà inserita dentro l’instruction register con la stessa procedura
di prima. L’unica cosa che è cambiato, è l’indirizzo, perché dopo il fetch
precedente, si è comandato al program counter di incrementare di 1, per cui se
questo non si fosse incrementato, il sistema avrebbe letto nuovamente
l’istruzione zero.
Anche in questo caso, dopo aver decodificato l’istruzione I1, la macchina si
attiverà per eseguirla.
Supponendo che I1 sia “leggi dalla cella 101 e metti il dato in R2”, la decodifica
eseguirà la stessa operazione di prima, l’istruzione verrà inviata alla memoria che
a
sua
volta
risponde
inviando
il
dato
D1
contenuto
nella
cella
101.
Successivamente il decodificatore comanderà al demultiplexer demux1 di
selezionare il filo in uscita che connette il registro R3, memorizzando così D1 nel
registro R3. (vedi figura 7.15)
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
R1
R2
R3
R3
D1
D0
D1
D0
R4
209
MEMORIA
R.A.M.
Dati
101
100
Indirizzo
DEMUX
DEMUX1
R/W
MUX
decoder
Controller
Figura: 7.15: fase di execute
Quindi il comportamento della macchina è come quello di prima, ma trattandosi
di un’altra istruzione, per essa ci sarà un’altro percorso per il dato D1, in quanto
viene memorizzato in un registro diverso.
Tecnicamente il percorso che viene comandato dal controller per memorizzare il
dato della R.A.M. in un registro, viene DATA PATH. La cosa che vale la pena
osservare è che questo percorso è configurabile.
Vediamo allora cosa succede quando diamo l’istruzione I2 che comanda ad
esempio, “somma il dato 0 con il dato 1”, ovvero “somma il contenuto della cella
100 e della cella 101”. Poiché il contenuto della cella 100 e della cella 101 sono
state memorizzate nei registri R2 ed R3, l’istruzione “somma il dato 0 con il dato
1”, equivale anche a sommare i valori contenuti nei due registri.
Naturalmente l’istruzione I2 viene presa dal sistema con le stesse modalità viste
per le due precedenti.
Consideriamo la solita figura ancora una volta modificata per evidenziare cosa
succede per la terza istruzione
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
210
MEMORIA
R.A.M.
R1
R2
R3
D0+D1
D1
D0
R4
Dati
Indirizzo
MUX2
A
L
U
M
U
X
R/W
MUX3
decoder
Controller
Figura: 7.16
in figura 8.6 è stata introdotta una rete combinatoria definita ALU che sta per
Arithmetic Logic Unit. L’ALU è un’unità aritmetico-logica che esegue le
operazioni elementari necessarie per l’esecuzione delle istruzioni. Tipicamente,
comprendono
operazioni
aritmetiche
come
la
somma,
la
sottrazione,
la
moltiplicazione, la divisione e altre operazioni logiche come AND, OR e NOT.
Nell’ALU entrano dei fili che indicano 8 possibili operazioni che l’unità può fare.
I due multiplexer collegati all’ALU, sono anch’essi pilotati da un’unità di controllo
e collegati ai quattro registri: essi ricevono in ingresso i dati contenuti nei due
registri R2 ed R3, e sulla base di fili di selezione dei due multiplexer, selezionano i
dati contenuti nel registri inviati in ingresso e restituendoli in uscita come
operandi nell’unità ALU.
L’istruzione I2: “somma R2 con R3” significa che sulla base dell’istruzione
decodificata, viene attivato il filo connesso al registro R2 contenente il dato D1 sul
multiplexer mux2 il quale da in uscita il dato D1 come ingresso dell’ unità ALU.
Allo stesso modo il secondo multiplexer mux3, sempre sulla base del contenuto
dell’istruzione, attiva il filo connesso con R3 contenente D2 che lo porta in uscita e
quindi come ingresso dell’ ALU.
Sulla base di questa terza istruzione l’ALU si trova dunque in ingresso D1 e D2
che sono il contenuto di R2 e di R3 . A questo punto il controller verificato che i
dati sono pronti nei vari registri, attiva il multiplexer affinché invii in entrata
all’ALU i due dati contenuti nei registri selezionati dal multiplexer mux2 e mux3,
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
e con un altro filo, il controller attiva la funzione di somma all’ALU,
211
poiché il
decoder, in fase di decodifica, ha suggerito al controller che l’istruzione I0
chiedeva l’operazione di somma, se l’istruzione avesse chiesto la sottrazione ad
esempio, il controller avrebbe attivato il filo della sottrazione comandando così
all’ALU di fare la sottrazione dei due dati. Per renderci meglio conto di
quest’ultima operazione, evidenziamo in figura la fase di trasmissione dei dati dai
registri all’ALU:
Figura: 7.16
Il risultato della somma sarà a sua volta messo in un registro dei risultati.
Normalmente nell’istruzione di somma identificata nell’esempio con I2, c’è anche
la specifica di dove mettere il risultato, per cui in realtà l’istruzione I2 sarà
“somma il dato D1 con il dato D2 e scrivi il contenuto in R1”. In questo caso ci sarà
un filo che collegherà il registro dei risultati con un multiplexer che a sua volta è
connesso al demultiplexer demux 1, cioè quello che seleziona i registri, e che
copierà dunque il risultato nel registro specificato nell’istruzione, ossia R1.
Vediamo allora che in fase di esecuzione (execute),
la CU genera i segnali di
controllo necessari per l’esecuzione dell’istruzione, avvengono i trasferimenti tra
registri e/o memoria (ad esempio vengono letti altri dati dalla memoria e posti
nei registri); si attuano poi le operazioni che coinvolgono l’ALU, cioè invio di
Università degli studi di Padova - Facoltà di Scienze Statistiche
Corso di Laurea in Gestione delle Imprese – “Sistemi di Elaborazione” Prof . Nicola Zingirian
212
segnali opportuni all’ALU in grado di attivare una particolare operazione
aritmetica o logica.
Quando vengono inviate le istruzioni alla macchina, vediamo che in fase di
decodifica, l’unità di controllo mette in atto una sequenza di segnali dati dai fili
che partono dal controller e che attivano le varie unità richieste per l’esecuzione
delle istruzioni impartite dalla R.A.M.: questi segnali o fili, vengono chiamati
CONTROL PATH: essi specificano quali sono le leve dei comandi che l’unità di
controllo deve attivare per eseguire l’operazione al microprocessore che è la
macchina programmabile.
Ci sarà infine un’ultima istruzione I3 che dice” scrivi il dato D1+ D2 dentro la cella
100 della memoria” in questo caso il dato D0 contenuto nella cella 100, sarà
cancellato o sovrascritto e aggiornato con il valore del risultato della somma. In
tal caso il decoder capisce che l’istruzione di scrivere il contenuto di R1 nella cella
100 è data in scrittura, per cui predispone il terzo filo che collega la macchina alla
R.A.M. in scrittura, la R.A.M. ricevendo la richiesta, provvederà ad immettere
l’istruzione nel sistema, mentre dai registri ci sarà un’altro multiplexer che farà
andare il dato D1+ D2 memorizzato in R1 su un canale di uscita verso la memoria
R.A.M. nella cella di indirizzo 100.
Quindi l’istruzione di scrivere il contenuto di R1 dentro la memoria farà si che il
controller preparerà attraverso i fili di controllo, il percorso per cui il dato potrà
uscire verso la memoria .