# Calcolatori elettronici/I processori

Calcolatori elettronici
Copertina Tutti i moduli · Sviluppo
    CopertinaCalcolatori elettronici/Copertina
* L'evoluzione dei sistemi di elaborazioneCalcolatori elettronici/L'evoluzione dei sistemi di elaborazione
* Il progetto di circuiti logiciCalcolatori elettronici/Il progetto di circuiti logici
* I processoriCalcolatori elettronici/I processori
* Architettura 8086Calcolatori elettronici/Architettura 8086
* Unità di controlloCalcolatori elettronici/Unità di controllo
* Introduzione alle memorieCalcolatori elettronici/Introduzione alle memorie
* Le memorie ad accesso casualeCalcolatori elettronici/Le memorie ad accesso casuale
* Le memorie cacheCalcolatori elettronici/Le memorie cache
* Le memorie ad accesso serialeCalcolatori elettronici/Le memorie ad accesso seriale
* La memoria virtualeCalcolatori elettronici/La memoria virtuale
* La gestione dei dispositivi input/outputCalcolatori elettronici/La gestione dei dispositivi input/output
* Intel 8255Calcolatori elettronici/Intel 8255
* Intel 8259Calcolatori elettronici/Intel 8259
* I busCalcolatori elettronici/I bus
* Le architetture a pipelineCalcolatori elettronici/Le architetture a pipeline
* Assembler 8086
          IntroduzioneCalcolatori elettronici/Introduzione
   * Informazioni generaliCalcolatori elettronici/Informazioni generali
   * Istruzioni di trasferimento datiCalcolatori elettronici/Istruzioni di trasferimento dati
   * Istruzioni aritmeticheCalcolatori elettronici/Istruzioni aritmetiche
   * Istruzioni per il controllo del flussoCalcolatori elettronici/Istruzioni per il controllo del flusso
   * Istruzioni per la manipolazione dei bitCalcolatori elettronici/Istruzioni per la manipolazione dei bit
   * Le procedureCalcolatori elettronici/Le procedure
   * Istruzioni per il controllo del processoreCalcolatori elettronici/Istruzioni per il controllo del processore
   * Formato delle istruzioni macchina, tempi di esecuzioneCalcolatori elettronici/Formato delle istruzioni macchina, tempi di esecuzione
Modifica il sommario
Il processore è un dispositivo capace di:
* elaborare istruzioni, cioè leggere delle istruzioni dalla memoria (fase di fetch) ed eseguirle (fase di esecuzione);
* interagire con il mondo esterno attraverso le porte di periferica, reagendo il più presto possibile alle segnalazioni (= richieste di interrupt) provenienti dall'esterno.
L'importanza di ciascuna di queste capacità dipende dalla destinazione d'uso del processore.

## Elaborazione delle istruzioni
### Fase di fetch

L'instruction set è l'insieme delle operazioni che il processore è in grado di eseguire. A ogni operazione corrisponde una certa istruzione in memoria (es. ADD). Durante la fase di fetch il processore legge una di queste istruzioni dalla memoria tramite un bus esterno:
* il Program Counter (PC) contiene l'indirizzo di memoria della nuova istruzione da leggere;
* l'Address Register (AR) passa il nuovo indirizzo dal PC alla memoria;
* la memoria restituisce la porzione di codice corrispondente all'indirizzo specificato dal processore;
* il Data Register (DR) memorizza nell'Instruction Register (IR) la porzione di codice proveniente dalla memoria, pronta ad essere decodificata ed eseguita dal processore;
* il PC viene aggiornato all'indirizzo dell'istruzione successiva a quella letta.

### Fase di esecuzione

L'unità di controllo, tramite il bus interno, dopo aver ricevuto l'istruzione dall'IR, ha il compito di pilotare i vari moduli, cioè fornire segnali di controllo ad essi, per le operazioni ad es. di caricamento degli operandi, esecuzione delle istruzioni, acquisizione dei risultati, ecc. La ALU è il modulo che esegue una serie di operazioni aritmetiche/logiche su operandi. I registri AC forniscono gli operandi alla ALU e ricevono i risultati delle operazioni.
All'interno di ogni istruzione si possono identificare delle microistruzioni elementari (es. accesso ai registri, fetch, ecc.), ciascuna delle quali richiede un colpo di clock.
Il tempo di esecuzione di un'istruzione, misurato in colpi di clock, dipende da:
* tipo di istruzione: quale istruzione eseguire (es. MOV, ADD)?
* tipo di operandi: l'operando si trova nei registri (accesso più veloce) o in memoria (ritardo del fetch)?
* modo di indirizzamento: l'indirizzo passato è diretto (es. VAR) o richiede una somma (es. vett[DI])?
Gli operandi di una generica istruzione possono essere contenuti nei registri (Rx) o nella memoria (M[xx]), a seconda di ciò che è richiesto dall'operazione letta dalla memoria. I registri sono dei moduli di memoria costituiti da flip-flop che risiedono all'interno del processore. Anche se il numero di registri è finito, il tempo di accesso a un registro è molto minore del tempo di accesso a una cella di memoria, a causa dei colpi di clock necessari durante l'operazione di fetch. Il compilatore di C decide automaticamente se utilizzare i registri o la memoria, privilegiando quando possibile i primi: nel caso in cui l'operando si trova in memoria, durante la fase di esecuzione dell'operazione è necessario effettuare un ulteriore fetch per l'operando.
Per ridurre i tempi di esecuzione, mentre l'execution unit esegue un'operazione la bus interface unit si occupa del fetch dell'istruzione successiva.

## Note

* ↑ Il DR viene usato in generale per il trasferimento di dati tra la memoria e il processore: un ulteriore segnale di controllo indica se l'operazione che deve effettuare la memoria è la lettura o la scrittura.