COSTRUZIONE DEL MICROCODICE PER ISTRUZIONI DI TIPO M68000 Si vogliono dare le μ-routine simboliche per insiemi di istruzioni simili a quelle di M68000:
1. Supponendo di avere un processore generico, con parole di memoria da 32 bit, registri interni Ri in numero adeguato da 32 bit e bus dati da 32 bit.
2. Supponendo di avere la struttura interna del processore a un solo bus (vedi di seguito).
3. Supponendo di avere l’unità di controllo μ-programmata di Figura 8.25 (vedi di seguito).
4. Scegliendo alcune tipologie di istruzione macchina differenti, binarie o unarie:
Mnemonico Argomento / i Commento
a. move s, d ! trasferimento
b. add (and) s, d ! aritmetica (logica)
c. jump dest. ! salto incondizionato
d. branch = 0 dest. ! salto condizionato = 0 5. Ortogonalizzando un argomento in tutti i modi possibili, per avere generalità.
6. Lasciando l’altro argomento in modo di registro, per evitare troppe complessità peraltro non particolarmente significative.
7. Usando:
a. per gli argomenti di tipo dato (sorgente o destinazione) i modi di indirizzamento specifici per i dati,
b. per l’argomento destinazione di salto i modi di indirizzamento specifici per le istruzioni.
8. Precisando per ogni modo di indirizzamento il ragionevole ingombro dell’istruzione in termini di numero di parole di memoria (da 32 bit); in particolare:
a. la parola di codice operativo è lunga abbastanza per contenere il codice operativo, i modi e i numeri dei registri contenuti nell’istruzione, e anche un eventuale spiazzamento breve
b. costante, indirizzo e spiazzamento (non breve) occupano ciascuna un parola aggiuntiva.
9. Includendo la fase di prelievo e specificando il salto alle varie modalità di esecuzione secondo il modo di indirizzamento.
10. Prevedendo due versioni ragionevoli di μ-codice laddove si dà il caso (per esempio, salto condizionato).
Si danno di seguito le istruzioni, le interpretazioni RTL, le tavole di ingombro (ragionevole), e le tabelle di μ-codice denotato simbolicamente: prima interpretazione RTL delle μ- operazioni, poi i μ-ordini corrispondenti alle μ-operazioni.
MODELLO GENERICO DI PROCESSORE
n registri di uso generale
SP R
0R
1R
n − 1PC
puntatore alla pila
contatore di programma
parola
banco di registri
registri di uso speciale
informazioni di stato
32 bitvari bit di uso diverso
STRUTTURA DI PROCESSORE A UN BUS INTERNO
linee di dato linee di indirizzo
bus di memoria
riporto in ingresso ALU
PC
MAR
MDR
V
Z add
and sub
IR
TEMP R0
linee di comando della ALU
ordini
Rn − 1 decodificatore
di istruzioni e circuito di controllo bus interno del processore
A B
select
costante 4
MUX
R 32 bit
32 bit 32 bit
STRUTTURA DELL’UNITÀ μ-PROGRAMMATA
decodificatore di μ ordini
memoria di μ programma
C0 (μ indirizzo) C1 C2
altri μ ordini
(diretti al resto del processore o unità di calcolo) C10 C9 C8 decodificatore
decodificatore
circuiti di mascheratura
e decodifica bit di esito
(cod. cond.)
ingressi esterni (bus)
Rsorg. Rdest.
IR
Rdest.out
Rdest.in
Rsorg.out
Rsorg.in
μ MAR
decode opcode field of IR mask by IR10,9,8
mask by IR8
R15in R15out R0in R0out
μ IR
codice op. e modo
schiera di porte OR
interpreta campi
μ ordini diretti ai registri di processore
32 bit
CLASSE DI TRASFERIMENTO – DA MEMORIA A REGISTRO PRIMO ARGOMENTO ORTOGONALE
move sorgente_in_tutti_i_modi_di_indirizzamento_di_dato, destinazione_registro Modo Modello Generico Funzionamento in RTL
move s, d d ← [s]
1 move #costante, Rq Rq ← costante
2 move Rp, Rq Rq ← [Rp]
3 move (Rp), Rq Rq ← [[Rp]]
4 move (Rp) +, Rq Rq ← [[Rp]] e poi Rp ← [Rp] + 4 5 move − (Rp), Rq Rp ← [Rp] − 4 e poi Rq ← [[Rp]]
6 move spiazzamento (Rp), Rq Rq ← [spiazzamento + [Rp]]
7 move spiazzamento (Rp, Ra), Rq Rq ← [spiazzamento + [Rp] + [Ra]]
8 move indirizzo, Rq Rq ← [indirizzo]
9 move (indirizzo), Rq Rq ← [[indirizzo]]
Modo Modello Generico Ingombri (in parole da 32 bit)
move s, d d ← [s]
1 move #costante, Rq 2 (1 opcode + 1 costante)
2 move Rp, Rq 1 (soltanto opcode)
3 move (Rp), Rq 1 (soltanto opcode) 4 move (Rp) +, Rq 1 (soltanto opcode) 5 move − (Rp), Rq 1 (soltanto opcode)
6 move spiazzamento (Rp), Rq 2 (1 opcode + 1 spiazzamento) 7 move spiazzamento (Rp, Ra), Rq 2 (1 opcode + 1 spiazzamento) 8 move indirizzo, Rq 2 (1 opcode + 1 indirizzo) 9 move (indirizzo), Rq 2 (1 opcode + 1 indirizzo)
move #costante, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo,
se (modo di s = #cost.) và a μ−ind. a se (modo di s = Rp) và a μ−ind. b se (modo di s = (Rp)) và a μ−ind. c se (modo di s = (Rp) +) và a μ−ind. d se (modo di s = − (Rp)) và a μ−ind. e se (modo di s = spi. (Rp)) và a μ−ind. f se (modo di s = spi. (Rp, Rb)) và a μ−ind. g se (modo di s = ind.) và a μ−ind. h se (modo di s = (ind.)) và a μ−ind. i
decode opcode field of IR,
if (mode of s = #cost.) goto μ−addr. a if (mode of s = Rp) goto μ−addr. b if mode of s = (Rp)) goto μ−addr. c if (mode of s = (Rp) +) goto μ−addr. d if (mode of s = − (Rp)) goto μ−addr. r if (mode of s = spi. (Rp)) goto μ−addr. f if (mode of s = spi. (Rp, Rb)) goto μ−addr. g if (mode of s = ind.) goto μ−addr. h if (mode of s = (ind.)) goto μ−addr. i 5 a MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 a + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 a + 2 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
move Rp, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 b Rq ← [Rp], finisci (o và a μ−ind. 1) Rpout, Rqin, end (or goto μ−addr. 1)
move (Rp), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 c MAR ← [Rp], leggi, attendi Rpout, MARin, read, WMFC
6 c + 1 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
move (Rp) +, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 d MAR ← [Rp], Z ← [Rp] + 4, leggi Rpout, MARin, select 4, Zin, read, add 6 d + 1 Rp ← [Z], attendi Zout, Rpin, WMFC
7 d + 2 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
move − (Rp), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 e Z ← [Rp] − 4 Rpout, select 4, Zin, sub
6 e + 1 Rp ← [Z], MAR ← [Z], leggi, attendi Zout, Rpin, MARin, read, WMFC
7 e + 2 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
move spiazzamento (Rp), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 f MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 f + 1 PC ← [Z] Zout, PCin
7 f + 2 V ← [Rp], attendi Rpout, Vin, WMFC
8 f + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add 9 f + 4 MAR ← [Z], leggi, attendi Zout, MARin, read, WMFC
10 f + 5 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
move spiazzamento (Rp, Ra), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 g MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 g + 1 PC ← [Z] Zout, PCin
7 g + 2 V ← [Rp] Rpout, Vin
8 g + 3 Z ← [Ra] + [V] Raout, select V, Zin, add 9 g + 4 V ← [Z], attendi Zout, Vin, WMFC
10 g + 5 Z ← [MDR] + [V] MDRout, select V, Zin, add 11 g + 6 MAR ← [Z], leggi, attendi Zout, MARin, read, WMFC
12 g + 7 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
move indirizzo, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 h MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 h + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 h + 2 MAR ← [MDR], leggi, attendi MDRout, MARin, read, WMFC
8 h + 3 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
move (indirizzo), Rq – in M68000 non esiste !
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = #cost., Rp, (Rp), (Rp) +, − (Rp), spi.
(Rp)., spi. (Rp, Rb)., ind., (ind.)) và a μ−ind.
a, b, c, d, e, f, g, h
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, d, e, f, g, h
5 i MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 i + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 i + 2 MAR ← [MDR], leggi, attendi MDRout, MARin, read, WMFC 8 i + 3 MAR ← [MDR], leggi, attendi MDRout, MARin, read, WMFC
9 i + 4 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
CLASSE DI TRASFERIMENTO – DA REGISTRO A MEMORIA SECONDO ARGOMENTO ORTOGONALE
move sorgente_registro, destinazione_in_tutti_i_modi_di_indirizzamento_di_dato Modo Modello Generico Funzionamento in RTL
move s, d d ← [s]
1 impossibile
2 move Rp, Rq Rq ← [Rp]
3 move Rp, (Rq) [Rq] ← [Rp]
4 move Rp, (Rq) + [Rq] ← [Rp] e poi Rq ← [Rq] + 4 5 move Rp, − (Rq) Rq ← [Rq] − 4 e poi [Rq] ← [Rp]
6 move Rp, spiazzamento (Rq) spiazzamento + [Rp] ← [Rp]
7 move Rp, spiazzamento (Rq, Rb) spiazzamento + [Rp] + [Rb] ← [Rp]
8 move Rp, indirizzo indirizzo ← [Rp]
9 move Rp, (indirizzo) [indirizzo] ← [Rp]
Modo Modello Generico Ingombri (in parole da 32 bit)
move s, d d ← [s]
1 impossibile
2 move Rp, Rq 1 (soltanto opcode)
3 move Rp, (Rq) 1 (soltanto opcode) 4 move Rp, (Rq) + 1 (soltanto opcode) 5 move Rp, − (Rq) 1 (soltanto opcode)
6 move Rp, spiazzamento (Rq) 2 (1 opcode + 1 spiazzamento) 7 move Rp, spiazzamento (Rq, Rb) 2 (1 opcode + 1 spiazzamento) 8 move Rp, indirizzo 2 (1 opcode + 1 indirizzo) 9 move Rp, (indirizzo) 2 (1 opcode + 1 indirizzo)
move Rp, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 a Rq ← [Rp], finisci (o và a μ−ind. 1) Rpout, Rqin, end (or goto μ−addr. 1)
move Rp, (Rq)
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 b MAR ← [Rq] Rqout, MARin
6 b + 1 MDR ← [Rp], scrivi, attendi, finisci (o và a μ−ind. 1)
Rpout, MDRin, write, WMFC, end (or goto μ−addr. 1)
move Rp, (Rq) +
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 c MAR ← [Rq], Z ← [Rq] + 4 Rqout, MARin, select 4, Zin, add 6 c + 1 MDR ← [Rp], scrivi Rpout, MDRin, write
8 c + 2 Rq ← [Z], attendi, finisci (o và a μ−ind. 1) Zout, Rqin, WMFC, end (or goto μ−addr.
1)
move Rp, − (Rq)
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 d Z ← [Rq] − 4 Rqout, select 4, Zin, sub
6 d + 1 Rq ← [Z], MAR ← [Z] Zout, MARin, Rqin
8 d + 2 MDR ← [Rp], scrivi, attendi, finisci (o và a μ−ind. 1)
Rpout, MDRin, write, WMFC, end (or goto μ−addr. 1)
move Rp, spiazzamento (Rq)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 e MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 e + 1 PC ← [Z] Zout, PCin
7 e + 2 V ← [Rq], attendi Rqout, Vin, WMFC
8 e + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add
9 e + 4 MAR ← [Z] Zout, MARin
10 e + 5 MDR ← [Rp], scrivi, attendi, finisci (o và a μ−ind. 1)
Rpout, MDRin, write, WMFC, end (or goto μ−addr. 1)
move Rp, spiazzamento (Rq, Rb)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 f MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 f + 1 PC ← [Z] Zout, PCin
7 f + 2 V ← [Rq] Rqout, Vin
8 f + 3 Z ← [Rb] + [V] Rbout, select V, Zin, add 9 f + 4 V ← [Z], attendi Zout, Vin, WMFC
10 f + 5 Z ← [MDR] + [V] Rbout, select V, Zin, add
11 f + 6 MAR ← [Z] Zout, MARin
12 f + 7 MDR ← [Rp], scrivi, attendi, finisci (o và
a μ−ind. 1) Rpout, MDRin, write, WMFC, end (or goto μ−addr. 1)
move Rp, indirizzo
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 g MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 g + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 g + 2 MAR ← [MDR] MDRout, MARin
8 g + 3 MDR ← [Rp], scrivi, attendi, finisci (o và
a μ−ind. 1) Rpout, MDRin, write, WMFC, end (or goto μ−addr. 1)
move Rp, (indirizzo) – in M68000 non esiste !
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 h MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 h + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 h + 2 MAR ← [MDR], leggi, attendi MDRout, MARin, read, WMFC
8 h + 3 MAR ← [MDR] MDRout, MARin
9 h + 4 MDR ← [Rp], scrivi, attendi, finisci (o và
a μ−ind. 1) Rpout, MDRin, write, WMFC, end (or goto μ−addr. 1)
CLASSE ARITMETICA-LOGICA (ADD, AND)
FONDAMENTALMENTE IDENTICA A MOVE, SALVO ESEGUIRE L’OPERAZIONE PRIMO ARGOMENTO ORTOGONALE
add sorgente_in_tutti_i_modi_di_indirizzamento_di_dato, destinazione_registro Modo Modello Generico Funzionamento in RTL
add s, d d ← [s] + [d]
1 add #costante, d d ← costante + [d]
2 add Rp, d d ← [Rp] + [d]
3 add (Rp), d d ← [[Rp]] + [d]
4 add (Rp) +, d d ← [[Rp]] + [d] e poi Rp ← [Rp] + 4 5 add − (Rp), d Rp ← [Rp] − 4 e poi d ← [[Rp]] + [d]
6 add spiazz. (Rp), d d ← [spiazz. + [Rp]] + [d]
7 add spiazz. (Rp, Ra), d d ← [spiazz. + [Rp] + [Ra]] + [d]
8 add indirizzo, d d ← [indirizzo] + [d]
9 add (indirizzo), d d ← [[indirizzo]] + [d]
Modo Modello Generico Ingombri (in parole da 32 bit)
add s, d d ← [s]
1 add #costante, Rq 2 (1 opcode + 1 costante)
2 add Rp, Rq 1 (soltanto opcode)
3 add (Rp), Rq 1 (soltanto opcode) 4 add (Rp) +, Rq 1 (soltanto opcode) 5 add − (Rp), Rq 1 (soltanto opcode)
6 add spiazzamento (Rp), Rq 2 (1 opcode + 1 spiazzamento) 7 add spiazzamento (Rp, Ra), Rq 2 (1 opcode + 1 spiazzamento) 8 add indirizzo, Rq 2 (1 opcode + 1 indirizzo) 9 add (indirizzo), Rq 2 (1 opcode + 1 indirizzo)
add #costante, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 a MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 a + 1 PC ← [Z] Zout, PCin
7 a + 2 V ← [Rq], attendi Rqout, Vin, WMFC
8 a + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add
9 a + 4 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1)
add Rp, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 b V ← [Rq] Rqout, Vin
6 b + 1 Z ← [Rp] + [V] Rpout, select V, Zin, add
7 b + 2 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1)
add (Rp), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 c MAR ← [Rp], leggi Rpout, MARin, read 6 c + 1 V ← [Rq], attendi Rqout, Vin, WMFC
7 c + 2 Z ← [MDR] + [V] MDRout, select V, Zin, add
8 c + 3 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1)
add (Rp) +, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 d MAR ← [Rp], Z ← [Rp] + 4, leggi Rpout, MARin, select 4, Zin, read, add
6 d + 1 Rp ← [Z] Zout, Rpin
7 d + 2 V ← [Rq], attendi Rqout, Vin, WMFC
8 d + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add
9 d + 4 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1)
add − (Rp), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 e Z ← [Rp] − 4 Rpout, select 4, Zin, sub
6 e + 1 Rp ← [Z], MAR ← [Z], leggi Zout, Rpin, MARin, read 7 e + 2 V ← [Rq], attendi Rqout, Vin, WMFC
8 e + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add
9 e + 4 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1)
add spiazzamento (Rp), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 f MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 f + 1 PC ← [Z] Zout, PCin
7 f + 2 V ← [Rp], attendi Rpout, Vin, WMFC
8 f + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add 9 f + 4 MAR ← [Z], leggi Zout, MARin, read
10 f + 5 V ← [Rq], attendi Rqout, Vin, WMFC
11 f + 6 Z ← [MDR] + [V] MDRout, select V, Zin, add
12 f + 7 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1)
add spiazzamento (Rp, Ra), Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 g MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 g + 1 PC ← [Z] Zout, PCin
7 g + 2 V ← [Rp], attendi Rpout, Vin, WMFC
8 g + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add
9 g + 4 V ← [Z] Zout, Vin
10 g + 5 Z ← [Ra] + [V] Raout, select V, Zin, add 11 g + 6 MAR ← [Z], leggi Zout, MARin, read
12 g + 7 V ← [Rq], attendi Rqout, Vin, WMFC
13 g + 8 Z ← [MDR] + [V] MDRout, select V, Zin, add
14 g + 9 Rq ← [MDR], finisci (o và a μ−ind. 1) MDRout, Rqin, end (or goto μ−addr. 1)
add indirizzo, Rq
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 h MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 h + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 h + 2 MAR ← [MDR], leggi MDRout, MARin, read 8 h + 3 V ← [Rq], attendi Rqout, Vin, WMFC
9 h + 4 Z ← [MDR] + [V] MDRout, select V, Zin, add
10 h + 5 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1)
add (indirizzo), Rq – in M68000 non esiste !
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di s = costante, di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 i MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 i + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 i + 2 MAR ← [MDR], leggi, attendi MDRout, MARin, read, WMFC 8 i + 3 MAR ← [MDR], leggi MDRout, MARin, read
9 i + 4 V ← [Rq], attendi Rqout, Vin, WMFC
10 i + 5 Z ← [MDR] + [V] MDRout, select V, Zin, add
11 i + 6 Rq ← [Z], finisci (o và a μ−ind. 1) Zout, Rqin, end (or goto μ−addr. 1) idem per AND e tutte le altre …
CLASSE ARITMETICA-LOGICA (ADD, AND)
FONDAMENTALMENTE IDENTICA A MOVE, SALVO ESEGUIRE L’OPERAZIONE SECONDO ARGOMENTO ORTOGONALE
add sorgente_registro, destinazione_in_tutti_i_modi_di_indirizzamento_di_dato Modo Modello Generico Funzionamento in RTL
add s, d d ← [s] + [d]
1 impossibile
2 add s, Rq Rq ← [s] + [Rq]
3 add s, (Rq) [Rq] ← [s] + [[Rq]]
4 add s, (Rq) + [Rq] ← [s] + [[Rq]] e poi Rq ← [Rq] + 4 5 add s, − (Rq) Rq ← [Rq] − 4 e poi [Rq] ← [s] + [[Rq]]
6 add s, spiazz. (Rq) spiazz. + [Rq] ← [s] + [spiazz. + [Rq]]
7 add s, spiazz. (Rq, Rb) spiazz. + [Rq] + [Rb] ← [s] + [spiazz. + [Rq] + [Rb]]
8 add s, indirizzo indirizzo ← [s] + [indirizzo]
9 add s, (indirizzo) [indirizzo] ← [s] + [[indirizzo]]
Modo Modello Generico Ingombri (in parole da 32 bit)
add s, d d ← [s] + [d]
1 impossibile
2 add Rp, Rq 1 (soltanto opcode)
3 add Rp, (Rq) 1 (soltanto opcode) 4 add Rp, (Rq) + 1 (soltanto opcode) 5 add Rp, − (Rq) 1 (soltanto opcode)
6 add Rp, spiazzamento (Rq) 2 (1 opcode + 1 spiazzamento) 7 add Rp, spiazzamento (Rq, Rb) 2 (1 opcode + 1 spiazzamento) 8 add Rp, indirizzo 2 (1 opcode + 1 indirizzo) 9 add Rp, (indirizzo) 2 (1 opcode + 1 indirizzo)
add Rp, (Rq)
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 b MAR ← [Rq], leggi Rqout, MARin, read 6 b + 1 V ← [Rp], attendi Rpout, Vin, WMFC
7 b + 2 Z ← [MDR] + [V] MDRout, select V, Zin, add 8 b + 3 MDR ← [Z], scrivi, attendi, finisci (o và a
μ−ind. 1)
Zout, MDRin, write, WMFC, end (or goto μ−addr. 1)
add Rp, (Rq) +
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 c MAR ← [Rq], Z ← [Rq] + 4, leggi Rqout, MARin, select 4, Zin, read, add
6 c + 1 Rq ← [Z] Zout, Rqin,
7 c + 2 V ← [Rp], attendi Rpout, Vin, WMFC
8 c + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add 9 c + 4 MDR ← [Z], scrivi, attendi, finisci (o và a
μ−ind. 1)
Zout, MDRin, write, WMFC, end (or goto μ−addr. 1)
add Rp, − (Rq)
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 d Z ← [Rq] − 4 Rqout, select 4, Zin, sub
6 d + 1 Rq ← [Z], MAR ← [Z], leggi Zout, MARin, Rqin, read 7 d + 2 V ← [Rp], attendi Rpout, Vin, WMFC
8 d + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add 9 d + 4 MDR ← [Z], scrivi, attendi, finisci (o và a
μ−ind. 1) Zout, MDRin, write, WMFC, end (or goto μ−addr. 1)
add Rp, spiazzamento (Rq)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 e MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 e + 1 PC ← [Z] Zout, PCin
7 e + 2 V ← [Rq], attendi Rqout, Vin, WMFC
8 e + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add 9 e + 4 MAR ← [Z], leggi Zout, MARin, read
10 e + 5 V ← [Rp], attendi Rpout, Vin, WMFC
11 e + 6 Z ← [MDR] + [V] MDRout, select V, Zin, add 12 e + 7 MDR ← [Z], scrivi, attendi, finisci (o và a
μ−ind. 1)
Zout, MDRin, write, WMFC, end (or goto μ−addr. 1)
add Rp, spiazzamento (Rq, Rb)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 f MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 f + 1 PC ← [Z] Zout, PCin
7 f + 2 V ← [Rq] Rqout, Vin
8 f + 3 Z ← [Rb] + [V] Rbout, select V, Zin, add 9 f + 4 V ← [Z], attendi Zout, Vin, WMFC
10 f + 5 Z ← [MDR] + [V] Rbout, select V, Zin, add 11 f + 6 MAR ← [Z], leggi Zout, MARin, read
12 f + 7 V ← [Rp], attendi Rpout, Vin, WMFC
13 f + 8 Z ← [MDR] + [V] MDRout, select V, Zin, add 14 f + 9 MDR ← [Z], scrivi, attendi, finisci (o và a
μ−ind. 1)
Zout, MDRin, write, WMFC, end (or goto μ−addr. 1)
add Rp, indirizzo
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 g MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 g + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 g + 2 MAR ← [MDR], leggi MDRout, MARin, read 8 g + 3 V ← [Rp], attendi Rpout, Vin, WMFC
9 g + 4 Z ← [MDR] + [V] MDRout, select V, Zin, add 10 g + 5 MDR ← [Z], scrivi, attendi, finisci (o và a
μ−ind. 1)
Zout, MDRin, write, WMFC, end (or goto μ−addr. 1)
add Rp, (indirizzo) – in M68000 non esiste !
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di d = di registro, indiretto da reg., con autoinc., con autodec., con indice e spi., con base indice e spi., assoluto, indiretto da mem.) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of d
= … (as aside)) goto μ−addr. a, b, c, …
5 h MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 h + 1 PC ← [Z], attendi Zout, PCin, WMFC
7 h + 2 MAR ← [MDR], leggi MDRout, MARin, read 8 h + 3 V ← [Rp], attendi Rpout, Vin, WMFC
9 h + 4 MAR ← [MDR], leggi, attendi MDRout, MARin, read, WMFC 10 h + 5 Z ← [MDR] + [V] MDRout, select V, Zin, add 11 h + 6 MDR ← [Z], scrivi, attendi, finisci (o và a
μ−ind. 1) Zout, MDRin, write, WMFC, end (or goto μ−addr. 1)
idem per AND e tutte le altre …
CLASSE DI SALTO INCONDIZIONATO
jump destinazione_in_tutti_i_modi_di_indirizzamento_di_istruzione Modo Modello Generico Funzionamento in RTL
jump dest. PC ← [dest. ]
1 jump (Rp) PC ← [Rp]
2 jump spiazzamento (PC) jump etichetta
PC ← spiazzamento + [PC]
PC ← distanza etichetta + [PC]
3 jump spiazzamento (PC, Ra) jump etichetta (Rb)
PC ← spiazzamento + [PC] + [Ra]
PC ← distanza etichetta + [PC] + [Ra]
4 jump indirizzo PC ← indirizzo
5 jump (indirizzo) PC ← [indirizzo]
Modo Modello Generico Ingombri (in parole da 32 bit)
jump dest. d ← [s]
1 jump (Rp) 1 (soltanto opcode)
2 jump spiazzamento (PC)
jump etichetta 2 (1 opcode + 1 spiazzamento) 3 jump spiazzamento (PC, Ra)
jump etichetta (Rb) 2 (1 opcode + 1 spiazzamento) 4 jump indirizzo 2 (1 opcode + 1 spiazzamento) 5 jump (indirizzo) 2 (1 opcode + 1 spiazzamento)
jump (Rp)
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto da memoria) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 a PC ← [Rp], finisci (o và a μ−ind. 1) Rpout, PCin, end (or goto μ−addr. 1)
jump spiazzamento (PC)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto da memoria) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 b MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 b + 1 V ← [Z], attendi Zout, Vin, WMFC
7 b + 2 Z ← [MDR] + [V] MDRout, select V, Zin, add
8 b + 3 PC ← [Z], finisci (o và a μ−ind. 1) Zout, PCin, end (or goto μ−addr. 1)
NOTA BENE: il valore di PC cui si fà riferimento è quello che punta all’istruzione immediatamente successiva a “jump (PC)”.
jump spiazzamento (PC, Ra)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto da memoria) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 c MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add
6 c + 1 V ← [Z] Zout, Vin
7 c + 2 Z ← [Ra] + [V] Raout, select V, Zin, add 8 c + 3 V ← [Z], attendi Zout, Vin, WMFC
9 c + 4 Z ← [MDR] + [V] MDRout, select V, Zin, add
10 c + 5 PC ← [Z], finisci (o và a μ−ind. 1) Zout, PCin, end (or goto μ−addr. 1)
NOTA BENE: il valore di PC cui si fà riferimento è quello che punta
all’istruzione immediatamente successiva a “jump (PC, Ra)”.
jump indirizzo
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto da memoria) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 d MAR ← [PC], preleva, attendi PCout, MARin, read, WMFC
6 d + 1 PC ← [MDR], finisci (o và a μ−ind. 1) MDRout, PCin, end (or goto μ−addr. 1)
jump (indirizzo)
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto da memoria) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 e MAR ← [PC], preleva, attendi PCout, MARin, read, WMFC 6 e + 1 MAR ← [MDR], leggi, attendi MDRout, MARin, read, WMFC
7 e + 2 PC ← [MDR], finisci (o và a μ−ind. 1) MDRout, PCin, end (or goto μ−addr. 1)
CLASSE DI SALTO CONDIZIONATO
branch cc destinazione_in_tutti_i_modi_di_indirizzamento_di_istruzione Modo Modello Generico Funzionamento in RTL
branch cc dest.
se cc è verificata, allora PC ← [dest. ] altrimenti
PC ← [PC] + 4 × ingombro
1 branch cc (Rp) PC ← [Rp]
2 branch cc spiazzamento (PC) branch cc etichetta
PC ← spiazzamento + [PC]
PC ← distanza etichetta + [PC]
3 branch cc spiazzamento (PC, Ra) branch cc etichetta (Ra)
PC ← spiazzamento + [PC] + [Ra]
PC ← distanza etichetta + [PC] + [Ra]
4 branch cc indirizzo PC ← indirizzo 5 branch cc (indirizzo) PC ← [indirizzo]
Modo Modello Generico Ingombri (in parole da 32 bit) branch cc dest. d ← [s]
1 branch cc (Rp) 1 (soltanto opcode) 2 branch cc spiazzamento (PC)
branch cc etichetta 2 (1 opcode + 1 spiazzamento) 3 branch cc spiazzamento (PC, Ra)
branch cc etichetta (Ra) 2 (1 opcode + 1 spiazzamento) 4 branch cc indirizzo 2 (1 opcode + 1 spiazzamento) 5 branch cc (indirizzo) 2 (1 opcode + 1 spiazzamento)
A TITOLO DI ESEMPIO … (non sono tutte le combinazioni)
branch = 0 (Rp)
passo μ−ind. μ−operazioni (in RTL) μ−ordini
1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
branch = 0 spiazzamento (PC) – soluzione 1 (lunga, evita prelievo spiazzamento se inutile)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto da memoria) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 b se [bit Z] = 0 và a μ−ind. b + 5 if bit Z = 0 goto addr. step 10
6 b + 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 7 b + 2 V ← [Z], attendi Zout, Vin, WMFC
8 b + 3 Z ← [MDR] + [V] MDRout, select V, Zin, add
9 b + 4 PC ← [Z], finisci (o và a μ−ind. 1) Zout, PCin, end (or goto μ−addr. 1) 10 b + 5 Z ← [PC] + 4 PCout, select 4, Zin, add
11 b + 6 PC ← [Z], finisci (o và a μ−ind. 1) Zout, PCin, end (or goto μ−addr. 1)
branch = 0 spiazzamento (PC) – soluzione 2
(breve, preleva sempre spiazzamento)
passo μ−ind. μ−operazioni (in RTL) μ−ordini1 1 MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 2 2 PC ← [Z], V ← [Z], attendi Zout, PCin, Vin, WMFC
3 3 IR ← [MDR] MDRout, IRin
4 4
decodifica codice operativo, se (modo di dest. = indiretto da registro, relativo a PC, con base relativo a PC, assoluto, indiretto da memoria) và a μ−ind. a, b, c, …
decode opcode field of IR, if (mode of s
= … (as aside)) goto μ−addr. a, b, c, …
5 b MAR ← [PC], Z ← [PC] + 4, preleva PCout, MARin, select 4, Zin, read, add 6 b + 1 PC ← [Z], V ← [Z], attendi, se [bit Z] = 0
finisci (o và a μ−ind. 1) Zout, PCin, Vin, WMFC, if bit Z = 0 end (or goto addr. step 1)
7 b + 2 Z ← [MDR] + [V] MDRout, select V, Zin, add
8 b + 3 PC ← [Z], finisci (o và a μ−ind. 1) Zout, PCin, end (or goto μ−addr. 1)