Il 0% ha trovato utile questo documento (0 voti)
2K visualizzazioni39 pagine

Manuale Motorola 68000

Il documento descrive il microprocessore Motorola 68000, introducendone la storia, le caratteristiche generali, l'organizzazione dei dati e dei registri. Vengono spiegati i registri di dato, indirizzo, stack pointer e di stato del 68000.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
2K visualizzazioni39 pagine

Manuale Motorola 68000

Il documento descrive il microprocessore Motorola 68000, introducendone la storia, le caratteristiche generali, l'organizzazione dei dati e dei registri. Vengono spiegati i registri di dato, indirizzo, stack pointer e di stato del 68000.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Introduzione al 68000

Motorola 68000:
introduzione

Maurizio Rebaudengo Matteo Sonza Reorda


Politecnico di Torino
Dipartimento di Automatica e Informatica

Sommario

• Storia
• Introduzione
• Registri interni
• Modi di indirizzamento
• Set di istruzioni

M. Rebaudengo, [Link] Reorda 1


Introduzione al 68000

Storia

Motorola ha introdotto il suo primo microprocessore ad


8 bit nel 1974 (MC6800).
Nel 1979 uscì 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.

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

M. Rebaudengo, [Link] Reorda 2


Introduzione al 68000

Famiglia 68000

A partire dal 68000 i microprocessori a 16/32 bit prodotti


da Motorola sono:
• 68010
• 68020
• 68030
• 68040
• 68060
• serie 68300

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, [Link] Reorda 3


Introduzione al 68000

Organizzazione dei dati

I registri di dato e di 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.

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

M. Rebaudengo, [Link] Reorda 4


Introduzione al 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.

Organizzazione dei dati


(cont.)

Esempio:
ADD.B D0, D1 Parte non modificata

D0 F1 +

D1 22 =

X N Z V C
D1 13 1 0 0 0 1
10 CCR

M. Rebaudengo, [Link] Reorda 5


Introduzione al 68000

Memorizzazione dei dati


La regola per ogni tipo di dato (denominata big-endian) è
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 B5 2D 0001
0002 A7 56 0003
0004 CF 00 0005
0006 0007

12

M. Rebaudengo, [Link] Reorda 6


Introduzione al 68000

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)

13

Modo User
31 16 15 8 7 0 31 16 15 0
D0 D0

Registri di dato Registri di indirizzo

A6
D7 User stack pointer (USP) A7

7 0
program counter PC Condition Code Register User CCR
14

M. Rebaudengo, [Link] Reorda 7


Introduzione al 68000

Modo Supervisor
31 16 15 8 7 0 31 16 15 0
D0 D0

Registri di dato Registri di indirizzo

A6
D7 Supervisor stack pointer (SSP) A7

15 8 7 0
program counter PC System User SR
Registro di stato
15

Registri di dato

Il processore dispone di 8 registri di dato di 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 a ciascun registro anche
utilizzando solo la parte meno significativa del registro
(byte o word). Tali limitazioni sono specificate nel
formato dell’istruzione assembler.

16

M. Rebaudengo, [Link] Reorda 8


Introduzione al 68000

Registri di indirizzo
Il processore 68000 ha 8 registri di indirizzo, che
memorizzano indirizzi di 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.
17

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 solo come stack pointer.
A7 viene usato per memorizzare l’indirizzo di ritorno delle
procedure .
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).

18

M. Rebaudengo, [Link] Reorda 9


Introduzione al 68000

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 di 32 bit e contiene
l’indirizzo della successiva 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.

19

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)

20

M. Rebaudengo, [Link] Reorda 10


Introduzione al 68000

Byte di sistema
È accessibile esclusivamente in modo supervisor e non può
essere modificato quando il 68000 è in modo utente.
I bit significativi sono 5:
• T (trace mode bit)
• S (bit di modo: utente o supervisore)
• I0, I1 e I2 (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.
21

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.

22

M. Rebaudengo, [Link] Reorda 11


Introduzione al 68000

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).

23

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.
24

M. Rebaudengo, [Link] Reorda 12


Introduzione al 68000

Registro CCR
(cont.)

Il bit di estensione è molto simile al bit di carry. Nelle


operazioni di addizione, sottrazione, negazione o
scalamento il bit X assume lo stesso valore e significato del
bit di carry.
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.
Il bit X viene inoltre utilizzato, in altenativa al flag C, come
test flag (ad esempio per trasferire informazioni di ritorno
da una procedura).

25

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.

26

M. Rebaudengo, [Link] Reorda 13


Introduzione al 68000

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 il valore del registro D4 in memoria, a partire dalla
locazione di memoria avente l’indirizzo specificato nel registro
A6.
27

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

28

M. Rebaudengo, [Link] Reorda 14


Introduzione al 68000

Indirizzamento indiretto attraverso


registro con incremento posticipato
(cont.)

Nel 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

29

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

30

M. Rebaudengo, [Link] Reorda 15


Introduzione al 68000

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.

31

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
32

M. Rebaudengo, [Link] Reorda 16


Introduzione al 68000

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

33

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 verso 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à.

34

M. Rebaudengo, [Link] Reorda 17


Introduzione al 68000

Lo stack
(cont.)

Esempio
MOVE.W D0, -(A7) push nello stack della word
bassa del registro D0
MOVE.W (A7)+, D2 pull dallo stack e copia nel
registro D2.

35

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.

36

M. Rebaudengo, [Link] Reorda 18


Introduzione al 68000

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.
37

Istruzione MOVEA
L’istruzione MOVEA (MOVE Address) copia 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.

38

M. Rebaudengo, [Link] Reorda 19


Introduzione al 68000

Istruzione MOVEA
(cont.)

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 il
contenuto di una lista di registri in 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, [Link] Reorda 20


Introduzione al 68000

Istruzione MOVEM
(cont.)

La lista di registri è specificata attraverso la notazione Di-Dj/Ap-


Aq. 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.

41

Istruzione MOVEM
(cont.)

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.

42

M. Rebaudengo, [Link] Reorda 21


Introduzione al 68000

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 dei periferici siano 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
agli 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.
43

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 un’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.

44

M. Rebaudengo, [Link] Reorda 22


Introduzione al 68000

Istruzione MOVEP
(cont.)

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].

45

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.

46

M. Rebaudengo, [Link] Reorda 23


Introduzione al 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
modo supervisor.
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.
47

Istruzione MOVE USP

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.

48

M. Rebaudengo, [Link] Reorda 24


Introduzione al 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.
49

Istruzioni logiche

Le istruzioni logiche comprendono:


• AND, ADDI;
• OR, ORI;
• EOR, EORI;
• NOT.

50

M. Rebaudengo, [Link] Reorda 25


Introduzione al 68000

Istruzioni di scorrimento

Le istruzioni di scorrimento comprendono:


• LSL, LSR;
• ASL, ASR;
• ROL, ROR, ROXL, ROXR.

51

Istruzioni di manipolazione dei bit

Le istruzioni di manipolazione dei bit comprendono:


• BTST;
• BSET;
• BCLR;
• BCHG.

52

M. Rebaudengo, [Link] Reorda 26


Introduzione al 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;
53 • registro di dato.

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 il test del bit in posizione 5 all’interno del
registro D5.

54

M. Rebaudengo, [Link] Reorda 27


Introduzione al 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 il test del bit in posizione 2 nella locazione di
memoria indirizzata dal registro A3 e poi forza il bit a 1.

55

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

56

M. Rebaudengo, [Link] Reorda 28


Introduzione al 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.

57

Istruzioni per il controllo del programma

Si distinguono le seguenti classi di istruzioni:


• confronto;
• salto;
• gestione delle procedure;
• attivazione di un’eccezione;
• controllo del sistema;
• altre.

58

M. Rebaudengo, [Link] Reorda 29


Introduzione al 68000

Istruzioni di confronto

L’insieme delle istruzioni di confronto comprende:


• CMP;
• CMPA;
• CMPI;
• CMPM.

59

Istruzioni di salto

L’insieme delle istruzioni di salto comprende:


• Bcc;
• BRA;
• JMP;
• DBcc.

60

M. Rebaudengo, [Link] Reorda 30


Introduzione al 68000

Istruzioni per la gestione delle


procedure

Sono:
• JSR;
• BSR;
• RTS;
• RTR;
• LINK;
• UNLK.

61

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.

62

M. Rebaudengo, [Link] Reorda 31


Introduzione al 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 lo 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
63 non viene perduto, ma viene memorizzato in A1.

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.
UNLK: [SP] <- [A1] disallocazione stack
[A1] <- [M[SP]] ripristino A1
[SP] <- [SP]+4 ripristino SP

64

M. Rebaudengo, [Link] Reorda 32


Introduzione al 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
65 RTS

Istruzioni LINK e UNLK


(cont.)

SP

Stack frame

Vecchio A1

Registri salvati

Indirizzo di ritorno

66

M. Rebaudengo, [Link] Reorda 33


Introduzione al 68000

Istruzioni che generano trap

Il processore 68000 fornisce alcune istruzioni usate per


generare delle eccezioni:
• ILLEGAL;
• CHK;
• TRAP;
• TRAPV.

67

Istruzione ILLEGAL

L’istruzione ILLEGAL (ILLEGAL instruction) provoca


l’esecuzione di un’eccezione.

68

M. Rebaudengo, [Link] Reorda 34


Introduzione al 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.

69

Istruzione TRAP

L’istruzione TRAP (TRAP) permette di scatenare


un’eccezione di trap.
Il formato dell’istruzione è TRAP #n, dove n è un
numero compreso tra 0 e 15.
L’istruzione TRAP scatena la trap avente numero
d’ordine n all’interno della tabella degli indirizzi del
vettore delle eccezioni.

70

M. Rebaudengo, [Link] Reorda 35


Introduzione al 68000

Istruzione TRAPV

L’istruzione TRAPV (TRAP on oVerflow) esegue il


processamento di un’eccezione solo se il flag di
overflow è settato.

71

Istruzioni di controllo del 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.

72

M. Rebaudengo, [Link] Reorda 36


Introduzione al 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.

73

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.

74

M. Rebaudengo, [Link] Reorda 37


Introduzione al 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.

75

Miscellanea di istruzioni

L’insieme di istruzioni per il processore 68000


comprende infine le seguenti:
• Scc;
• NOP;
• TAS;
• TST.

76

M. Rebaudengo, [Link] Reorda 38


Introduzione al 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.

77

M. Rebaudengo, [Link] Reorda 39

Potrebbero piacerti anche