Cours Assembleur 68000 : Guide Complet
Cours Assembleur 68000 : Guide Complet
4 Instructions de branchement 24
2
Listings Table des figures
Chapitre 1
Présentation du microprocesseur
68000
Le 68000 (68K) est un processeur développé par Motorola en 1979. C’est un mi-
croprocesseur généraliste qui ne possède pas de périphériques intégrés contrairement à
un microcontrôleur. Il a besoin d’une mémoire externe et des périphériques d’E/S pour 1.2 Évolution historique
pouvoir exécuter un programme dessus.
Le 68000 est un composant électronique de 64 broches, qui possède : Le microprocesseur 68000 a évolué au fil des années :
— un bus de données sur 16 bits ; — 68000 (1979) : processeur avec bus d’adresses de 23 bits (16 Mo) et de données
— un bus d’adressage sur 23 bits, ce qui détermine une zone mémoire accessible de 16 bits (cadencé à 10 MHz).
8 Mega-mots (16Mo) 1 . — 68010 : 68000 avec un registre VBR (Vector Base Register) pour placer n’importe
— et une fréquence de l’horloge de 10 Mega-hertz, ce qui correspond à un cycle où, en mémoire, la table des vecteurs d’interruptions
d’horloge de 100ns 2 . — 68020 : 68010 avec bus d’adresses de 32 bits (4 Go) et de données 32 bits.
— 68030 : 68020 avec cache de données ;
— 68040 : 68030 avec MMU (Memory Management Unit) ;
— 68060 (1995) : 68040 amélioré (cadencé à 66 MHz) ;
— Les versions à dizaines impaires sont des versions transitoires ou instables (68010,
68030) ;
— Les versions à dizaines paires sont des versions stables (68000, 68020, 68040,
68060) ;
— Le ColdFire est un microcontrôleur/DSP intégrant un coeur de 68020 avec un
jeu d’instructions simplifié cadencé à 200 MHz et plus ;
— On retrouve encore des 68K sous forme de microcontrôleur de la famille 68300
(68328 par exemple) utilisé dans les ordinateurs de poche et les tablettes ;
— on l’utilise encore massivement dans le monde industriel sous forme de cartes
1. 223 = 8M word = 16M O VME par exemple (Versa Module Eurocard) ;
2. Notons que la plus petite opération nécessite 4 cycles d’horloge — On le retrouve dans les téléphones portables, les voitures. . .
I. Ben Ameur Bazine 5 Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
1.3 La force du microprocesseur 68000 7 8 Présentation du microprocesseur 68000
C’est un processeur qui a été conçu pour simplifier la tâche du programmeur : Le 68K met à la disposition du programmeur plusieurs registres. Les données en-
— Il dispose d’un jeu d’instructions permettant de manipuler simplement des struc- registrées dans ces registres peuvent être manipulées de différentes manières selon le
tures de données complexes (tableaux multidimensionnels, structures . . .) ; tableau 1.1.
— divers modes d’adressage sont disponibles (la façon d’accéder à une case mé-
bit 1 bit
moire) ;
byte 8 bits .B
— deux modes d’utilisation sont possibles (modes utilisateur et superviseur) néces-
word 16 bits .W
saires pour implémenter un système d’exploitation moderne ;
Long word 32 bits .L
— il dispose aussi des interruptions avec niveaux de priorité pour s’interfacer avec
le monde extérieur asynchrone. Table 1.1 – Type de données
Parmi les points forts de ce µP est la rapidité de traitement des interruptions avec
niveaux de priorité, en fait il est bien plus performant qu’un processeur Intel (à fréquence
égale). 1.5.1 Les registres de données
⇒ Ceci explique sa suprématie dans le monde industriel et de l’embarqué... Ce processeur met à la disposition du programmeur 8 registres de données de 32
bits, D0, D1... D7. Ces registres peuvent être manipulés selon la figure 1.3
Le 68000 est un processeur 16 bits, mais les circuits mémoires utilisés avec lui sont
des circuits 8 bits. Donc, le 68000 gère la mémoire comme une mémoire 8 bits mais il
adresse des mots de 16 bits. Il n’y a donc pas de bit A0 sur le bus d’adresses. Il est
remplacé par les signaux U DS et LDS.
Figure 1.3 – Modes d’accès aux registres de données
Ce processeur dispose de 8 registres d’adresses A0, A1... A7. Ces registres peuvent
être manipulés selon la figure 1.4
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
1.5 Les registres 9 10 Présentation du microprocesseur 68000
Il faut noter aussi le rôle particulier de deux registres d’adresse A7 et A7bis, appelé | I2 | I1 | I0 |
USP (User Stack Pointer) et SSP (Supervisor Stack Pointer). Ainsi, A7 contient un
pointeur sur la pile relative au mode courant 3 (figure 1.5). level 0 | 0 0 0 | ---------> Priorité la plus basse
level 1 | 0 0 1 |
level 2 | 0 1 0 |
level 3 | 0 1 1 |
level 4 | 1 0 0 |
level 5 | 1 0 1 |
level 6 | 1 1 0 |
level 7 | 1 1 1 | ---------> Priorité la plus haute
Figure 1.5 – Les pointeurs sur la pile
Ce registre est séparé en deux parties, des bits système et des bits utilisateurs :
Bit 15 (T) : Trace bit. S’il est mis à 1, une interruption est appelée après chaque Un programme est une suite de code machine représentant des instructions placé
instruction (utilisé dans le mode de debuggage) ; en mémoire (selon un codage bien défini). Les instructions peuvent avoir des longueurs
variables (de 1 à 5 mots). De ce fait, les adresses de début d’instruction sont toujours
Bit 13 (S) : Supervisor bit. S’il est mis à 1, vous avez accès à quelques instructions
paires.
système ainsi qu’à la partie système ;
Bit 8,9,10 (I2, I1, I0) : Interrupt mask. Le masque d’interruptions permet de — chaque instruction est un multiple de mots de 16 bits ;
fixer un seuil (niveau) d’interruption, au dessous duquel une interruption ne — le premier mot de 16 bits contient le code opération qui indique implicitement
peut pas perturber le fonctionnement du programme. Ces niveaux sont spécifiés la taille de l’instruction ;
comme suit : — le Compteur de programme correctement initialisé assure la bonne exécution.
3. c’est-à-dire utilisateur ou superviseur Exemple de code en mémoire RAM ou ROM
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
1.6 Qu’est ce qu’un programme ? 11
syntaxe :
move.B source, destination
move.W source, destination
move.L source, destination
Elle déplace une donnée 8/16/32 bits d’un registre ou d’une position mémoire vers
un autre registre ou une autre position mémoire selon plusieurs modes d’adressage.
MOVE.W #523,D0
MOVE.B #$D0, D0
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 12 I. Ben Ameur Bazine
2.2 Modes d’adressage 13 14 Instruction de transfert de données et mode d’adressage
transfert de la valeur D0(16) = 208(10) dans l’Oktet de poids faible du registre D0. | | A1=01234567 | A1=01234567 |
--------------------------------------------
En assembleur les données (précédées par #) peuvent être saisies dans plusieurs
|MOVE.W D0,A1 | D0=01234567 | D0=01234567 |
bases :
# $ hexadécimale | | A1=FFFFFFFF | A1=00004567 |
Notation ⇐⇒ % binaire --------------------------------------------
& décimale (par défaut) |MOVE.W D0,A1 | D0=0000FFFF | D0=0000FFFF |
| | A1=00000000 | A1=FFFFFFFF |
Exemple : --------------------------------------------
MOVE.L #$1234ABCD,D3
MOVE.B #%11110000,D3
2.2.3 Adressage absolu
Le codage de la première instruction est sur 3 mots : 263C 1234 ABCD l’information est désignée par son adresse (32 bits : absolu long ou 16 bits : absolu
court). Exemple :
2.2.2 Adressage direct
move.W $2000 ,$3000
On opère directement sur les registres soit en lecture, soit en écriture.
copie le mot 16 bits de l’adresse $2000 à l’adresse $3000 en hexadécimale. Codage (3, 4
ou 5 mots 1 ) : 31F8 2000 3000
- Adressage direct avec registre de donnée
Le programmeur peut se contenter par la spécification d’une adresse courte sachant
que la véritable adresse est créée par extension de signe.
Syntaxe : Dn (avec n entre 0-7)
Exemple : MOVE.L D1,D0 copie le contenu de D1 dans D0. Si on manipule des .B
ou des .W. La partie haute du registre destination reste inchangée. :
ExempleMOVE.W #$2A1D, $9002 =⇒ $9002 2A1D
..
$9004 .
Instruction avant après
--------------------------------------------
|MOVE.B D1,D0 | D0=FFFFFFFF | D0=FFFFFF67 | - Adressage absolu (court) L’adresse est spécifiée sur 16bits, sachant qu’elle peut
| | D1=01234567 | D1=01234567 | être étendue sur 32 bits selon le bit de signe.
-------------------------------------------- - Adressage absolu (long) Cette fois-ci l’adresse est spécifiée sur 32 bits.
|MOVE.W D1,D0 | D0=FFFFFFFF | D0=FFFF4567 |
| | D1=01234567 | D1=01234567 |
Exemple : Le code machine suivant illustre le principe d’adressage absolu, ainsi que
-------------------------------------------- l’extension de signe. Sachant que ce programme commence à l’adresse $2000
- Adressage direct avec registre d’adresse 00002000 2038 1000 17 move.l $1000,D0
00002004 2239 0000F000 18 move.l $f000,D1
0000200A 23F8 1000 0000F000 19 move.l $1000,$F000
Syntaxe : An (avec n entre 0-7) 00002012 23F9 0000F000 0000F004 20 move.l $F000,$F004
Exemple : MOVE.L A1,D0 copie le contenu de A1 dans D0. Lors de l’utilisation 0000201C 21F8 F000 F004 21 move.l $FFFFF000,$FFFFF004
d’un registre d’adresse, on ne peut manipuler que des word et des longword.
Lorsqu’un mot est transféré à un registre d’adresse, les bits de poids le plus fort
sont remplis par le 15e bit du mot (le bit de signe). 2.2.4 Adressage indirect
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
2.2 Modes d’adressage 15 16 Instruction de transfert de données et mode d’adressage
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
2.3 Autres instructions 17 18 Instruction de transfert de données et mode d’adressage
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
20 Opérations arithmétiques et logiques
I. Ben Ameur Bazine 19 Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
3.2 Décalage et rotation 21 22 Opérations arithmétiques et logiques
3. décaler d’un bit un mot (16 bits) de la mémoire. *** ROXL ***
(ROtate Left with eXtend) Cette instruction assure la rotation à gauche des bits d’un
Mode d’adressage : (An), (An)+, -(An), x(An), x(An,xr.s), x.w, x.l registre de données ou d’un emplacement mémoire avec un bit d’extension, selon les
Syntaxe : trois modes précédents.
La rotation est faite avec l’injection d’un bit externe (X-flag). Le MSB <– X <–
ASL Dx,Dy
ASL #<data>,Dy LSB, le bit qui arrive à la position du poids le plus faible (LSB) est dupliqué dans le
ASL <ea> C-flag.
Taille de données : Byte, Word, Longword.
C <-- OPERAND <--
| |
3.2.2 Fonctions de rotation |-> X ->-----|
Les fonctions de rotation assurent un décalage cyclique des bits manipulés. Il existe Mode d’adressage : (An), (An)+, -(An), x(An), x(An,xr.s)
plusieurs variantes : Syntaxe :
ROXL #<steps>,Dy
*** ROL *** ROXL Dx,Dy
ROXL <ea>
Cette instruction assure la rotation à gauche des bits d’un registre de données ou d’un
emplacement mémoire, selon trois modes : Taille de données : Byte, Word, Longword.
1. rotation à gauche, le nombre de bits à décaler est enregistré dans un autre registre
de données. Vous pouvez décaler de 1-8 bits dans ce cas ; *** ROXR ***
2. rotation à gauche d’un registre de données, le nombre de bits à décaler est une Assure le même travail que la précédente mais vers la droite.
valeur immédiate ;
3. rotation d’un bit d’un mot (16 bits) de la mémoire. -- OPERAND ----> C
| |
Cette opération n’injecte pas de bits externes. Le bit qui arrive à la position du
|----<- X <--|
poids le plus faible (LSB) est dupliqué dans le C-flag.
Mode d’adressage : (An), (An)+, -(An), x(An), x(An,xr.s) Ce µP peut faire deux sortes d’instructions arithmétiques selon le codage des opé-
Syntaxe : randes, le codage des entiers signés (S, en complément à 2) et non signés (U, binaire
naturel). Notre but est de donner un aperçu sur ces instructions, pour plus d’informa-
ROL #<steps>,Dy tions sur une instruction donnée vous pouvez consulter le « Help » ou la documentation
ROL Dx,Dy en ligne de cet assembleur.
ROL <ea>
Taille de données : Byte, Word, Longword.
3.3.1 Arithmétique Entiers
*** ROR *** Une description succincte des instructions arithmétiques opérant sur des entiers est
Similaire à ROL, mais elle assure la rotation à droite des bits d’un registre de données donnée par la liste suivante :
selon le schéma suivant :
ADD, ADDA, ADDI, ADDQ, ADDX : Différents types d’addition,
--> OPERAND --> C CLR Clears an operand : Efface un opérande,
|____________| CMP, CMPA, CMPI, CMPM : Comparer deux opérandes,
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 I. Ben Ameur Bazine
3.4 Manipulation des bits 23
D’autres instructions permettent de manipuler des bits dans un Octet. Toutes les Les instructions suivantes effectuent de branchement (Branches), des sauts (Jumps)
instructions testent le bit avant de l’affecter. et appels de routines (Calls) :
.......
I. Ben Ameur Bazine Assembleur 68000 Assembleur 68000 24 I. Ben Ameur Bazine