Lezione III                                                FRAMES    NOFRAMES

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.

 

Esercizio

Test 3