Personal computer: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pizeta (discussione | contributi)
Pizeta (discussione | contributi)
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 ===