Immaginiamo che il processore abbia un’istruzione analoga alla ”addi” del MIPS, più nello specifico ad una ”addi $r5, $r6, 23”.
Negli articoli precedenti abbiamo visto:
- Come funziona una CPU: progetto di circuiti logici #0
- Come funziona una CPU: Flip-Flop SR asincrono #0.1
- Come funziona una CPU: Flip-Flop sincrono #0.1.1
- Come funziona una CPU: Flip-Flop D #0.1.2
- Come funziona una CPU: Flip-Flop Master-Slave #0.1.3
- Come funziona una CPU: Modello di Huffman #0.2
- Come funziona una CPU: progetto di circuiti sequenziali sincroni #0.2.1
- Come funziona una CPU: progetto dei circuiti logici #0.3
- Come funziona una CPU: porte logiche operanti su parole #0.3.1
- Come funziona una CPU: multiplexer #0.3.2
- Come funziona una CPU: decodificatore #0.3.3
- Come funziona una CPU: codificatore (encoder) #0.3.4
- Come funziona una CPU: codificatore prioritario (priority encoder) #0.3.4.1
- Come funziona una CPU: sommatore full-adder #0.3.5
- Come funziona una CPU: sommatore Ripple Carry Adder #0.3.5.1
- Come funziona una CPU: sommatore seriale #0.3.5.2
- Come funziona una CPU: Sommatore con carry-lookahead #0.3.5.3
- Come funziona una CPU: ALU spiegata in modo semplice #0.3.5.4
- Come funziona una CPU: comparatore #0.3.5.5
- Come funziona una CPU: registro a m-bit #0.3.6
- Come funziona una CPU: registro a scalamento (Shift Register) #0.3.6.1
- Come funziona una CPU: contatore semplice #0.3.7
- Come funziona una CPU: contatore asincrono (ripple counter) #0.3.7.1
- Come funziona una CPU: contatore sincrono #0.3.7.2
- Come funziona una CPU: bus spiegato in modo semplice #0.3.8
- Come funziona una CPU: introduzione alla cpu #0.4
- Come funziona una CPU: architettura base di una CPU #0.4.1
- Come funziona una CPU: operazioni fondamentali CPU #0.4.2
- Come funziona una CPU: operazioni sulla ALU #0.4.3
- Come funziona una CPU: accesso in memoria (MAR ed MDR) #0.4.4
Da dove salta fuori l’immediato (ovvero la costante 23)? L’immediato è insito nel codice macchina dell’istruzione (in ogni processore è così). L’istruzione prevede di trasferire R6 in Y e di prendere i bit dell’IR che contengono l’immediato per trasferirli sul Bus interno. L’ALU riceve R6 ed i bit dell’IR ai propri ingressi, produce un risultato in Z che viene poi immagazzinato da R5.
Sequenza di microistruzioni:
- R6out;
- Yin;
- (IRimm)out;
- Add;
- Zin;
- Zout;
- R5in;
Consideriamo ora l’istruzione ”lw $r5, 8($r1)”.
La sequenza di mircroistruzioni necessarie è: Fetch (l’insieme di microistruzioni della fase di Fetch, precedentemente descritte), trasferimento di R1 sul Bus interno, acquisizione dell’immediato 8 dall’IR e suo trasferimento sul Bus interno, comunicazione alla ALU dell’esecuzione dell’istruzione di somma, acquisizione del risultato e sua memorizzazione in Z, trasferimento del valore contenuto in Z nel MAR attraverso il Bus interno, trasferimento del valore sull’ABus esterno dicendo alla Memoria di effettuare una lettura, attesa del segnale MFC, acquisizione del valore prodotto dalla Memoria e suo trasferimento in MDR, trasferimento del valore contenuto in MDR in R5.
La sequenza di segnali di controllo è:
- R1out;
- Yin;
- (IRimm)out;
- Add;
- Zin;
- Zout;
- MARin;
- MARout;
- RD (read del contenuto della parola corrispondente all’indirizzo sull ABus);
- Aspetta MFC;
- SEL = 0(per prendere il valore dal Data Bus esterno e metterlo in MDR);
- MDRin;
- MDR2out;
- R5in;
Un’istruzione di tipo j comporta l’acquisizione dell’indirizzo dell’istruzione a cui saltare e sua conseguente scrittura sul PC.
Iscriviti ai nostri gruppi Telegram
Link utili