Calcolatori Elettronici
Introduzione alla famiglia 68000
Introduzione alla
famiglia Motorola 68000
Maurizio Rebaudengo
Matteo Sonza Reorda
Politecnico di Torino
Dipartimento di Automatica e Informatica
Sommario
• Storia
• Introduzione
• Registri interni
• Modi di indirizzamento
• Instruction set
2
M. Rebaudengo, M.Sonza Reorda
I.1
Calcolatori Elettronici
Introduzione alla famiglia 68000
Storia
Motorola ha introdotto il suo primo microprocessore ad
8 bit nel 1974 ( MC6800).
Nel 1979 esce sul mercato il microprocessore a 16/32 bit
MC68000 (non compatibile a livelli s/w rispetto al 6800).
Questi due microprocessori diedero origine a due
famiglie distinte di microprocessori Motorola.
3
Famiglia 6800
A partire dal 6800 i microprocessori e microcontrollori
ad 8 bit prodotti da Motorola sono:
• 6502
• 6802
• 6805
• 6809
• serie HC11
• serie HC16
4
M. Rebaudengo, M.Sonza Reorda
I.2
Calcolatori Elettronici
Introduzione alla famiglia 68000
Famiglia 68000
A partire dal 68000 i microprocessori a 16/32 bit prodotti
da Motorola sono:
• 68010
• 68020
• 68030
• 68040
• 68060
• serie 68300
5
Caratteristiche generali del
microprocessore 68000
• chip a 64 pin
• processore CISC
• 8 registri di dato general-purpose a 32 bit
• 8 registri di indirizzo general-purpose a 32 bit
• data bus a 16 bit
• spazio di indirizzamento di 16Mbyte
• I/O di tipo memory mapped
• 2 livelli di privilegio: User e Supervisor
• bus di dati e di indirizzo non multiplexati
• 7 livelli di interruzioni esterne.
6
M. Rebaudengo, M.Sonza Reorda
I.3
Calcolatori Elettronici
Introduzione alla famiglia 68000
Organizzazione dei dati
I registri dato ed indirizzo hanno un parallelismo di 32
bit, ma è possibile lavorare con parole aventi un numero
di bit inferiore.
Le istruzioni possono operare con parole di 32, 16, 8
oppure 1 bit.
I tipi di dato ammessi sono:
• byte: 8 bit
• word: 16 bit
• long word: 32 bit.
7
Organizzazione dei dati
(cont.)
L’assembler 68000 permette di specificare il tipo di dato
a cui si sta facendo riferimento, aggiungendo un
suffisso allo mnemonico del’istruzione:
• .B per dati di tipo byte
• .W per dati di tipo word
• .L per dati di tipo long.
Esempio:
MOVE.W
DO, D1
8
M. Rebaudengo, M.Sonza Reorda
I.4
Calcolatori Elettronici
Introduzione alla famiglia 68000
Organizzazione dei dati
(cont.)
Quando il processore lavora con un dato memorizzato in
un registro ed il tipo di dato è inferiore a 32 bit, viene
utilizzata esclusivamente la parte meno significativa del
registro.
Operazioni sulla parte meno significativa del registro
non influiscono sui restanti bit.
9
Organizzazione dei dati
(cont.)
Esempio:
ADD.B
non cambia il contenuto
D0, D1
D0
F1
+
D1
22
=
D1
13
X N Z V C
1 0 0 0 1
CCR
M. Rebaudengo, M.Sonza Reorda
10
I.5
Calcolatori Elettronici
Introduzione alla famiglia 68000
Memorizzazione dei dati
La regola per ogni tipo di dato è la seguente:
• il byte più significativo è memorizzato all’indirizzo
pari inferiore e ad indirizzi successivi vengono
memorizzati i byte via via meno significativi.
11
Memorizzazione dei dati
(cont.)
Esempio
all’indirizzo xx0000 è memorizzata la word B52D;
all’indirizzo xx0002 è memorizzata la long word
A756CF00.
0000
0002
0004
0006
B5
A7
CF
2D
56
00
0001
0003
0005
0007
12
M. Rebaudengo, M.Sonza Reorda
I.6
Calcolatori Elettronici
Introduzione alla famiglia 68000
Questo tipo di convenzione prende il nome di
big endian, per distinguerla dalla convenzione
Intel chiamata little endian.
I Lillipuziani (in I viaggi di Gulliver) litigavano
animosamente perché non erano d’accordo sul
modo di rompere le uova, 2 erano i partiti
avversi: quello dell’estremità grande ( big end) e
quello dell’estremità piccola ( little end)...
13
Registri utente
Il processore 68000 possiede i seguenti registri:
• 8 registri di dato a 32 bit ( D0-D7)
• 7 registri di indirizzo a 32 bit ( A0-A6)
• 1 registro di stack per il modo user (A7 o USP)
• 1 registro di stack per il modo supervisor (A7 o SSP)
• 1 registro program counter (PC)
• 1 registro di stato per il modo utente (CCR)
• 1 registro di stato per il modo supervisor (SR)
14
M. Rebaudengo, M.Sonza Reorda
I.7
Calcolatori Elettronici
Introduzione alla famiglia 68000
Modo User
31
16 15
8 7
31
0
16 15
0
D0
D0
Address
Registers
Data Registers
A6
D7
7
program counter
PC
A7
User stack pointer (USP)
0
User
Condition Code Register
CCR
15
Modo Supervisor
31
16 15
8 7
0
31
16 15
0
D0
D0
Address
Registers
Data Registers
A6
D7
15
program counter
PC
A7
Supervisor stack pointer (SSP)
8 7
System
0
User
SR
Status Register
16
M. Rebaudengo, M.Sonza Reorda
I.8
Calcolatori Elettronici
Introduzione alla famiglia 68000
Registri di dato
Il processore dispone di 8 registri di dato a 32 bit.
I registri sono di tipo general-purpose, nel senso che
ciascuna operazione permessa sul generico registro Di
è permessa anche sul registro Dj.
È possibile accedere al registro utilizzando
esclusivamente la parte meno significativa del registro
(byte o word). Tali operazioni sono specificate all’interno
dell’istruzione assembler.
17
Registri di indirizzo
Il processore 68000 ha 8 registri di indirizzo. Questi registri
sono registri puntatore e memorizzano indirizzi di dati in
memoria.
I registri di indirizzo sono costituiti da 32 bit e le operazioni
fatte su di essi riguardano l’intera parola da 32 bit.
Per i registri di indirizzo valgono le seguenti regole:
• operazioni fatte sul byte dal bit 0 al bit 7 non sono
permesse;
• un’operazione sulla word meno significativa ha influenza
su tutti e 32 i bit: se la word meno significativa di un
registro è caricata con un operando a 16 bit, il bit di
segno dell’operando è esteso dal bit 16 al bit 31 della
word più significativa.
18
M. Rebaudengo, M.Sonza Reorda
I.9
Calcolatori Elettronici
Introduzione alla famiglia 68000
Registro A7
Come nel caso dei registri di dato, un’operazione fatta sul
registro Ai può essere ugualmente fatta sul registro Aj.
C’è un’eccezione: il registro A7 è un registro di indirizzo
special-purpose e funziona come stack pointer usato dalle
procedure per memorizzare l’indirizzo di ritorno.
Il registro A7 ha un’ulteriore particolarità: esistono due
registri A7 (uno per ogni modo operativo di
funzionamento):
• lo stack pointer per il modo supervisor (SSP);
• lo stack pointer per il modo user (USP);
19
Registri special-purpose
Il processore 68000 ha due registri special-purpose:
• il program counter (PC);
• il registro di stato (SR).
Il program counter è un registro a 32 bit e contiene
l’indirizzo della prossima istruzione da eseguire. Poiché
il processore dispone di soli 24 bit di indirizzamento, i
bit dal 24 al 31 non sono utilizzati nel 68000.
A partire dal 68020 i processori Motorola hanno uno
spazio di indirizzamento di 32 bit.
20
M. Rebaudengo, M.Sonza Reorda
I.10
Calcolatori Elettronici
Introduzione alla famiglia 68000
Registro di stato
T
S
I2 I1 I0
X N Z V C
Il registro di stato SR è un registro a 16 bit ed è diviso in
due campi logici:
• gli 8 bit più significativi costituiscono il byte di
sistema e controllano il modo operativo del 68000;
• gli 8 bit meno significativi costituiscono il registro
contente lo stato dei flag (chiamato registro di
condizione del codice o CCR)
21
Byte di sistema
È accessibile esclusivamente in modo supervisor e non può
essere modificato quando il 68000 è in modo utente.
I suoi bit significativi sono 5:
• T (il trace mode bit)
• S (il bit di modo: utente o supervisore)
• I0, I1 e I2 (i bit di mascheramento dell’interrupt).
Il bit S specifica lo stato del processore: 0 per modo user, 1
per modo supervisor.
Il bit T settato (con valore 1) permette di far funzionare il
processore in modalità single-step: al termine dell’esecuzione
di ogni singola istruzione viene scatenata un’eccezione di
trace che permette di effettuare il debug sul programma.
22
M. Rebaudengo, M.Sonza Reorda
I.11
Calcolatori Elettronici
Introduzione alla famiglia 68000
Byte di sistema
(cont.)
I bit I0, I1 e I2 determinano il livello di mascheramento
dell’interrupt. Se al processore arriva una richiesta di
interruzione esterna, si confronta il livello di interruzione
con il valore memorizzato nella maschera di bit: se la
priorità della richiesta pendente è minore od uguale alla
priorità memorizzata nella maschera, la richiesta di
interruzione rimane pendente, altrimenti viene servita.
La richiesta di interruzione di livello 7 non è
mascherabile ed è sempre servita indipendentemente
dal valore della maschera di interruzione.
23
Registro CCR
Il registro di condizione del codice ( CCR) memorizza lo
stato dei flag aggiornati dopo l’esecuzione di ciascuna
operazione aritmetico-logica eseguita dal processore.
I bit significativi del CCR sono 5:
• V (il bit di overflow);
• Z (il bit di zero);
• N (il bit di segno);
• C (il bit di carry);
• X (il bit di estensione).
24
M. Rebaudengo, M.Sonza Reorda
I.12
Calcolatori Elettronici
Introduzione alla famiglia 68000
Registro CCR
(cont.)
Il flag V vale 1 se il risultato di un’operazione aritmetica,
interpretato in complemento a 2, dà un bit di segno
scorretto.
Il flag Z vale 1 se il risultato vale 0.
Il flag N è una copia del bit più significativo del risultato.
Il flag C rappresenta il riporto del bit più significativo
dell’operando.
Esempio
L’istruzione ADD.B D0,D1 influisce solo sugli 8 bit
meno significativi. L’eventuale riporto risultante è
copiato nel flag di carry ed i bit da 8 a 31 rimangono
inalterati.
25
Registro CCR
(cont.)
Il bit di estensione è molto simile al bit di carry. Nelle
operazioni di addizione, sottrazione, negazione o shift il bit
assume lo stesso valore e significato del bit di carry.
Il bit X è stato aggiunto in altenativa al flag C, utilizzato
come test flag (ad esempio per trasferire informazioni di
ritorno da una procedura).
Il bit X viene aggiornato solo in corrispondenza di quelle
operazioni aritmetiche che effettivamente determinano un
riporto. Le istruzioni logiche, di confronto, moltiplicazione,
divisione non modificano il contenuto del bit X.
26
M. Rebaudengo, M.Sonza Reorda
I.13
Calcolatori Elettronici
Introduzione alla famiglia 68000
Modi di indirizzamento
Il processore 68000 dispone di 14 diversi tipi di
indirizzamento classificabili nei seguenti tipi base:
• immediato
• assoluto
• registro diretto
• registro indiretto
• relativo al program counter
• implicito.
27
Indirizzamento indiretto attraverso registro
Nel modo di indirizzamento registro indiretto l’indirizzo
dell’operando è contenuto in un registro di indirizzo.
Il registro funziona da registro puntatore e può essere uno
degli 8 registri di indirizzo A0-A7.
Esempi
MOVE.L
(A0), D3 copia nel registro D3 il contenuto della
cella di memoria avente l’indirizzo specificato nel registro A0.
MOVE.W
D4, (A6) copia la word memorizzata nel registro
D4 a partire dalla locazione di memoria avente l’indirizzo
specificato nel registro A6.
28
M. Rebaudengo, M.Sonza Reorda
I.14
Calcolatori Elettronici
Introduzione alla famiglia 68000
Indirizzamento indiretto attraverso
registro con incremento posticipato
Il contenuto del registro di indirizzo è incrementato di 1,
2 o 4 unità dopo che l’istruzione è eseguita:
• un’operazione tra byte causa un incremento di 1
• un’operazione tra word causa un incremento di 2
• un’operazione tra long word causa un incremento di
4.
Esempi
MOVE.L
(A0)+,D3
MOVE.W
(A7)+,D4
29
Indirizzamento indiretto attraverso
registro con incremento posticipato
(cont.)
L’eccezione è data dal caso in cui il registro A7 sia usato
con un operando di tipo byte: il valore del registro è
post-incrementato di 2 unità anziché di 1 unità. In questo
modo il registro stack-pointer punta sempre ad un
indirizzo pari.
Esempio
MOVE.B
(A7)+,D4
30
M. Rebaudengo, M.Sonza Reorda
I.15
Calcolatori Elettronici
Introduzione alla famiglia 68000
Indirizzamento indiretto attraverso
registro con decremento anticipato
Il contenuto del registro di indirizzo specificato è
decrementato prima dell’esecuzione dell’istruzione. Il
registro di indirizzo è decrementato di 4, 2 od 1 unità a
seconda che il tipo dell’operando sia longword, word
oppure byte, rispettivamente.
Esempi
MOVE.L
-(A0),D3
MOVE.W
-(A7),D4
31
Gestione di code LIFO
Attraverso i modi di decremento anticipato e incremento
posticipato è possibile gestire facilmente code di tipo
LIFO (user stack).
Supponendo di voler realizzare uno stack che cresca
con indirizzi decrescenti l’operazione di PUSH è
implementata
eseguendo
un’operazione
di
predecremento e caricamento, mentre l’operazione di
PULL è eseguita attraverso un’operazione di lettura e di
postincremento.
32
M. Rebaudengo, M.Sonza Reorda
I.16
Calcolatori Elettronici
Introduzione alla famiglia 68000
Gestione di code LIFO
(cont.)
Esempio
La seguente istruzione esegue l’operazione di PUSH del
contenuto del registro D0 nella coda puntata dal registro
A4.
MOVE.L
D0, -(A4)
La seguente istruzione esegue l’operazione opposta di
PULL dalla coda puntata dal registro A4 verso il registro
di dato D0.
MOVE.L
(A4)+, D0
33
Gestione di code LIFO
(cont.)
Analogamente per realizzare stack che crescano per
indirizzi di memoria crescenti le operazioni di PUSH
vanno implementate eseguendo un’operazione di
caricamento e postincremento, mentre l’operazione di
PULL è eseguita attraverso un’operazione di
predecremento e di lettura.
Esempi
MOVE.L
D0, (A4)+
push
MOVE.L
-(A4), D0
pull
34
M. Rebaudengo, M.Sonza Reorda
I.17
Calcolatori Elettronici
Introduzione alla famiglia 68000
Lo stack
Lo stack di sistema è realizzato in modo che il registro
A7 contenga l’indirizzo dell’elemento in cima allo stack.
Lo stack cresce per indirizzi decrescenti della memoria.
Le operazioni che possono essere effettuate nello stack
sono:
• operazione di push: prima viene decrementato il
valore dello stack pointer di 2 unità e poi viene
caricato il dato nello stack;
• operazione di pull: un dato è scaricato dallo stack e
lo stack pointer è incrementato di 2 unità.
35
Lo stack
(cont.)
Esempio
MOVE.W
D0, -(A7)
bassa del registro D0
push nello stack della word
MOVE.W
(A7)+, D2
registro D2.
pull dallo stack e copia nel
36
M. Rebaudengo, M.Sonza Reorda
I.18
Calcolatori Elettronici
Introduzione alla famiglia 68000
Insieme delle istruzioni
L’insieme di istruzioni per il processore 68000
comprende le seguenti famiglie di istruzioni:
• movimento di dati;
• operazioni aritmetiche;
• operazioni logiche;
• operazioni di scorrimento;
• manipolazione di bit;
• controllo del programma.
37
Istruzioni per il movimento di dati
Le istruzioni per il movimento di dati comprendono:
• MOVE, MOVEA;
• MOVEM, MOVEQ, MOVEP;
• MOVE to SR, MOVE from SR, MOVE to CCR;
• MOVE USP;
• LEA;
• PEA;
• EXG
• SWAP.
38
M. Rebaudengo, M.Sonza Reorda
I.19
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione MOVEA
L’istruzione MOVEA (MOVE Address) permette di scrivere un
valore in un registro di indirizzo. L’operando destinazione è
sempre un registro di indirizzo. Possono essere usati
esclusivamente dati di tipo word o long word. Quando il dato è
di tipo word, viene eseguita l’estensione a 32 bit del segno
dell’operando sorgente prima di copiare il valore nel registro di
indirizzo destinazione.
L’istruzione MOVEA non modifica il contenuto dei flag nel
registro CCR.
Esempi
MOVEA.L #9F00H, A2 copia il valore immediato 00009F00
nel registro A2
MOVEA.W #9F00H, A2 copia nel registro A2 il valore
immediato FFFF9F00.
39
Istruzione MOVEM
L’istruzione MOVEM (MOVE Multiple registers) permette di
trasferire un gruppo di registri da o verso la memoria;
opera solo con dati di tipo word o long word.
L’effetto di un’istruzione MOVEM è di trasferire i contenuti
di una lista di registri a locazioni di memoria
consecutive o di scrivere in una lista di registri il
contenuto di locazioni consecutive di memoria.
Il contenuto del registro CCR non è modificato
dall’esecuzione dell’istruzione MOVEM.
40
M. Rebaudengo, M.Sonza Reorda
I.20
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione MOVEM
(cont.)
La lista di registri è specificata attraverso la notazione Di-Dj/ApAq. Ad esempio la notazione A0-A4/D3-D7 specifica i registri di
indirizzo A0, A1, A2, A3 ed i registri di dato D3, D4, D5, D6 e D7.
Normalmente i programmatori usano questa istruzione per salvare
i registri di lavoro all’ingresso di una procedura e per ripristinare il
loro valore originario all’uscita della procedura stessa.
Esempi
MOVEM.L D0-D7/A0-A6,-(A7)
salva nello stack il contenuto
di tutti i registri di dato e dei registri di indirizzo tranne A7.
MOVEM.L (A7)+,D0-D7/A0-A6
ripristina il contenuto dei
registri di dato e dei registri di indirizzo (tranne A7), prelevandoli
dallo stack.
41
Istruzione MOVEP
L’istruzione MOVEP (MOVE Peripheral data) permette di
copiare parole di word o long word tra un registro di dato
ed un dispositivo periferico ad 8 bit mappato in memoria. I
dispositivi periferici sono collegati al data-bus in modo
che byte consecutivi sui periferici sono mappati nello
spazio di indirizzamento della memoria ad indirizzi pari (o
dispari) consecutivi: l’istruzione MOVEP esegue accessi in
memoria a gruppi di due locazioni alla volta: se l’operando
destinazione ha un indirizzo pari, viene fatto accesso solo
ad indirizzi pari.
L’istruzione MOVEP esegue esclusivamente il trasferimento
di dati di tipo word o long word; i flag del registro CCR non
sono modificati dall’istruzione.
42
M. Rebaudengo, M.Sonza Reorda
I.21
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione MOVEP
(cont.)
L’operando che indica gli indirizzi dei registri del
dispositivo periferico può essere specificato
esclusivamente attraverso un indirizzamento di tipo
registro indiretto con spiazzamento.
In una istruzione di trasferimento da un registro di dato
ad un dispositivo periferico il byte più significativo del
registro è copiato per primo all’indirizzo minore, mentre
il byte meno significativo è copiato per ultimo
all’indirizzo maggiore in memoria.
Esempi
MOVEP.L D2, 0(A0)
copia i 4 byte contenuti nel
registro D2 negli indirizzi [ A0+0], [A0+2], [A0+4] e [A0+6].
In particolare copia il byte più significativo all’indirizzo
[A0+0] ed il byte meno significativo all’indirizzo [ A0+6].
43
Istruzione MOVE to CCR
L’istruzione MOVE to CCR copia un dato nel registro
CCR. Tale istruzione esegue un’operazione su dati di tipo
word. L’istruzione MOVE <ea>, CCR copia il byte meno
significativo dell’operando sorgente nel registro CCR; il
byte più significativo è ignorato.
Questa istruzione permette di pre-caricare il registro
CCR.
44
M. Rebaudengo, M.Sonza Reorda
I.22
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione MOVE to SR e
MOVE from SR
Permettono di eseguire operazioni di lettura e scrittura
sul registro di stato SR. L’istruzione MOVE to SR copia
una word nel registro SR; tale istruzione è privilegiata e
può essere eseguita solo quando il processore opera in
supervisor mode.
L’istruzione MOVE from SR permette di leggere il
contenuto del registro SR. Questa istruzione è
privilegiata per il processore 68010, ma non per il 68000.
In generale queste istruzioni sono utilizzate da chi scrive
sistemi operativi e non sono utilizzate dai
programmatori che scrivono programmi applicativi.
45
Istruzione MOVE USP
Come è già stato accennato precedentemente il 68000
dispone di due registri A7: uno associato al modo utente
e chiamato USP (user stack pointer) ed uno associato al
modo supervisore e chiamato SSP (supervisor stack
pointer).
Quando il processore lavora in modo supervisore è
possibile accedere al registro USP attraverso le istruzioni
MOVE.L USP,An e MOVE.L An,USP.
Quando il 68000 lavora in modo utente il registro SSP è
completamente nascosto all’utente.
46
M. Rebaudengo, M.Sonza Reorda
I.23
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni aritmetiche
Le istruzioni aritmetiche comprendono:
• ADD, ADDA, ADDQ, ADDI, ADDX;
• SUB, SUBA, SUBQ, SUBI, SUBX;
• DIVS, DIVU;
• MULS, MULU;
• CLR;
• NEG, NEGX;
• EXT;
• ABCD, NBCD, SBCD.
47
Istruzioni logiche
Le istruzioni logiche comprendono:
• AND, ADDI;
• OR, ORI;
• EOR, EORI;
• NOT.
48
M. Rebaudengo, M.Sonza Reorda
I.24
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni di scorrimento
Le istruzioni di scorrimento comprendono:
• LSL, LSR;
• ASL, ASR;
• ROL, ROR, ROXL, ROXR.
49
Istruzioni di manipolazione dei bit
Le istruzioni di manipolazione dei bit comprendono:
• BTST;
• BSET;
• BCLR;
• BCHG.
50
M. Rebaudengo, M.Sonza Reorda
I.25
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni di manipolazione dei bit
(cont.)
Le istruzioni di manipolazione dei bit agiscono su uno
specifico bit di un operando. Il bit manipolato viene
copiato complementato nel flag Z. Gli altri flag non sono
modificati da queste istruzioni.
Le istruzioni di manipolazione dei bit possono essere
applicate esclusivamente a:
• locazioni di memoria di tipo byte;
• registri di dato su 32 bit.
La posizione del bit da manipolare può essere specificata
attraverso un:
• indirizzamento immediato;
• registro di dato.
51
Istruzione BTST
L’istruzione BTST (TeST a Bit) controlla un bit specifico
di un operando. Se il bit vale zero il flag Z viene settato,
altrimenti viene azzerato.
L’istruzione BTST non modifica il valore dell’operando.
Esempio
BTST #5,D5
esegue un test del bit in posizione 5
del contenuto del registro D5.
52
M. Rebaudengo, M.Sonza Reorda
I.26
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione BSET
L’istruzione BSET (test a Bit and SET) aggiorna il flag Z
in base al valore del bit specificato ( test) e forza ad uno
il bit specificato ( set).
Esempio
BSET #2,(A3)
esegue un test del bit in posizione
2 della locazione di memoria indirizzata dal registro A3 e
quindi un suo set.
53
Istruzione BCLR
L’istruzione BCLR (test a Bit and CLeaR) aggiorna il flag
Z in base al valore del bit specificato ( test) ed azzera il
bit specificato ( clear).
Esempio
Supponendo che il registro D6 contenga, all’atto
dell’esecuzione dell’istruzione corrente, il valore 12, il bit
all’interno del registro D7 avente posizione 12 viene
testato e quindi azzerato.
BCLR
D6, D7
54
M. Rebaudengo, M.Sonza Reorda
I.27
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione BCHG
L’istruzione BCHG (test a Bit and CHanGe) aggiorna il
flag Z in base al valore del bit specificato ( test) e
complementa il bit specificato ( change).
Esempio
BCHG #6,D5
esegue il test del bit 6 del registro D5
e la sua complementazione.
55
Istruzioni per il controllo del programma
All’interno dell’insieme di istruzioni per il controllo del
programma si distinguono le seguenti classi di
istruzioni:
• confronto;
• salto;
• gestione delle procedure;
• attivazione di un’eccezione;
• controllo di sistema;
• altre.
56
M. Rebaudengo, M.Sonza Reorda
I.28
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni di confronto
L’insieme delle istruzioni di confronto comprende:
• CMP;
• CMPA;
• CMPI;
• CMPM.
57
Istruzioni di salto
L’insieme delle istruzioni di salto comprende:
• Bcc;
• BRA;
• JMP;
• DBcc.
58
M. Rebaudengo, M.Sonza Reorda
I.29
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni per la gestione delle
procedure
L’insieme delle istruzioni per la gestione delle procedure
è composto da:
• JSR;
• BSR;
• RTS;
• RTR;
• LINK;
• UNLK.
59
Istruzioni LINK e UNLK
Lo stack frame può essere facilmente gestito da una
coppia complementare di istruzioni: LINK (LINK and
allocate) e UNLK (UNLinK).
Per poter effettuare chiamate annidate di procedure,
ogni volta che una procedura è chiamata deve essere
riservato un nuovo stack frame.
L’istruzione LINK crea uno stack frame di dimensione
stabilita ed inizializza un registro di indirizzo in modo da
puntare allo stack frame corrente.
60
M. Rebaudengo, M.Sonza Reorda
I.30
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni LINK e UNLK
(cont.)
Esempio
LINK A1,#-64 alloca uno stack frame di 64 byte e
utilizza il registro A1 per puntare all’inizio dell’area dati
locale, eseguendo le seguenti operazioni elementari:
LINK: [SP]
<- [SP]-4
[M[SP]] <- [A1]
salva il contenuto di A1
[A1]
<- [SP]
copia SP in A1
[SP]
<- [SP]-64
alloca stack frame
Il contenuto del registro A1 (precedente all’istruzione)
non è distrutto dall’istruzione di LINK; analogamente il
valore di SP precedente all’allocazione dello stack frame
non viene perduto, ma viene memorizzato in A1.
61
Istruzioni LINK e UNLK
(cont.)
L’istruzione LINK non distrugge nessuna informazione;
è possibile dunque eseguire l’operazione inversa di
cancellazione dello stack frame e del ripristino dello
stato precedente attraverso l’istruzione UNLK.
Esempio
UNLK A1
esegue la cancellazione dello stack frame
attraverso le seguenti operazioni elementari.
<- [A1]
disallocazione stack
[A1]
<- [M[SP]]
ripristino A1
[SP]
<- [SP]+4
ripristino SP
UNLK: [SP]
62
M. Rebaudengo, M.Sonza Reorda
I.31
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni LINK e UNLK
(cont.)
Esempio
Il seguente frammento di codice riporta le istruzioni
necessarie per eseguire il salvataggio dei registri di lavoro
e l’allocazione di uno stack frame al momento dell’inizio di
una procedura e le complementari operazioni di
disallocazione e ripristino dei registri per il ritorno al
programma chiamante.
MOVEM.L
D0-D7/A3-A6,-(SP)
LINK
A1,#-64
...
UNLK
A1
MOVEM.L
(SP)+,D0-D7/A3-A6
63
RTS
Istruzioni LINK e UNLK
(cont.)
SP
Stack frame
Vecchio A1
Registri salvati
Indirizzo di ritorno
64
M. Rebaudengo, M.Sonza Reorda
I.32
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzioni che generano trap
Il processore 68000 fornisce alcune istruzioni usate per
generare delle eccezioni:
• ILLEGAL;
• CHK;
• TRAP;
• TRAPV.
65
Istruzione ILLEGAL
L’istruzione ILLEGAL (ILLEGAL instruction) provoca
l’esecuzione di un’eccezione.
66
M. Rebaudengo, M.Sonza Reorda
I.33
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione CHK
L’istruzione CHK (CHecK register against bounds) è
usata per confrontare un registro di dato (operando
destinazione) ed un intervallo di valori compreso tra 0 ed
un limite superiore specificato in complemento a 2
(operando sorgente).
Un’eccezione è eseguita se il registro di dato contiene
un valore inferiore a 0 oppure maggiore del limite
superiore.
Possono essere confrontate solo parole di tipo word.
67
Istruzione TRAP
L’istruzione TRAP (TRAP) permette di scatenare
un’eccezione di trap.
Il formato dell’istruzione è TRAP #n,
numero compreso tra 0 e 15.
dove n è un
L’istruzione TRAP scatena la trap avente numero
d’ordine n all’interno della tabella degli indirizzi del
vettore delle eccezioni.
68
M. Rebaudengo, M.Sonza Reorda
I.34
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione TRAPV
L’istruzione TRAPV (TRAP on oVerflow) esegue il
processamento di un’eccezione solo se il flag di
overflow è settato.
69
Istruzioni di controllo di sistema
Le istruzioni di controllo di sistema sono usate per
eseguire operazioni privilegiate (valide solo per il modo
supervisor):
• MOVE to SR, MOVE from SR, MOVE USP;
• ANDI SR, ORI SR, EORI SR ;
• RESET;
• STOP;
• RTE.
70
M. Rebaudengo, M.Sonza Reorda
I.35
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione RESET
L’istruzione RESET (RESET external devices) causa
l’attivazione della linea esterna di RESET.
La linea di RESET è normalmente connessa con
dispositivi esterni, questa istruzione permette dunque al
programmatore di resettare via software la circuiteria
esterna al processore.
71
Istruzione STOP
L’istruzione STOP (load status register and STOP) causa
l’interruzione dell’esecuzione del processore.
Il formato dell’istruzione è STOP #n, dove n è un numero
su 16 bit.
Il processore carica il registro di stato con il valore
immediato n ed interrompe l’esecuzione delle operazioni
entrando nello stato di stop.
Il processore esce dallo stato di stop solo quando
accade un evento di trace, di interrupt o di reset.
72
M. Rebaudengo, M.Sonza Reorda
I.36
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione RTE
L’istruzione RTE (ReTurn from Exception) è l’istruzione
di ritorno da una routine di gestione delle eccezioni.
Essa ripristina il valore che il registro di stato ed il
program counter avevano al momento dell’esecuzione
dell’eccezione.
73
Miscellanea di istruzioni
L’insieme di istruzioni per il processore 68000
comprende infine le seguenti:
• Scc;
• NOP;
• TAS;
• TST.
74
M. Rebaudengo, M.Sonza Reorda
I.37
Calcolatori Elettronici
Introduzione alla famiglia 68000
Istruzione TAS
L’istruzione TAS (Test And Set an operand) esegue un
test sugli 8 bit meno significativi dell’operando. Tutti i
flag di condizione sono aggiornati, tranne il flag X.
Il bit 7 dell’operando è settato. Sono ammessi solo
operandi di tipo byte.
75
M. Rebaudengo, M.Sonza Reorda
I.38