Personal computer: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Riga 998:
=== Altri esempi di controller ===
Supponiamo di voler creare una nuova istruzione DLX del tipo
CMPS Rx, Ry, Rz
L'istruzione confronta il dato di tipo '''unsigned byte''' situato in memoria all'indirizzo Rx con quello all'indirizzo Ry e pone Rz a 1 se i due dati sono uguali
Una descrizione RTL delle operazioni svolte dalla nuova istruzione è data da:
if (M[Rx] = M[Ry])
then Rz <- 1
else Rz <- 0;
Il controller (datapath) di questa nuova istruzione, compresi gli stati di fetch e decodifica, sarà
IR <- M[PC] ; fetch dell'istruzione
A <- Rx
B <- Ry ; decodifica
PC <- PC + 4
MAR <- A ; preparo il registro di accesso alla memoria
MDR <- M[MAR] ; ed accedo
Temp <- MDR0..7 ## (0)24 ; Salvo soltanto i primi 8 bit (''unsigned byte'') nel registro temporaneo
MAR <- B ; e mi preparo a prelevare anche B
MDR <- M[MAR] ; lo prelevo
Temp == MDR0..7 ## (0)24 ; e lo confronto con temp
'''uguali''' C <- 1 ; se i dati prelevati dalla memoria sono uguali
'''diversi''' C <- 1 ; oppure diversi, l'unità di calcolo eseguirà solo una delle due istruzioni
Rz <- C ; scrivo il valore calcolato nel registro destinazione
Ogni blocco rappresenta un ciclo di clock, ad esclusione di quelli che accedono alla memoria per i quali la durata dipende dal tempo di accesso alla memoria
=== Numero di clock necessari per eseguire le istruzioni ===
|