Architettura dei calcolatori elettronici
Abbiamo visto che la CPU (processore ) è il cervello del computer ossia è un insieme di circuiti integrati che gestiscono la Esecuzione di istruzioni macchina di calcolo e di trasferimento .
Con trasferimento intendiamo: 1) ricevere un dato in MC da Input 2) emettere un dato da MC verso Output 3) copiare un dato da MS a MC.
Col termine calcolo intendiamo: accedere ad una cella di memoria e ad esempio sommare il suo contenuto con qualcosa.
Quindi l'istruzione macchina è una istruzione eseguibile (attivazione di un circuito) dalla CPU.
Un programma eseguibile coincide con una sequenza di istruzioni macchina. Ci chiediamo adesso come contenere un programma in memoria centrale MC ?
Ciascuna istruzione macchina è CODIFICATA <----> RAPPRESENTATA in una cella. Es. se vogliamo caricare nel registro R1 il contenuto della cella di indirizzo 66 (66 che in binario si rappresenta con 10000010), allora "caricare" (load) è una operazione identificata da un certo codice operativo es. 0000, per cui nella cella della memoria centrale avremo questa istruzione:
0000 | 10000010 |
codice operativo ( OC ) | indirizzo operando ( OA ) |
La sequenza di istruzioni macchina, memorizzate in MC può essere acceduta dalla CPU che così può vedere ed eseguire le istruzioni.
Per la CPU possiamo pensare ad una divisione di comodo CPU=CU+ALU+REGISTRI dove Unit Control, ha il compito di prelevare dalla memoria le istruzioni di un programma, interpretarle attraverso un organo di decodifica e farle eseguire regolando le azioni delle varie unità; ha il compito del trasferimento; per queste azioni necessita di una funzione di temporizzazione il clock che coordini le varie azioni. L'ALU si occupa del calcolo, infatti essa riceve dalla CU il comando da eseguire, insieme con l' operando o gli operandi, su cui l'operazione deve essere effettuata.
Per quanto riguarda i REGISTRI diciamo che: la maggior parte degli elaboratori possiede il Program Counter ( contatore di programma PC ), < dentro il PC vi è in ogni istante l'indirizzo della prossima istruzione che deve essere eseguita >, l'Instruction Register ( registro istruzione IR ) in cui è contenuta l'istruzione che deve essere interpretata e poi eseguita "istruzione attuale", gli Accumulatori ( ACC ) in cui sono contenuti gli operandi di una data istruzione ed al termine dell'esecuzione della istruzione contengono il risultato, il registro Program Status Word ( parola di stato PSW ) che fornisce con il suo contenuto particolari informazioni sull' ultima istruzione eseguita - ad esempio se il risultato dell'operazione aritmetica sia zero od il segno del risultato od il riporto del risultato ecc.
Quindi nel PC c'e' l'indirizzo della prossima istruzione da eseguire, (cioè quella dopo, in memoria centrale, di quella copiata in IR )
ACC è memoria (poche celle) ausiliaria per operazioni.
PSW contiene info nell' ultima esecuzione (risultato= 0,pos.,neg.; riporto; overflow ecc ).
Funzionamento dell' unità di elaborazione : Come lavora la CPU
Immaginiamo che un programma eseguibile cioè una sequenza di istruzioni macchina sia stata caricata in MC a partire da un certo indirizzo es. 1000.
La CPU accede a queste istruzioni una alla volta e le esegue:
Fase di Fetch ( Alimentazione ) : 1) l'istruzione che deve essere eseguita viene prelevata dalla cella di memoria 1000 e trasferita nel registro PC 2) il contenuto della cella di indirizzo PC viene trasferito nel registro istruzioni IR 3) il program counter viene incrementato di 1 cioè PC:= PC + 1; adesso dentro PC c'e' l'indirizzo della prossima istruzione da eseguire .
Fase di Decodifica ( Decode ) : In base al contenuto dell'IR l'istruzione viene "decodificata" ( che istruzione è ) .
Fase di Execute ( Esecuzione ) : In base al codice operativo OC, si attiva il circuito della CPU corrispondente, che userà OA ed eseguirà l'istruzione.
Supponiamo di avere una programma EXE (executable eseguibile), se facciamo click su RUN, cioè chiediamo di eseguirlo, allora il calcolatore esegue automaticamente il Loading. Il comportamento successivo lo vedremo fra un pò dopo aver introdotto il linguaggio macchina.
Il Linguaggio Macchina Parte 1
Ogni elaboratore è in grado di interpretare ed eseguire un insieme finito di istruzioni elementari. Questo insieme di istruzioni è il linguaggio macchina dell'elaboratore considerato. Il linguaggio macchina è quindi l'insieme delle istruzioni, di cui la CPU è dotata e che quindi è capace di eseguire, dette istruzioni macchina. Le istruzioni macchina sono le uniche direttamente eseguibili dalla CPU. Un programma eseguibile è un insieme ordinato di istruzioni macchina , le quali vengono eseguite una alla volta, in sequenza secondo l'ordine specificato dal programma stesso.
A scopo di semplificazione useremo un linguaggio macchina un po semplificato, tanto il concetto rimane sempre quello. Consideriamo un esempio di istruzione macchina "semplificata" Load in R1 A
Il significato di questa istruzione è: carica nel registro R1 il contenuto della cella che si trova all'indirizzo A. Per cui se il codice operativo dell'istruzione macchina load è 0000 e l'indirizzo della cella A è 64 che in binario è 01000010 avremo una istruzione macchina seguente :
Tabella 3.1
OC OA
0000 | 01000010 |
codice istruzione | operando |
l'istruzione macchina STORE R1 in A ha il seguente significato: memorizza nella (cella di indirizzo) A il contenuto del registro R1. Il codice istruzione o codice operativo di STORE R1 è 0010.
STORE R2 in A significa memorizza nella ( cella di indirizzo ) A il contenuto del registro R2; il codice operativo e: 0011.
SUM R1 R2 significa : somma il contenuto del registro R1 al contenuto del registro R2 e trasferisci il risultato nel registro R1. R1 <----- R1 + R2
SUB R1 R2 significa : sottrai al contenuto del registro R1, il contenuto del registro R2 e trasferisci il risultato della sottrazione nel registro R1. R1 <----- R1 - R2
READ da Input in A significa : leggi il dato da input e trasferiscilo nella cella di memoria di indirizzo A. A <----- I
WRITE A in Output significa : leggi il contenuto della cella di indirizzo A e trasferiscilo in Output. A -----> O.
Allo scopo puramente di esempio, forniamo la seguente tabella di codici operativi:
Tabella 3.2 Codici Operativi
Codice Operativo simbolico | Codifica binaria |
LOAD in R1 | 0000 |
LOAD in R2 | 0001 |
STORE in R1 | 0010 |
STORE in R2 | 0011 |
SUM | 0100 |
SUB | 0101 |
JMP R1 <> 0 | 0111 |
READ | 1000 |
WRITE | 1001 |
STOP | 0110 |
Esecuzione di STORE in R1 A : Abbiamo come OC=0010 e come OA=001010 ; il contenuto di un registro R1 lo indichiamo racchiuso fra parentesi tonde ( R1 ), IDEM qualsiasi altro contenuto. Per cui i passi che si affrontano in presenza di STORE R1 in A sono:
( OA ) -----> AR il contenuto OA va nell'Address Register cioè nel registro degli indirizzi.
M [AR] -----> DR il contenuto della cella di memoria di indirizzo AR va nel Data Register.
(DR) ------> R1 il contenuto del Data Register viene trasferito nel registro R1.
Ritornando su quanto detto prima di iniziare il discorso sul linguaggio macchina, il calcolatore esegue automaticamente il Loading (caricamento del programma in una zona libera ad esempio a partire da IND "indirizzo di cella di memoria"; per eseguire il programma il valore IND deve essere posto nel registro PC program counter
( PC ) <----- IND , l'Unita' di controllo accede all'indirizzo di memoria specificato da PC e trasferisce il suo contenuto nel registro istruzioni IR , qui si decodifica l'istruzione analizzando il codice operativo OC. fase di FETCH ; poi si incrementa il PC di uno affinche' esso contenga l'indirizzo della successiva istruzione da eseguire. Poi viene la fase di EXECUTE.