I diversi processori si caratterizzano per la loro costituzione interna, detta architettura. Questa può variare a seconda del tipo e del numero dei registri, del numero di bit dei diversi bus, della frequenza di funzionamento. Ciò comporta anche una differenza nel software che ne regola il funzionamento, chiamato Assembly, e una diversa natura dei segnali di controllo. Il linguaggio macchina della CPU ha il compito di presiedere alle elaborazioni e ai trasferimenti di dati tra i vari blocchi funzionali della CPU o verso l’esterno. I processori delle ultime generazioni hanno particolarmente sviluppato la velocità, le capacità multimediali e la possibilità di visualizzazione in tre dimensioni
Blocchi funzionali
In ogni tipo di microprocessore, anche se caratterizzato da una propria architettura, è possibile riconoscere alcuni blocchi funzionali comuni. Accanto all’unità logico-aritmetica che segue le funzioni più tipiche dell’elaborazione, come le operazioni matematiche e quelle di controllo, sono presenti degli elementi detti registri. Essi sono costituiti da celle di memoria in cui depositare i risultati parziali dell’elaborazione. Alcuni di essi sono accessibili da parte dell’operatore facendo uso di apposite istruzioni del linguaggio di programmazione. Nei microprocessori sono individuabili i seguenti blocchi funzionali fondamentali:
Registro istruzioni
Il codice operativo corrispondente all’istruzione, prelevato dalla memoria di programma tramite il BUS dati, viene memorizzato nel registro istruzioni (IR, Instruction Register). Questo comanda un circuito di decodifica che invia ai vari blocchi funzionali della CPU i segnali di sincronismo e di controllo necessari per l’esecuzione dell’istruzione stessa. Tale meccanismo è scandito da un clock, ossia da un segnale elettrico a una certa frequenza inviato alla CPU o generato internamente.
Decodificatore
Il decodificatore delle istruzioni riceve il codice operativo contenuto nel registro istruzioni e lo traduce in un codice comprensibile all’unità di controllo per le successive elaborazioni.
Accumulatore
Il registro accumulatore è spesso utilizzato per depositarvi i dati necessari allo sviluppo delle operazioni logiche e aritmetiche eseguite dal processore. Il programmatore, con specifiche istruzioni, può accedere all’accumulatore per immettervi o estrarne dati.
Unità logico aritmetica
L’unità logico aritmetica (ALU) è costituita da un circuito logico in grado di eseguire operazioni aritmetiche e logiche come la somma, la sottrazione, il complemento a uno e a due, l’AND, l’OR ecc. La ALU opera facendo uso dei dati posti in due registri temporanei, come ad esempio l’accumulatore, ove può essere successivamente depositato il risultato dell’operazione.
Registri di uso generale
Tali registri sono preseti in ogni microprocessore, dove di solito sono indicati da sigle composte da una o più lettere (A, B, AX, BX ecc.). Il loro numero e la loro capacità varia tuttavia a seconda del tipo di microprocessore. Anche questi registri sono in genere accessibili al programmatore e sono utilizzati per depositarvi temporaneamente i dati in altri registri.
Contatore di programma
Il registro contatore di programma (PC, Program Counter) contiene l’indirizzo dell’istruzione da eseguire. La fase detta di prelievo delle istruzioni (fecht) viene eseguita fornendo sul bus indirizzi il contenuto del contatore di programma. Esso viene quindi automaticamente incrementato di uno per indirizzare l’istruzione successiva permettendo di leggere sequenzialmente le locazioni di memoria ove sono contenuti i codici del programma. Con particolari istruzioni (salti e chiamate a sottoprogrammi) il contatore di programma può inoltre venire caricato con l’indirizzo della locazione di memoria relativa al salto o alla chiamata. Il registro contatore possiede un numero di bit pari a quello del bus indirizzi.
Registro di stato
Il registro di stato o dei flag è collegato all’ALU, e ha il compito di controllare il verificarsi di determinate condizioni del sistema. I bit in esso contenuti rappresentano con il loro stato logico, 0 od 1, alcune particolari condizioni che si verificano dopo l’esecuzione di operazioni logiche e aritmetiche. Tipico esempio è il flag riporto (carry), che indica che nell’operazione precedente eseguita c’è stato un rapporto o un prestito, oppure il flag di zero che indica la nullità del risultato dell’operazione. Lo stato dei singoli bit del registro può essere verificato con opportune istruzioni, che permettono, a seconda del valore riscontrato, di variare l’andamento del programma.
Registro di stack
Il registro di stack (SP, Stack Pointer) è un registro che, in corrispondenza di particolari istruzioni, trasferisce il suo contenuto di particolati registri della CPU. Il registro di stack contiene quindi l’indirizzo di una zona della memoria detta area di stack (catasta).
Ad esempio prima di passare dal programma principali ad un sottoprogramma il microprocessore memorizza nell’area di stack il valore corrente all’esecuzione del sottoprogramma, riprende l’esecuzione del programma principali esattamente dal punto in cui era avvenuta l’interruzione.
Lo stack è organizzato con la modalità LIFO (Last In First Out), ossia l’ultimo in modo sequenziale, una locazione dopo l’altra. La memoria di stack, che agisce da puntatore, viene ogni volta incrementato o decrementato di un passo a seconda che si stia operando una lettura o una scrittura di dati.
Il programmatore può utilizzare lo stack per memorizzarvi il contenuto dei vari registri. In ragione del suo utilizzo lo stack pointer ha un numero di bit pari a quello del bus indirizzi.
Circuito di temporizzazione
La successione delle operazioni sviluppate dal microprocessore si svolge secondo una cadenza ben precisa, sincronizzata su di un segnale detto clock del sistema. Esso viene generato da un circuito oscillante stabilizzato con un quarzo, in genere collocato all’esterno del microprocessore. Il collegamento avviene tramite un apposito piedino (pin).
Unità di controllo
L’unità di controllo ha il compito di gestire ogni fase delle operazioni, inviando i segnali necessari a coordinare il trasferimento dei dati tra i vari blocchi sia all’interno che all’esterno della CPU. Ciò avviene in concordanza con i segnali ricevuti dal decodificatore delle istruzioni e in sincronismo col segnale di clock. Tra le più imprtanti linee gestite dall’unità di controllo, presenti in genere in ogni processore, si citano a scopo esemplificativo quelle dedicate ai seguenti compiti:
Buffer bus dati
I buffer sono registri che hanno il compito di mantenere temporaneamente nella loro memoria dei dati in transito, per poterli mettere a disposizione degli elementi richiesti al momento del loro utilizzo. Sulle linee del bus dati viaggiano sia i codici delle istruzioni che i dati. Tale connessione è di tipo bidirezionale, dovendo consentire sia operazioni di lettura che di scrittura. Il numero di linee che lo compongono varia da caso a caso.
Buffer bus indirizzi
Il bus indirizzi è costituito da un numero di linee atte a selezionare le locazioni di memoria o i dispositivi di I/O ai quali invia o dai quali riceve dati. Il BUS indirizzi è monodirezionale in quanto i segnali che transitano nelle sue linee sono uscenti dal microprocessore. Anche in questo caso il relativo buffer serve da tampone, mantenendo temporaneamente le informazioni in esso depositate.
Blocchi funzionali
In ogni tipo di microprocessore, anche se caratterizzato da una propria architettura, è possibile riconoscere alcuni blocchi funzionali comuni. Accanto all’unità logico-aritmetica che segue le funzioni più tipiche dell’elaborazione, come le operazioni matematiche e quelle di controllo, sono presenti degli elementi detti registri. Essi sono costituiti da celle di memoria in cui depositare i risultati parziali dell’elaborazione. Alcuni di essi sono accessibili da parte dell’operatore facendo uso di apposite istruzioni del linguaggio di programmazione. Nei microprocessori sono individuabili i seguenti blocchi funzionali fondamentali:
- registro istruzioni;
- decodificatore;
- accumulatore;
- unità logico aritmetica;
- registri di uso generale;
- contatore di programma;
- registro di stato;
- registro di stack;
- circuito di temporizzazione;
- unità di controllo;
- buffer BUS dati;
- buffer BUS indirizzi.
Registro istruzioni
Il codice operativo corrispondente all’istruzione, prelevato dalla memoria di programma tramite il BUS dati, viene memorizzato nel registro istruzioni (IR, Instruction Register). Questo comanda un circuito di decodifica che invia ai vari blocchi funzionali della CPU i segnali di sincronismo e di controllo necessari per l’esecuzione dell’istruzione stessa. Tale meccanismo è scandito da un clock, ossia da un segnale elettrico a una certa frequenza inviato alla CPU o generato internamente.
Decodificatore
Il decodificatore delle istruzioni riceve il codice operativo contenuto nel registro istruzioni e lo traduce in un codice comprensibile all’unità di controllo per le successive elaborazioni.
Accumulatore
Il registro accumulatore è spesso utilizzato per depositarvi i dati necessari allo sviluppo delle operazioni logiche e aritmetiche eseguite dal processore. Il programmatore, con specifiche istruzioni, può accedere all’accumulatore per immettervi o estrarne dati.
Unità logico aritmetica
L’unità logico aritmetica (ALU) è costituita da un circuito logico in grado di eseguire operazioni aritmetiche e logiche come la somma, la sottrazione, il complemento a uno e a due, l’AND, l’OR ecc. La ALU opera facendo uso dei dati posti in due registri temporanei, come ad esempio l’accumulatore, ove può essere successivamente depositato il risultato dell’operazione.
Registri di uso generale
Tali registri sono preseti in ogni microprocessore, dove di solito sono indicati da sigle composte da una o più lettere (A, B, AX, BX ecc.). Il loro numero e la loro capacità varia tuttavia a seconda del tipo di microprocessore. Anche questi registri sono in genere accessibili al programmatore e sono utilizzati per depositarvi temporaneamente i dati in altri registri.
Contatore di programma
Il registro contatore di programma (PC, Program Counter) contiene l’indirizzo dell’istruzione da eseguire. La fase detta di prelievo delle istruzioni (fecht) viene eseguita fornendo sul bus indirizzi il contenuto del contatore di programma. Esso viene quindi automaticamente incrementato di uno per indirizzare l’istruzione successiva permettendo di leggere sequenzialmente le locazioni di memoria ove sono contenuti i codici del programma. Con particolari istruzioni (salti e chiamate a sottoprogrammi) il contatore di programma può inoltre venire caricato con l’indirizzo della locazione di memoria relativa al salto o alla chiamata. Il registro contatore possiede un numero di bit pari a quello del bus indirizzi.
Registro di stato
Il registro di stato o dei flag è collegato all’ALU, e ha il compito di controllare il verificarsi di determinate condizioni del sistema. I bit in esso contenuti rappresentano con il loro stato logico, 0 od 1, alcune particolari condizioni che si verificano dopo l’esecuzione di operazioni logiche e aritmetiche. Tipico esempio è il flag riporto (carry), che indica che nell’operazione precedente eseguita c’è stato un rapporto o un prestito, oppure il flag di zero che indica la nullità del risultato dell’operazione. Lo stato dei singoli bit del registro può essere verificato con opportune istruzioni, che permettono, a seconda del valore riscontrato, di variare l’andamento del programma.
Registro di stack
Il registro di stack (SP, Stack Pointer) è un registro che, in corrispondenza di particolari istruzioni, trasferisce il suo contenuto di particolati registri della CPU. Il registro di stack contiene quindi l’indirizzo di una zona della memoria detta area di stack (catasta).
Ad esempio prima di passare dal programma principali ad un sottoprogramma il microprocessore memorizza nell’area di stack il valore corrente all’esecuzione del sottoprogramma, riprende l’esecuzione del programma principali esattamente dal punto in cui era avvenuta l’interruzione.
Lo stack è organizzato con la modalità LIFO (Last In First Out), ossia l’ultimo in modo sequenziale, una locazione dopo l’altra. La memoria di stack, che agisce da puntatore, viene ogni volta incrementato o decrementato di un passo a seconda che si stia operando una lettura o una scrittura di dati.
Il programmatore può utilizzare lo stack per memorizzarvi il contenuto dei vari registri. In ragione del suo utilizzo lo stack pointer ha un numero di bit pari a quello del bus indirizzi.
Circuito di temporizzazione
La successione delle operazioni sviluppate dal microprocessore si svolge secondo una cadenza ben precisa, sincronizzata su di un segnale detto clock del sistema. Esso viene generato da un circuito oscillante stabilizzato con un quarzo, in genere collocato all’esterno del microprocessore. Il collegamento avviene tramite un apposito piedino (pin).
Unità di controllo
L’unità di controllo ha il compito di gestire ogni fase delle operazioni, inviando i segnali necessari a coordinare il trasferimento dei dati tra i vari blocchi sia all’interno che all’esterno della CPU. Ciò avviene in concordanza con i segnali ricevuti dal decodificatore delle istruzioni e in sincronismo col segnale di clock. Tra le più imprtanti linee gestite dall’unità di controllo, presenti in genere in ogni processore, si citano a scopo esemplificativo quelle dedicate ai seguenti compiti:
- lettura, permette di ricevere dati dalla memoria o da una periferica;
- scrittura, consente di inviare dati da una memoria o ad una periferica;
- operazioni su memoria, per operazioni di scrittura o lettura su memoria;
- operazioni su periferica, per operazioni di scrittura o lettura su periferiche.
Buffer bus dati
I buffer sono registri che hanno il compito di mantenere temporaneamente nella loro memoria dei dati in transito, per poterli mettere a disposizione degli elementi richiesti al momento del loro utilizzo. Sulle linee del bus dati viaggiano sia i codici delle istruzioni che i dati. Tale connessione è di tipo bidirezionale, dovendo consentire sia operazioni di lettura che di scrittura. Il numero di linee che lo compongono varia da caso a caso.
Buffer bus indirizzi
Il bus indirizzi è costituito da un numero di linee atte a selezionare le locazioni di memoria o i dispositivi di I/O ai quali invia o dai quali riceve dati. Il BUS indirizzi è monodirezionale in quanto i segnali che transitano nelle sue linee sono uscenti dal microprocessore. Anche in questo caso il relativo buffer serve da tampone, mantenendo temporaneamente le informazioni in esso depositate.