Ciclo fetch-execute
In questa pagina 5
Registri coinvolti
| Registro | Contenuto |
|---|---|
| PC (Program Counter) | indirizzo della prossima istruzione |
| IR (Instruction Register) | istruzione in esecuzione |
| MAR (Memory Address Register) | indirizzo da mandare alla memoria sul bus indirizzi |
| MBR (Memory Buffer Register, o MDR) | dato letto dalla memoria o da scrivere |
| AC (accumulatore) | operando e risultato nelle macchine ad accumulatore |
Le due fasi
- Fetch (prelievo): ; la memoria legge; ; ; lunghezza dell'istruzione (in ARM e MIPS: byte).
- Execute (esecuzione): l'unità di controllo decodifica l'IR e svolge l'azione.
Le azioni possibili sono di quattro tipi:
| Tipo | Esempio |
|---|---|
| processore ↔ memoria | caricare un dato dalla memoria in un registro |
| processore ↔ I/O | leggere da una periferica |
| elaborazione dati | somma, AND, confronto nell'ALU |
| controllo | salto: scrive un nuovo valore nel PC |
Un'istruzione può combinarne più d'uno.
Diagramma degli stati
Un ciclo completo, nel caso generale, attraversa:
- calcolo dell'indirizzo dell'istruzione;
- prelievo dell'istruzione;
- decodifica dell'operazione;
- calcolo dell'indirizzo dell'operando (se l'operando è in memoria o in I/O);
- prelievo dell'operando (eventualmente ripetuto per più operandi);
- esecuzione dell'operazione;
- calcolo dell'indirizzo e scrittura del risultato;
- controllo delle interruzioni: se c'è una richiesta pendente si salva lo stato e si salta alla routine di servizio (vedi InterruptClassi di interruzioni; I/O guidato da interrupt; sequenza hardware e software di gestione con salvataggio del contesto sullo stack; identificazione della sorgente (linee multiple, polling, daisy chain, vettore); priorità e interruzioni annidate; eccezioni e modi in ARM.Interrupt →), altrimenti si torna al punto 1.
Quando l'operando è dato con indirizzamento indiretto (vedi Formato delle istruzioni e modalità di indirizzamentoModalità di indirizzamento (immediato, diretto, indiretto, a registro, indiretto a registro, con spiazzamento, relativo al PC, indicizzato e scalato, a pila) con indirizzo effettivo ed esempi; formati fissi e variabili; i formati R, I e J di MIPS e il formato a 32 bit di ARM con il calcolo dei campi.Formato delle istruzioni e modalità di indirizzamento →) si aggiunge un ciclo di prelievo dell'indirizzo effettivo.
Esempio su una macchina ad accumulatore
Istruzioni di 16 bit (4 bit di codice operativo, 12 di indirizzo), codici 1 = carica AC dalla memoria, 5 = somma la memoria ad AC, 2 = salva AC in memoria. Programma che somma le celle 940 e 941 e mette il risultato in 941 (indirizzi in esadecimale):
| Indirizzo | Contenuto | Significato |
|---|---|---|
| 300 | 1940 |
AC ← M[940] |
| 301 | 5941 |
AC ← AC + M[941] |
| 302 | 2941 |
M[941] ← AC |
| 940 | 0003 |
dato |
| 941 | 0002 |
dato |
Evoluzione: PC = 300 → IR = 1940, AC = 3, PC = 301 → IR = 5941, AC = 3 + 2 = 5, PC = 302 → IR = 2941, M[941] = 5, PC = 303. Tre cicli di istruzione, sei accessi alla memoria (tre prelievi di istruzioni e tre accessi ai dati).
Errori tipici
- Incrementare il PC solo alla fine dell'esecuzione: si incrementa già nel fetch, per questo in un salto relativo l'offset si somma al PC già avanzato.
- Dimenticare che il controllo delle interruzioni avviene tra due istruzioni, non durante.
Versione ripasso
Registri: PC (prossima istruzione), IR, MAR (indirizzo verso la memoria), MBR o MDR (dato), AC.
Fasi
- Fetch: ; ; ; (ARM, MIPS).
- Execute: decodifica dell'IR; quattro tipi di azione: processore-memoria, processore-I/O, elaborazione dati, controllo (salto: scrive il PC).
Passi completi: calcolo e prelievo dell'istruzione, decodifica, calcolo e prelievo dell'operando, esecuzione, scrittura; poi controllo delle interruzioni: se c'è una richiesta si salva lo stato e si salta alla routine (InterruptClassi di interruzioni; I/O guidato da interrupt; sequenza hardware e software di gestione con salvataggio del contesto sullo stack; identificazione della sorgente (linee multiple, polling, daisy chain, vettore); priorità e interruzioni annidate; eccezioni e modi in ARM.Interrupt →). L'indirizzamento indiretto (Formato delle istruzioni e modalità di indirizzamentoModalità di indirizzamento (immediato, diretto, indiretto, a registro, indiretto a registro, con spiazzamento, relativo al PC, indicizzato e scalato, a pila) con indirizzo effettivo ed esempi; formati fissi e variabili; i formati R, I e J di MIPS e il formato a 32 bit di ARM con il calcolo dei campi.Formato delle istruzioni e modalità di indirizzamento →) aggiunge un prelievo.
Esempio ad accumulatore
Istruzioni da 16 bit (4 di codice operativo, 12 di indirizzo): 1 carica AC, 5 somma, 2 salva. 300 1940, 301 5941, 302 2941; M[940] = 3, M[941] = 2.
- PC = 300: AC = 3.
- PC = 301: AC = 3 + 2 = 5.
- PC = 302: M[941] = 5, PC = 303.
Tre cicli, sei accessi alla memoria.
Errori tipici: il PC si incrementa già nel fetch (un salto relativo parte dal PC avanzato); le interruzioni si controllano tra due istruzioni.