Vous êtes sur la page 1sur 69

ASSEMBLEUR 68000

ASSEMBLEUR 68000
Chapitre 03 :
l’Assembleur du
MC68000
Professeur : JAMAL ELHACHMI
E-mail : jamal.elhachimi@ensias.um5.ac.ma

J.ELHACHMI ASSEMBLEUR 2023/2024


Pla
01. Introduction
n 02. Les modes d’adressage
2.1 L’adressage registre
2.2 L’adressage absolu
2.3 L’adressage immédiat
2.4 L’adressage indirect simple
2.5 L’adressage indirect post-incrémenté
2.6 L’adressage indirect pré-décrémenté
2.7 L’adressage indirect avec déplacement
2.8 L’adressage relatif PC
03. Le jeu d’instructions
3.1 Les instructions de transfert
3.2 Les instructions arithmétiques
3.3 Les instructions logiques
3.4 Les instructions de comparaison
3.5 Les instructions de branchement
3.6 Les instructions de décalage
04. Exercices
J.ELHACHMI ASSEMBLEUR
1. Introduction

Pour commander le matériel d'un ordinateur, vous devez parler sa langue.


— Les mots du langage d'un ordinateur sont appelés instructions et son vocabulaire
est appelé jeu d'instructions.
— L’ensemble des instructions sont appelés « langage machine ».
— La représentation symbolique les instructions machines: Assembleur.

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

Les instructions exécutées par un microprocesseur sont en réalité un code machine


sous forme binaire. Une telle représentation est très difficile à utiliser et à manipuler.

Le langage assembleur est en fin de compte une représentation lisible du code


machine sous forme de mnémoniques et symboles, offrant ainsi à l’utilisateur une
grande facilité et simplicité de programmation.

Un logiciel (dit généralement aussi assembleur) permet la conversion du


programme rédigé en assembleur en code machine.

Le MC 68000 possède un jeu d’instructions dit CISC (Complex Instruction Set


Computer ), avec:
▪ un ensemble de 56 mnémoniques (ADD, SUB, MOVE...),
▪ 14 modes d’adressage différents,
▪ et une possibilité d’exécution des instructions sur différentes tailles (8, 16, 32 bits).

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.

La directive SIMHALT produit le code objet $FFFF FFFF. Cette séquence de


chiffres est interprétée par le simulateur EASy68K comme une
commande d'arrêt du simulateur. Normalement, $FFFF devrait provoquer
une exception LINE_1111.

EQU : est une directive d’équivalence.


DC :(define constant) directive d’initialisation de la mémoire avec des constante pendant la phase d’assemblage (sur 8,16, ou 32 bits).
DS : (define space) directive de réservation de zone mémoire pendant l’assemblage (sur 8,16, ou 32 bits)

J.ELHACHMI ASSEMBLEUR
1. Introduction

Codes opératoires (op-code)


Les instructions à exécuter sont stockées dans la mémoire. Or la mémoire n'est qu'un
tableau de taille 8méga mots. Il faut donc transformer (coder) chaque instruction en un
nombre pouvant être codé sur 16 bits. L'attribution d'un code particulier à une
instruction a des conséquences sur le circuit chargé de décoder cette instruction.

Prenons la convention suivante pour l’instruction MOVE pour construire le code


opératoire de cette instruction :

Exemple : MOVE D3,D5 : le code opératoire= 00.11.101.000.000.011= $3A03

J.ELHACHMI ASSEMBLEUR
1. Introduction

Codes opératoires (op-code)


Exemple

J.ELHACHMI ASSEMBLEUR
1. Introduction
Exemple : construire le de l’ Op-code d’une instruction
MOVE D3,D5

1 1

le tableau suivant, spécifie le champ Adresse effective est codé, en fonction de


l'adressage utilisé, suivant le tableau ci-dessous aussi bien en source qu’en
destination

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

le tableau suivant, spécifie le champ Adresse effective est codé, en fonction de


l'adressage utilisé, suivant le tableau ci-dessous aussi bien en source qu’en
destination

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 :

MOVE D3,D5 : le code opératoire est 00.11.101.000.000.011


SC ROLL D OW N

= $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 :

CLR.B D0 ; Remise à zéro (8 bits) du registre D0


ADD.W D1, DO ; Addition 16 bits de D1, et D0 (résultat dans D0)
MOVEA.L A7, A2 ; Transfert 32 bits du contenu de A7 vers A2

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage
Exemple : registres de données

MOVE D0,D1 ; Transfert de 16 bits de D0 vers D1,


MOVE.W D0, $FF9000 ; Transfert 16 bits du contenu de l’adresse FF9000 vers D0

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

MOVE D0,D1 ; Transfert de 16 bits de D0 vers D1,


MOVE.W D0, $FF9000 ; Transfert 16 bits du contenu de l’adresse FF9000 vers D0

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

MOVE D0,D1 ; Transfert de 16 bits de D0 vers D1,


MOVE.W D0, $FF9000 ; Transfert 16 bits du contenu de l’adresse FF9000 vers D0

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

2.2 - Adressage absolu


Dans ce cas l’opérande est spécifié dans l’instruction par son adresse mémoire.
Ce type d’adressage est dit court quand l'adresse de la donnée est codée sur 16
bits maximum et long lorsqu'elle est codée sur 32 bits maximum.

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

ADD.W D1,$4000 ; Addition 16 bits de D1, et des cases mémoire (4000-4001)16


MOVEA.L D1, $4000 ; Transfert 32 bits des cases ADD:W D1; $4000

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage

a - Adressage Absolu court : AE=Adresse sur 16bits

MOVE.B $2000,D0

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage

b - Adressage Absolu long : AE = Adresse sur 24bits

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.

Exemple : MOVE.L #$1FFFF, D0


D0 avant 12345678 par exemple D0 après 0001FFFF

MOVE.B #100,D0 D0  (100 )10


MOVE.B #$64,D0 D0  (64)16=(100 )10
MOVE.B #%01100100,D0 D0  (100 )10

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

Le préfixe de chaque donnée spécifie au compilateur assembleur dans quelle


base est exprimée la valeur :
- # % => base 2
- #@ => base 8
- # => base 10
- #$ => base 16

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

2. 4 - Adressage immédiat court


Certaines instructions de l’assembleur du MC68000 possèdent des variantes plus
rapides, mais avec des limites concernant la taille des opérandes :
- Transfert rapide : MOVEQ #data,Dn
l’opérande source est une donnée 8 bits, la destination est impérativement un registre
de donnée, le résultat dans le registre subit une extension de signe sur 32 bits.

- Addition rapide : ADDQ #data,Dn


l’opérande source est une donnée entre 1 et 8, la destination est un registre de donnée

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage

- Soustraction rapide : SUBQ #data,Dn


l’opérande source est une donnée entre 1 et 8, la destination est un registre de
donnée.
Exemple:

MOVEQ #$72,D2 Résultat dans D2 (00000072)16


MOVEQ #$8B,D3 Résultat dans D3 (FFFFFF8B)16
ADDQ #2,D1 Incrémentation par 2 du contenu de D1
SUBQ #5,D7 Décrémentation par 5 du contenu de D7

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

- Soustraction rapide : SUBQ #data,Dn


l’opérande source est une donnée entre 1 et 8, la destination est un registre de
donnée.
(8B)16= (139)10 =(1000 1011)2
Exemple:

MOVEQ #$72,D2 Résultat dans D2 (00000072)16


MOVEQ #$8B,D3 Résultat dans D3 (FFFFFF8B)16
ADDQ #2,D1 Incrémentation par 2 du contenu de D1
SUBQ #5,D7 Décrémentation par 5 du contenu de D7

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

Principe d'extension du signe:

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.

Solution: effectuer l’opération de chargement sur le mot au poids faible d’un


registre A mais tous les 32 bits de la destination vont être chargés. C'est-à-dire que
les 16 bits MSB sont l’extension de signe du mot au poids faible

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 :

2000 0010 0000 0000 0000


- 0002 0000 0000 0000 0010
= 1FFE 0001 1111 1111 1110

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage

2. 8- Adressage indirect avec déplacement :


L’adresse de l’opérande est la somme du contenu d’un registre d’adresse An et
d’un déplacement d signé codé sur 16 bits (-32768 ≤ d ≤ +32767).
L’opérande est exprimé : d(An).

Exemple :

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage

2. 8- Adressage indirect avec déplacement :


L’adresse de l’opérande est la somme du contenu d’un registre d’adresse An et
d’un déplacement d signé codé sur 16 bits (-32768 ≤ d ≤ +32767).
L’opérande est exprimé : d(An).
Exemple :

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage

2. 9 -Adressage indirect avec déplacement sur 8bits signés et indexe court :


AE = (An)+(Xi.W)+d8

Exemple : MOVE.W $10(A0,D0.W),D1

J.ELHACHMI ASSEMBLEUR
2.les modes d’adressage

2. 9 -Adressage indirect avec déplacement sur 8bits signés et indexe long : AE


= (An)+(Xi.L)+d8

Exemple : MOVE.W $10(A1,D0.L),D1

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.

Transfert vers registre d’adresse.


Dans le cas où la source est un mot, le résultat est étendu à 32 bits par une extension
de signe

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.

Remise à zéro de la destination

Chargement d’une adresse effective dans un registre d’adresse.

EXG R1; R2 Permutation du contenu de deux registres (de donnée ou d’adresse)


SWAP Dn Permutation du mot de poids fort et de poids faible d’un registre de donnée.

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 :

L’addition avec un adressage immédiat :

J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Les instructions d’addition
L’addition rapide :

L’addition avec prise en compte du bit d’extension x :

Les opérations d’addition affectent les indicateurs (X,N,Z,V,C) du registre CCR


à L’exception de de l’instruction ADDA vu qu’elle manipule des adresses.
J.ELHACHMI ASSEMBLEUR
3. Jeux d’instructions
3.2 Les instructions arithmétiques
Exemple :
Addition 64 bits de deux données stockées respectivement aux adresses adr1, et adr2,
avec un stockage du résultat à partir de l’adresse adr3:

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 :

La multiplication non 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 :

La division non 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.

Dans le cas du ‘ET’ logique les instructions disponibles sont :

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.

L’instruction BPL (Branch if plus) provoque un


branchement vers l’étiquette , si le bit N =0
(après le calcul de A1-A0 )

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 :

Le branchement inconditionnel Le branchement conditionnel


BRA etiquette ; Saut à l’adresse pointée BCC etiquette ; (CC : Condition Code) La
par l’étiquette. condition du branchement dépend des
JMP AE ; Saut à une adresse effective. indicateurs du registre CCR
L’instruction JMP est plus générale que BRA Par exemple :
car elle permet plusieurs modes d’adressage. BCC : (branch if carry clear) (bit c=0)
BCS : (branch if carry set) (bit c=1)
BEQ : (branch if equal) (bit z=1)
BNE : (branch if not equal) (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 :

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

▪Exemples: JMP (A0)


JMP $00100A

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

▪ Calcul du déplacement d8 pour se rebrancher à l ’adresse $1000.


▪ PC vaut $1032 à l ’exécution de BRA.B 00110010
11001101 (Compl1)
Le deplacement à 8 est = $1000 - $1032 = -$32
+1
Un deplacement ngatif, donc
• -$32 = Compl2($32) :
= 11001110
soit $CE

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)

L’utilisation des instructions de branchement dépend aussi de la nature des données


traité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 :

b. Le branchement conditionnel

L’utilisation des instructions de branchement dépend aussi de la nature des données


traitées :

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.

• La division par 2 équivaux un décalage à droit par un bit, en


remplaçant le bit manquant par le bit de signe (MSB).

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,

Syntaxe: ROL Dx, Dy


ou ROL #<donnée>, Dy
ou ROL <AE>

Taille opérande: Byte, Word, Long word

Rotation à gauche de la destination. Le nombre de rotations est indiqué


par la source.
Si l'opérande est une case mémoire, il n'y a qu'une rotation.

Modifications du registre CCR:


X: Non affecté V: =0
N: =1 si MSB résultat =1 C: dernier bit hors de l'opérande
Z: =1 si résultat =0 ou 0 pour une rotation nulle.

Exemple assembleur:
ROL (A0)+
ROL #$01, D0
J.ELHACHMI ASSEMBLEUR
Merci pour votre attention

Vous aimerez peut-être aussi