Vous êtes sur la page 1sur 13

Comparaison &

branchement
1- Modes d’adressage indirect:
Post-incrémenté et pré-décrémenté
A- Indirect Post-incrémenté (An)+:
* L’opération s’effectue sur l’opérande [[An]]
* Puis incrémentation de An: Le contenu de An va être
incrémenté comme suit:
[An]+1 et remis dans An si taille B
[An]+2 et remis dans An si taille W
[An]+4 et remis dans An si taille L
Exp:
CLR.W (A4)+ Avant exécution: [A4]=$2800

Et le résultat d’exécution: $2800 00


00
Après exécution: [A4]=$2802 $2802
B- Indirect Pré-décrémenté -(An):
* Décrémentation de An
[An]-1 et remis dans An si taille B
[An]-2 et remis dans An si taille W
[An]-4 et remis dans An si taille L
* Puis l’opération s’effectue sur [[An]]
Exp:
CLR.L -(A4) Avant exécution: [A4]=$2800

Et le résultat d’exécution:
$27FC 00
Après exécution: [A4]=$27FC
Rq Importante: Pour (A7)+ et –(A7), 00
quand la taille est B, 00
l’incrémentation ou la
décrémentation s’effectuent sur 2 00
unités B ≡ W $2800
2- Instructions de comparaison
B [Dn]-source, le résultat n’est pas
CMP. W source, Dn sauvegardé, mais il affecte, cependant,
L les flags
Idem CMP.
CMPA. W source, An Si la taille de source est W  Extension
L à L puis comparaison car la dest est
B reg d’adr
CMPI. W #data, dest
L
B N’utilise que ce mode d’adressage
CMPM. W (An)+,(Am)+ indirect post-incrémenté. CMPMemory ou
L CMPMultiple.
B
TST. W dest Comparaison de dest avec la valeur immédiate
L "0 " ≡ CMPI #0,dest (dest – 0 )
3- Instructions de branchement:
A- Saut inconditionnel
JMP adresse (effective) Différence au niveau du
BRA adresse (relative) code machine

B- Saut conditionnel
cc = valeurs du tableau précédent
Bcc adresse
hormis F et T

adresse cc ?
oui

non
DBcc Dn,adresse
oui cc ?

non
DnW  DnW -1

DnW = -1 ? non
adresse

oui
Cas particulier

DBF Dn,adresse DnW  DnW -1

DnW = -1 ? non
adresse

oui
Les différentes conditions de branchement pour les instructions Bcc et DBcc :
CC Si retenue à 0 C=0 Carry Clear
CS Si retenue à 1 C=1 Carry Set
EQ Si égal Z=1 EQual
NE Si non égal Z=0 Not Equal
GE Si supérieur ou égal NV  NV = 1 Greater or Equal
GT Si supérieur NV Z  NV Z = 1 Greater Than
HI Plus grand CZ =1 HIgh
LE Si inférieur ou égal Z  NV  NV =1 Less or Equal
LT Si inférieur NV  NV =1 Little Than
LS Si plus petit C + Z =1 Low or Same
MI Si négatif N=1 MInus
PL Si positif N=0 Plus
VC Si pas de dépassement V=0 oVerflow Clear
VS Si dépassement V=1 oVerflow Set
F Si faux 0 never equal (False)
T Si vrai 1 always True
4- Exp :
Calcul de la moyenne m
de 100 nombres signés
codés sur 8 bits
adtab ↔ $2800 n0
99 n1
n i ni : nombre
n2


100 nbres
m i 0
signé. …
signés
100 n98
n99

$2900 m
Les ni sont rangés dans une
table de 100 cases mémoire
situées à l'adresse $2800, le
résultat est à ranger en $2900
 m sur 8 bits.
1° Solution: Début Légende:
s: variable de travail
s←0 adr: pointeur d’adresse
Initialisation
adr ← adtab
ni

s ← s + [ adr ]

adr ← adr + 1 Incrémentation

oui
adr  adtab Test
+ 99 ?
non
s sur 16 bits D0
m ← s / 100
adr sur 32 bits A0

Fin
ORG $2400
CLR.W D0 s←0
LEA adtab,A0 ≡ MOVE.L #adtab, A0
boucle MOVE.B (A0)+, D1
EXT.W D1 Extension du contenu de D1 car signé
ADD.W D1,D0
CMPA.L #adtab+99,A0
 ? Si oui  aller à boucle
BLS boucle sinon continuer
EXT.L D0 Ext de D0 sur L pour la division
DIVS #100,D0 XX XX D0
MOVE.B D0, $2900 m

MOVE.B #9,D0 Ce n’est que l’ext signée du résultat


TRAP #15
adtab EQU $2800
END
2° Solution: Début

I: Compteur
I ←99 ; s ← 0
Initialisation On utilise un compteur quand
adr ← adtab on connaît préalablement le
nbre d’itérations à faire
s ← s + [ adr ] ; adr ← adr + 1

I←I-1 Décrémentation

non
I = -1 ? Test

oui Rq: L’organigramme est


indépendant du µP, on n’y
m ← s / 100 utilise pas D0, A0, … qui sont
propres au Motorola 68000
Fin
ORG $2600
CLR.W D0
LEA adtab,A0
MOVEQ.L #99, D2 99W  D2, mais avec MOVEQ, on a
Loop MOVE.B (A0)+, D1 99L, ce qui nous arrange
EXT.W D1
ADD.W D1,D0
DBF D2, Loop •IW  IW-1
•IW ≠ -1  aller à Loop
EXT.L D0
DIVS #100,D0
MOVE.B D0, $2900

MOVE.B #9,D0
TRAP #15 Rq Importante: En utilisant DBF, le
adtab EQU $2800 registre contenant le compteur doit
END être sur 16 bits au moins

Vous aimerez peut-être aussi