Académique Documents
Professionnel Documents
Culture Documents
ASSEMBLEUR 68000
Chapitre 03 :
l’Assembleur du
MC68000
Professeur : JAMAL ELHACHMI
E-mail : jamal.elhachimi@ensias.um5.ac.ma
Le langage machine ou code machine est la suite de bits qui est interprétée par le
processeur de l’ordinateur lors de l’exécution d’un programme.
— C’est le langage natif du processeur, et le seul qui soit reconnu par celui-ci.
Chaque processeur possède son propre langage machine.
— Si un processeur A est capable d’exécuter toutes les instructions du processeur
B, on dit que A est compatible avec B. L’inverse n’est pas forcément vrai, A peut
avoir des instructions supplémentaires que B ne connaît pas.
J.ELHACHMI ASSEMBLEUR
1. Introduction
On peut imaginer la machine à partir d'une hiérarchie de niveaux, dans laquelle
chaque niveau a une fonction spécifique.
J.ELHACHMI ASSEMBLEUR
1. Introduction
J.ELHACHMI ASSEMBLEUR
1. Introduction
Dans sa forme générale une instruction peut avoir un ou deux opérandes et s’écrit :
Label < Code Instruction >.T < Opérande Source > < Opérande Destination >
où:
▪ Label : est un mot alphanumérique (une étiquette) qui représente l’adresse de
l’instruction.
▪ T : est la taille sur laquelle est exécutée l’instruction.
• B : 8 bits
• W : 16 bits
• L : 32 bits
Exemple:
MOVE D3,D5
J.ELHACHMI ASSEMBLEUR
1. Introduction
Exemple:
Dans sa syntaxe générale un programme en assembleur 68000 s’écrit :
ORG : indique au logiciel à partir de quelle adresse
placer le code machine.
J.ELHACHMI ASSEMBLEUR
1. Introduction
J.ELHACHMI ASSEMBLEUR
1. Introduction
J.ELHACHMI ASSEMBLEUR
1. Introduction
Exemple : construire le de l’ Op-code d’une instruction
MOVE D3,D5
1 1
SC ROLL D OW N
J.ELHACHMI ASSEMBLEUR
1. Introduction
Exemple : construire le de l’ Op-code d’une instruction
1 1 1 0 1
SC ROLL D OW N
J.ELHACHMI ASSEMBLEUR
1. Introduction
Exemple : construire le de l’ Op-code d’une instruction
MOVE D3,D5
1 1 1 0 1 0 0 0
SC ROLL D OW N
J.ELHACHMI ASSEMBLEUR
1. Introduction
Exemple : construire le de l’ Op-code d’une instruction
1 1 1 0 1 0 0 0 0 1 1
1 1 1 0 1 0 0 0 0 0 0 0 1 1
Et donc :
= $3A03
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Le mode d'adressage explique comment on peut obtenir la référence pour aller chercher
une donnée. La donnée peut être dans les registres A0-A7, D0-D7, PC, dans la mémoire
dont l'adresse est fournie dans le code opératoire ou dans la mémoire mais pointé par
Ai, etc.
C’est le type de donnée contenu dans le champ opérandes qui caractérise le mode
d'adressage.
Le MC68000 permet 14 modes d’adressage, dont les principaux sont les suivants :
2. 1- Adressage registre
L’opérande dans ce cas est un registre d’adresse ou de donnée.
MOVE D0,D1
Exemple :
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple : registres de données
Memory
MOVE D0,D1
0 0 0 0 0 0 0 0
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple : registres de données
Memory
MOVE D0,D1
0 0 0 0 3 2 1 0
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple : registres de données
Memory
MOVE D0,$FF9000
0 0 0 0 3 2 1 0 3 2 $FF9000
1 0 $FF9001
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple : registres d’adresses
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple:
MOVE.B #$F0, $FF9001
Écrit la donnée F0 à l'adresse FF9001.
Exemple :
CLR.B $5000 ; Remise à zéro (8 bits) de la case mémoire (5000 )16
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
MOVE.B $2000,D0
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
NOT.B $0FF8000
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 3- Adressage immédiat
Dans ce cas la valeur est spécifiée directement dans l’instruction précédée par
le symbole #.
MOVE.W #523,D0
le mot de poids faible de D0 est initialisé avec 523.
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 3- Adressage immédiat
Dans ce cas la valeur est spécifiée directement dans l’instruction précédée par le
symbole #.
MOVE.W #523,D0
le mot de poids faible de D0 est initialisé avec 523.
Exemple :
MOVE.B #100,D0 D0 (100 )10
MOVE.B #$64,D0 D0 (100 )10
MOVE.B #%01100100,D0 D0 (100 )10
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Remarquer que :
Le mode immédiat accepte aussi le code ASCII
MOVE.L #’face’ ,D1 D1 (66616365 )16
MOVE.L #’FACE’ ,D1 D1 (46414345)16
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Remarque:
Dans la plupart des cas, lorsque l’instruction porte sur un mot qui doit être reçu par un
registre d’adresses, il y a extension du bit de signe. L’extension du signe consiste à
recopier dans les bits 16 à 31 la valeur du bit de signe du résultat c’est à dire le bit 15.
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Remarque:
Dans la plupart des cas, lorsque l’instruction porte sur un mot qui doit être reçu par un
registre d’adresses, il y a extension du bit de signe. L’extension du signe consiste à
recopier dans les bits 16 à 31 la valeur du bit de signe du résultat c’est à dire le bit 15.
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Prob : les registres d’adresse sont des pointeurs et sont utilisés pour adresser la
mémoire. Contrairement au cas des registres de donnée, tous les 32 bits de ces
registres vont être affectés à la suite d’une opération.
Des opérations sur octet ne sont pas autorisées. Pour le mode d'adressage An, la
taille des données doit être un mot ou un mot long.
Exemple:
MOVEA #$AB12,A0 Résultat dans A0 (FFFFAB12)16
MOVEA #$1234,A0 Résultat dans A0 (00001234)16
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 5- Adressage indirect simple:
Dans ce cas l’opérande est spécifié par son adresse mémoire contenu dans un registre
d’adresse.
Une mise entre parenthèses du registre d’adresse différencie ce mode du mode registre.
L’Adresse Effective = (An). Memory
Exemple : A0
LEA $2000,A0
00000000
002000
002001
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 5- Adressage indirect simple:
Dans ce cas l’opérande est spécifié par son adresse mémoire contenu dans un registre
d’adresse.
Une mise entre parenthèses du registre d’adresse différencie ce mode du mode registre.
L’Adresse Effective = (An). Memory
Exemple : A0
LEA $2000,A0
00002000
002000 FFFFFFFF
002001
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 5- Adressage indirect simple:
Dans ce cas l’opérande est spécifié par son adresse mémoire contenu dans un registre
d’adresse.
Une mise entre parenthèses du registre d’adresse différencie ce mode du mode registre.
L’Adresse Effective = (An). Memory
Exemple : A0
LEA adr,A2
00002000
A2
00003000
002000 FFFFFFFF
002001
003000 00000000
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 5- Adressage indirect simple:
Dans ce cas l’opérande est spécifié par son adresse mémoire contenu dans un registre
d’adresse.
Une mise entre parenthèses du registre d’adresse différencie ce mode du mode registre.
L’Adresse Effective = (An). Memory
Exemple : A0
CLR.W (A0)
00002000
002000 00000000
002001
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 5- Adressage indirect simple:
Dans ce cas l’opérande est spécifié par son adresse mémoire contenu dans un registre
d’adresse.
Une mise entre parenthèses du registre d’adresse différencie ce mode du mode registre.
L’Adresse Effective = (An). Memory
Exemple : A0
MOVE.B #FF,(A2)
00002000
A2
00003000
002000 FFFFFFFF
002001
003000 000000FF
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 5- Adressage indirect simple:
Dans ce cas l’opérande est spécifié par son adresse mémoire contenu dans un registre
d’adresse.
Une mise entre parenthèses du registre d’adresse différencie ce mode du mode registre.
L’Adresse Effective = (An). Memory
Exemple : A0
CLR.W (A0)
00002000
002000 00000000
002001
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 6- Adressage indirect post-incrémenté:
Il s’agit d’un mode d’adressage indirect, où le registre pointeur An est
incrémenté (après l’exécution de l’instruction) par un nombre n.
▪ n=1 si l’opérande est un 8 bits (.B).
▪ n=2 si l’opérande est un 16 bits (.W).
▪ n=4 si l’opérande est un 32 bits (.L).
Exemple :
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 7- Adressage indirect pré-décrémenté :
Dans ce cas l’adresse de l’opérande est déterminée après une décrémentation
du registre d’adresse pointeur avec une valeur n (qui dépend de la taille de
l’opération) :
▪ n=1 dans le cas de 8 bits.
▪ n=2 dans le cas de 16 bits.
▪ n=4 dans le cas de 32 bits.
Exemple :
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple :
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple :
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
2. 8- Adressage relatif PC :
Dans ce type d’adressage l’adresse effective est obtenue en ajoutant un offset
(un déplacement) à la valeur en cours du compteur programme PC.
L’offset est calculé par le logiciel assembleur pendant la compilation du
programme.
Exemple :
Dans l’exemple suivant deux constantes 32
bits sont définies à la fin du programme
avec la directive DC.L, et une zone
mémoire 32 bit est réservée avec la
directive DS.L L’accés aux trois zone
mémoire est réalisé relativement au
contenu du PC.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.1 Les instructions de transfert
B
MOVE. W Source , destination
L
La destination apriori ne peut pas etre un registre d’adresse. Dans le cas ou la source
est un registre d’adresse, la taille se limite à W et L.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.1 Les instructions de transfert
La destination est un registre de donnée, et l’opérande source est une donnée 8 bits,
qui subit une extension de signe sur 32 bits.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.1 Les instructions de transfert
Exemple :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Les instructions d’addition
L’addition avec un registre :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Les instructions d’addition
L’addition rapide :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Les instructions de soustraction
Les instructions de soustraction du MC6800 sont pratiquement similaires à
celles d’addition :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Les instructions de Multiplication et de Division :
Dans le cas des opérations de multiplication et de division la taille des opérandes
est fixe.
La multiplication signée :
Dans les deux cas, les opérandes source et destination sont codés sur 16 bits (poids
faibles de l ’opérande), et le résultat tient sur 32 bits (d’un registre de donnée).
Dans le cas où les opérandes sont codés sur 8 bits, il est nécessaire de les
représenter sur 16 bits avant l’opération de multiplication :
▪ par une extension de signe dans le cas signé.
▪ par une remise a zéro de l’octet de poids fort dans le cas non-signé.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Les instructions de Multiplication et de Division :
Exemple :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Les instructions de Multiplication et de Division :
La division signée :
Dans les deux cas, l’opérande source est sur 16 bits, et l’opérande destination est
sur 32 bits .
Le résultat dans le registre de donnée est réparti en deux mots :
▪ Les 16 bits de poids faibles : le quotient .
▪ Les 16 bits de poids forts : le reste de la division entière
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.3 Les instructions logiques
L’assembleur du MC68000 permet la réalisation des opérations logiques de base
(ET , OU , XOR , Complément). Ces instructions logiques ne manipulent jamais des
registres d’adresse.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.3 Les instructions logiques
▪ Des instructions de formes similaires réalisent le ‘OU’ logique, et le OU exclusif : OR;
ORI; EOR; EORI
▪ NOT < AE > : réalise le complément à 1 du contenu de l’adresse effective.
Exemple :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.4 Les instructions de comparaison
▪ Les instructions de comparaison sont identiques à celle de soustraction, sauf que le
résultat n’est pas affecté à l’opérande destination, mais uniquement les flags (C,
N,Z, et V) du registre CCR qui sont modifiés.
▪ Les instructions de comparaison du MC68000 permettent des opérations sur des
registres de donnée et d’adresse, des valeurs immédiates, et des données en
mémoire :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.4 Les instructions de comparaison
Exemple : Mise à zéro d’une zone mémoire délimitée par deux pointeurs A0, et A1.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.5 Les instructions de Branchement
Le jeu d’instructions du MC68000 dispose de deux types de branchement :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.5 Les instructions de Branchement
Le jeu d’instructions du MC68000 dispose de deux types de branchement :
a. Le branchement inconditionnel
• On distingue les instructions qui utilisent un adressage absolu : JMP et JSR qui
permettent de transférer le contrôle du programme n ’importe où dans les 16 Mo d ’espace
d ’adressage du 68000.
JMP <étiquette>,
PC < - (<EA>)
JMP Le 68000 continue l'exécution du programme à l'adresse indiquée.
▪ Taille des opérandes : non Définit
▪ Mode d’adressage sauf Immédiat,
▪ Flags du CCR : non affectées
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.5 Les instructions de Branchement
Le jeu d’instructions du MC68000 dispose de deux types de branchement :
a. Le branchement inconditionnel
• On distingue les instructions qui utilisent un adressage relatif par rapport à la valeur
courante du PC : BRA et BSR. Ce déplacement peut être court et codé sur un octet (-128 à
+127) ou long codé sur 2 octets (-32768 à + 32767).
BRA <étiquette>
PC <- PC + d , d en complément à 2
d : nombre d'instructions entre l'endroit du branchement et l'endroit où le programme
doit se brancher
L'instruction suivante qui sera exécutée est située à l'adresse (PC) + Etiquette
▪ Taille opérande: Byte (B sur 1 octet) , Word (W sur 2 octets),
▪ Modes d ’adressage : relatif par rapport à la valeur courante du PC
▪ Flags du CCR : non affectés
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.5 Les instructions de Branchement
Le jeu d’instructions du MC68000 dispose de deux types de branchement :
a. Le branchement inconditionnel
Exemple de calcule de l’offset :
Exemple : assembler à la main le code suivant :
$1000 ….
….
$1030 BRA.B ...
$1032 ….
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.5 Les instructions de Branchement
Le jeu d’instructions du MC68000 dispose de deux types de branchement :
b. Le branchement conditionnel
BCC etiquette ; (CC : Condition Code) La condition du branchement dépend des
indicateurs du registre CCR
Par exemple :
BCC : (branch if carry clear) branchement si la retenu est zéro (bit c=0)
BCS : (branch if carry set) branchement si la retenu est 1 (bit c=1)
BEQ : (branch if equal) branchement en cas d’égalité (bit z=1)
BNE : (branch if not equal) branchement en cas d’inégalité (bit z=0)
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.5 Les instructions de Branchement
Le jeu d’instructions du MC68000 dispose de deux types de branchement :
b. Le branchement conditionnel
Exemple Détermination du nombre de caractère ‘A’ dans une chaine de 100 caractères
ascii situés en mémoire à partir de l’adresse MEM.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.5 Les instructions de Branchement
Le jeu d’instructions du MC68000 dispose de deux types de branchement :
b. Le branchement conditionnel
Exemple Détermination du nombre de caractère ‘A’ dans une chaine de 100 caractères
ascii situés en mémoire à partir de l’adresse MEM.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.6 Les instructions de décalage
Les instructions de décalage sont largement utilisées en arithmétique pour remplacer
les instructions de multiplication et division par des puissance de 2, vu qu’elles offrent
un temps d’exécution plus rapide que les instructions (MULU, MULS, DIVU, DIVS)
Rappel :
▪ Dans le cas des entiers non signés :
• la multiplication par 2 équivaut à un décalage gauche par un bit,
en remplaçant le bit manquant par un zéro.
0111 7
× 0010 × 2
=1110 =14
• la division par 2 équivaut à un décalage droite par un bit, en
remplaçant le bit manquant par un zéro.
1000 8
÷ 0010 ÷ 2
=0100 =4
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.6 Les instructions de décalage
Les instructions de décalage sont largement utilisées en arithmétique pour remplacer
les instructions de multiplication et division par des puissance de 2, vu qu’elles offrent
un temps d’exécution plus rapide que les instructions (MULU, MULS, DIVU, DIVS)
Rappel :
▪ Dans le cas des entiers signés (complément à 2) :
• La multiplication par 2 équivaux un décalage gauche par un bit, en
remplaçant le bit manquant par un zéro.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.6 Les instructions de décalage
L’assembleur du MC68000 dispose de deux types d’instructions de décalage :
▪ Le décalage logique (logical shift) : compatible à la division et la multiplication
non signées par 2 :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.6 Les instructions de décalage
L’assembleur du MC68000 dispose de deux types d’instructions de décalage :
▪ Le décalage arithmétique : compatible à la division et la multiplication signées
par 2 :
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.6 Les instructions de décalage
Exemple:
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.6 Les instructions de Rotation
La forme des instructions de rotation est similaire à celles des instructions de décalage,
Exemple assembleur:
ROL (A0)+
ROL #$01, D0
J.ELHACHMI ASSEMBLEUR
Merci pour votre attention