CHAPITRE 4
Microprocesseur 68000
4-1- Les bus
4-2- Registres internes
4-3- Modes d’adressage
4-4- Jeu d’instruction
4-5- Pile
4-6- Sous programme
4-7- Création d’une zone tampon
1
4-4
Jeu d’instructions
•Opération de transfert
•Opérations arithmétiques
•Opérations Logiques
•Opération de décalage
•Branchement
•Branchement avec décrémentation
2
Opération de transfert
Instruction Taille de l'opérande Opération
MOVE 8, 16, 32 [AEd] [AEs]
MOVEQ 8 vers 32 bits [Dn] donnée immédiate
MOVEA 16, 32 vers 32 bits [An] [AEs]
MOVEM 16, 32 [AEd] Dn, Rn
MOVEP 16, 32 Voir les manuels
LEA 32 [An] AEs
PEA 32 [A7] [A7] - 4
[M([A7])] AEs.L
EXG 32 Xi Xj
3
Opérations arithmétiques
Mnemonic Description Operation
ADD Add binary
(destination)+(source)
destination
ADDA Add address
(destination)+(source)
destination
ADDI Add immediate (destination)+immediate data
destination
ADDQ Add quick (destination)+immediate data
destination
ADDX Add extended (destination)+(source)+X
destination
ABCD Add decimal
(destination)10+(source)10+X
with extend destination
SUB
Subtract binary (destination)-(source)
destination
SUBA Subtract
(destination)-(source)
address destination
SUBI Subtract
(destination)-immediate data
Immediate destination
4
Opérations arithmétiques
Mnemonic Description Operation
SUBQ Subtract quick (destination)-immediate data destination
SUBX Subtract with extend (destination)-(source)-X destination
MLUS Signed multiply (destination)*(source) destination
MULU Unsigned multiply (destination)*(source) destination
DIVS Signed divide (destination)/(source) destination
DIVU Unsigned divide (destination)/(source) destination
EXT Sign extend (destination) sign extended destination
NEG Negate 0 - (destination) destination
NEGX Negate with extend 0 - (destination) – X destination
5
Opérations logiques
M nem onic Description Operation
EOR Exclusive OR (destination)⊕(source) (destination)
logical
EORI Exclusive OR (destination)⊕immediate data
immediate (destination)
NOT Logical ~(destination) (destination)
complement
OR Or logical (destination) OR (source)
(destination)
ORI Or immediate (destination) OR immediate data
(destination)
AND And logical (destination) AND (source)
(destination)
ANDI And immediate (destination) AND immediate data
(destination)
BCLR Test a bit and clear ~(<bit number>) OF destination Z
0 ~(<bit number>) OF destination
BSET Test a bit and set ~(<bit number>) OF destination Z
1 ~(<bit number>) OF destination
6
Opérations de décalage
7
Branchement sans condition
Mnemonic Description Operation
BRA Branch always PC + Displacement PC
JMP Jump Destination PC
Déplacement se fait sur 16 bits.
Modes d'adressage pour l’instruction JMP
(An), d16(An), d8(An, Xn.s), adr, d16(PC), d8(PC, Xn.s)
8
Branchement conditionnel
Mnémonique Texte Branchement si Pour les nombres
BCC Branch Carry Clear C=0
BCS Branch Carry Set C=1
BEQ Branch Equal Z=0 (non) signé
BNE Branch Not Equal Z=1 signés
BGE Branch Greater or Equal N=V signés
BGT Branch Greater Than N=V ET Z=0 signés
BHI Branch HIgher than C=0 ET Z=0 non signés
BLE Branch Less or Equal Z=1 OU NV signés
BLS Branch Lower or Same C=1 OU Z=1 non signés
BLT Branch Less Than N=~V signés
BMI Branch Minus N=1 signés
BPL Branch Plus N=0 signés
BVC Branch V Clear V=0
BVS Branch V Set V=1
BRA BRanch Always Sans condition
9
Branchement avec décrémentation
Mnémonique Texte Branch if nombres
DBCC Decrease and Branch Carry Clear C=0
DBCS Decrease and Branch Carry Set C=1
DBEQ Decrease and Branch EQual Z=0 (non) signé
DBNE Decrease and Branch Not Equal Z=1 signés
DBGE Decrease and Branch Greater or Equal N=V signés
DBGT Decrease and Branch Greater Than N=V ET Z=0 signés
DBHI Decrease and Branch HIgher than C=0 ET Z=0 non signés
DBLE Decrease and Branch Less or Equal Z=1 OU NV signés
DBLS Decrease and Branch Lower or Same C=1 OU Z=1 non signés
DBLT Decrease and Branch Less Than N=~V signés
DBMI Decrease and Branch MInus N=1 signés
DBPL Decrease and Branch PLus N=0 signés
DBVC Decrease and Branch V Clear V=0
DBVS Decrease and Branch V Set V=1
DBRA Decrease and BRanch Always -
DBF(DBRA) Decrease and BRanch never terminate -
DBT Decrease and BRanch always terminate -
10
PILE (Empilement 16 bits) 4-5
D0 $12345678
A7 $FFFF02 $FFFF00
MOVE.W D0,-(A7)
xx Pointeur 56
xx Pointeur de pile (A7) 78
de pile (A7)
Pile LIFO (Last in First out)
11
PILE (Dépilement 16 bits) 4-5
D0 $xxxxxxxx $xxxx5678
A7 $FFFF00 $FFFF02
MOVE.W (A7)+,D0
56 Pointeur 56
78 de pile (A7) 78
Pointeur
de pile (A7)
12
PILE (Empilement 32 bits) 4-5
D0 $12345678
A7 $FFFF04 $FFFF00
MOVE.L D0,-(A7)
xx Pointeur 12
xx de pile (A7) 34
xx 56
xx 78
Pointeur
de pile (A7)
13
PILE (Dépilement 32 bits) 4-5
D0 $xxxxxxxx $12345678
A7 $FFFF00 $FFFF04
MOVE.L (A7)+,D0
12 Pointeur 12
34 de pile (A7) 34
56 56
78 78
Pointeur
de pile (A7)
14
PILE (Empilement multiple) 4-5
D0 $12345678 D1 $23456789 D3 $3456789A
A7 $FFFF06 $FFFF00
MOVEM.W D0/D1/D2,-(A7)
xx MOVEM.W D0-D2,-(A7)
xx
xx Pointeur 78
xx de pile (A7) 9A
xx 67
xx 89
xx 56
xx Pointeur 78
de pile (A7)
15
Sous-programme 4-6
BSR
instr1
instr2
PC --> -(A7)
BSR puiss
instr3 PC <-- PC+d
…
puiss instr1
instr2 PC <-- (A7)+
RTS
Remarquer l’utilisation de la pile pour sauvegarder
l’adresse de retours
16
Sous-programme 4-6
JSR
instr1
instr2
PC --> -(A7)
BSR puiss
instr3 PC <-- puiss
…
puiss instr1
instr2 PC <-- (A7)+
RTS
17
Exemple 4-6
ORG $1000
1000 2E7C 000F FF00 MOVEA #$00FFF00,A7
1006 223C 1234 5678 MOVE.L #$12345678,D1
100C 303C 0038 MOVE.W #56,D0
1010 4EB9 0000 1018 JSR carre
1016 4E40 TRAP #0
1018 2F01 carre MOVE.L D1,-(A7)
101A 3200 MOVE.W D0,D1
101C C1C1 MULS D1,D0
101E 221F MOVE.L (A7)+,D1
1020 4E75 RTS
18
Exemple (suite) 4-6
ORG $1000
1000 2E7C 000F FF00 MOVEA #000FFF00,A7
1006 223C 1234 5678 MOVE.L #$12345678,D1
100C 303C 0038 MOVE.W #56,D0
1010 4EB9 0000 1018 JSR carre
1016 4E40 TRAP #0
D1 12 34 56 78 FFEF9
FFEFA
D0 00 00 00 38 FFEFB
FFEFC 00 PILE
A7 FFEFD 00
00 0F FF 00 FFEFE 10
A7
FFEFF 16
00 0F FE FC FFF00
PC 00 00 1018 19
Exemple (suite) 4-6
1018 2F01 Carre MOVE.L D1,-(A7)
101A 3200 MOVE.W D0,D1
101C C1C1 MULS D1,D0
101E 221F MOVE.L (A7)+,D1
1020 4E75 RTS
FFEF8 12
D1 12 34 56 78 12 34 00 38 FFEF9 34
FFEFA 56
A7 00 0F FE FC 00 0F FE F8 FFEFB 78
FFEFC 00 PILE
FFEFD 00
D0 00 00 00 38 00 00 0C 40 FFEFE 10
FFEFF 16
A7 00 0F FE F8 FFF00
20
Exemple (suite) 4-6
1018 2F01 Carre MOVE.L D1,-(A7)
101A 3200 MOVE.W D0,D1
101C C1C1 MULS D1,D0
101E 221F MOVE.L (A7)+,D1
1020 4E75 RTS
FFEF8 12
D1 12 34 56 78 12 34 56 78 FFEF9 34
FFEFA 56
A7 00 0F FE FC 00 0F FE F8 FFEFB 78
FFEFC 00 PILE
FFEFD 00
D0 00 00 00 38 00 00 0C 40 FFEFE 10
FFEFF 16
A7 00 0F FE FC FFF00
PC 00 00 10 20 21
Exemple (suite) 4-6
1018 2F01 Carre MOVE.L D1,-(A7)
101A 3200 MOVE.W D0,D1
101C C1C1 MULS D1,D0
101E 221F MOVE.L (A7)+,D1
1020 4E75 RTS
D1 12 34 56 78 12 34 56 78 FFEF8 12
FFEF9 34
A7 00 0F FE FC 00 0F FE F8 FFEFA 56
FFEFB 78
D0 00 00 00 38 00 00 0C 40 FFEFC 00 PILE
FFEFD 00
FFEFE 10
A7 00 0F FE FC 00 0F FF 00 FFEFF 16
FFF00
PC 00 00 10 20 00 00 10 16
•Il faut absolument la parité entre les empilements et les dépilements
22
Création d’une zone tampon 4-7
FFDFE
FFDFF
FFE00
PILE
Pointeur
de Pile
.
. PILE Zone tampon
. libre de taille
$100
FFF00 FFF00
Pointeur
de Pile
23
Création d’une zone tampon 4-7
FFDFE
A7 000F FF00
FFDFF
FFE00 A6 0000 CAFE
LINK A6,-#$100
.
. PILE
.
FFF00
Pointeur
de Pile
24
Création d’une zone tampon 4-7
FFDFE
A7 000F FF00
FFDFF
FFE00 A6 0000 CAFE
.
.
. LINK A6,#-$100
FFEFC 00 PILE
00 A6 000F FEFC
Pointeur
de Pile CA
FE
FFF00
25
Création d’une zone tampon 4-7
FFDFA
A7 000F FF00
FFDFB
FFDFC A6 0000 CAFE
Pointeur $100 Octets
.
de Pile
. Libres
. LINK A6,#-$100
FFEFC 00 PILE
A6 00 A6 000F FEFC
CA A7 000F DFC (=FFEFC-100)
FE
FFF00
26
Récupération de la zone tampon
A6 000F FEFC
FFDFA
FFDFB
A7 00FF DFC
FFDFC
Pointeur $100 Octets
.
de Pile A7
.
UNLK A6
de la zone
.
FFEFC 00 PILE A7 000F FEFC
A6 00
CA
FE
FFF00
27
Récupération de la zone tampon
A6 000F FEFC
FFDFA
FFDFB
A7 00FF DFC
FFDFC
.
.
UNLK A6
.
FFEFC 00 PILE A7 000F FEFC
Pointeur 00
de Pile A7 CA
FE
FFF00
28
Récupération de la zone tampon
A6 000F FEFC
FFDFA
FFDFB
A7 00FF DFC
FFDFC
.
.
UNLK A6
.
FFEFC 00 PILE A7 000F FEFC
00
CA
FE A6 0000 CAFE
FFF00
Pointeur
de Pile A7
A7 000F FF00
29
Application, passage des paramètres 4-7
Deux piles différentes
Exemple : un sous programme qui calcule la somme
des éléments dans un tableau.
On lui envoie l’adresse du tableau et le nombre des éléments.
LINK A6,#-$20 créer un espace de $20 octets
LEA TABLE(PC),A0
MOVE.L A0,-(A6) empiler l’adresse
MOVE.W #TAILLE,-(A6) empiler la taille
JSR Somme
...
...
Somme MOVEM.L ...,-(A7) sauvegarder les reg qui vont changer
MOVE.W (A6)+,D0 récupérer la taille
MOVEA.L (A6)+,A1 récupérer l’adresse du tableau
...
MOVEM.L (A7)+,...
RTS 30
Application, zone de travail 4-7
Moyennant LINK, on peut créer une zone de mémoire
temporaire pour les sous programmes
Exemple:
Subrtn LINK A6,#-12 Create a 12-byte workspace
.
MOVE D3,-8(A6) Accès aux éléments de mémoire via A6
.
.
UNLK A6 récupération de la zone
RTS Retourner au prog principal
31