Vous êtes sur la page 1sur 20

Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Modes d'adressage du 6809


I- Adressage inhérent

L’adressage inhérent est utilisé par les instructions qui agissent sur les
registres internes du CPU et non sur la mémoire. Il existe deux types de mode
d’adressage inhérent sur le 6809 :
1- Adressage inhérent simple
Le code opération contient toute l’information nécessaire à l’exécution de
l’instruction. Ces instructions codées sur un octet sont : ABX, ASLA, ASLB, ASRA,
ASRB, CLRA, CLRB, COMA, COMB, DAA, DECA, DECB, INCA, INCB, LSLA, LSLB,
LSRA, LSRB, NEGA, NEGB, ROLA, ROLB, RORA, RORB, RTI, RTS, SEX, SWI,
SYNC, TSTA, TSTB. L’utilisation de SWI2 et SWI3 nécessite chacune deux octets.
Exemple :
ABX  addition de l’accumulateur B à l’index X

CPU Mémoire
7 6 5 4 3 2 1 0
CCR
3A Adr
aa
D bb

xx xx + bb
X
Y
S
U
PC Adr
Adr +1
DPR

2- Adressage inhérent paramètré


L’instruction comporte un octet supplémentaire permettant de préciser les
opérandes intervenant dans l’instruction. La présence de cet octet supplémentaire est
indispensable pour les instructions de type
- échange et transfert de registres ;
- instructions d’accès aux piles ;
- attente d’interruption.
2-1- Echange et transfert de registre :
Le premier octet détermine le code opératoire pur, le second les registres
sources et destination.
Exemple :
TFR U, S  transfert de U dans S

Ben Soussia Afif Page 1 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

CPU
Mémoire
7 6 5 4 3 2 1 0
CCR
1F Adr
34 Adr +1

D Adr +2

X
Y
S
U
PC Adr
Adr +2
DPR

2-2- Instructions d’accès aux piles :


Le premier octet détermine le code opératoire pur, le post-octet, les registres
concernés par l’accès à la pile.
Exemple :
PSHS A, B, X  sauvegarde dans la pile de A, B, X
CPU Mémoire
7 6 5 4 3 2 1 0
CCR 34 Adr
16 Adr +1
aa Adr +2
D bb

SSSS-4
2-3-
X X X X’ X’

Y aa SSSS-4
S S S S S
bb SSSS-3
U xx SSSS-2
PC Adr
Adr +2 x’x’ SSSS-1
DPR SSSS

Attente d’interruption :
Le premier octet est associé à l’instruction CWAY, le second sert à masquer ou
à valider les interruptions.

Exemple :
CWAY #$FF  attente d’interruption NMI, IRQ et FIRQ sont masquées

Ben Soussia Afif Page 2 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

II- Adressage immédiat


Dans ce mode d’adressage, le code opératoire 8 bits est suivi d’une valeur qui
est l’opérande de l’instruction.
La longueur de l’opérande (1 ou 2 octets) est fonction de la nature du support
d’information concerné ( indiqué par le code opératoire  registres 8 ou 16 bits).
Ce type d’adressage permet de charger les registres internes du
microprocesseur avec la valeur de l’opérande.
Le symbole « # » signifie immédiat dans la syntaxe assembleur. Il existe trois
types d’instructions dans ce mode d’adressage :
1- Instruction sur deux octets
Le premier octet contient le code opératoire, le second la constante 8 bits. Ce
type d’instruction est réservé pour travailler sur les registres 8 bits du
microprocesseur.
Exemple :
LDA #$43  charger la valeur $ 43 dans l’accumulateur A

Ben Soussia Afif Page 3 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

2- Instruction sur trois octets


Le premier octet contient le code opératoire, le second et le troisième
contiennent la constante 16 bits. Ce type d’instruction est réservé pour travailler sur
les registres de 16 bits du microprocesseur.
Exemple :
ADDD #$2000  addition du contenu de l’accumulateur D et de $ 2000, le
résultat se trouve dans D.

3- Instruction sur quatre octets


Dans ce type d’instruction, le code opératoire utilise deux octets mémoires, la
constante également. Le premier octet est nécessaire pour les instructions : CMPS,
CMPU, CMPY, LDS, LDY, STS, STY.
Exemple :
LDY #$1623  charger l’index Y avec la valeur hexadécimale 1623
Remarques : l’instruction de chargement immédiat est valable pour tous les registres
internes du CPU sauf le registre de page DPR. Toutefois, il est possible en deux temps
de charger DPR.
Exemple :
LDA #$03  chargement de l’accumulateur A avec $ 03
EXGA , DP  échange des contenus de A et DP.
III- Adressage direct
Ce mode présente l’avantage de ne nécessiter que 2 octets pour avoir accès à
des données situées sur l’ensemble de l’espace mémoire du microprocesseur.
Le premier octet définit le code opératoire, le second représente les 8 bits de
poids faible de l’adresse effective dont les 8 bits de poids fort se trouvent dans le
registre de page du microprocesseur DPR.
Il suffit donc d’initialiser le registre de page DPR pour pouvoir travailler en
adressage direct sur les 256 octets de la page choisie ; au-delà, il faut de nouveau
accéder à DPR.
A la mise sous tension, le registre de page est mis à zéro. On aura donc accès
aux 256 octet de la page 0.
Le symbole « < » est une directive assembleur qui force l’adressage direct.
Il existe deux types d’instructions dans ce mode d’adressage :

Ben Soussia Afif Page 4 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

1- Instruction sur deux octets


Le premier octet définit le code opératoire, le second les poids faibles de
l’adresse effective.
Exemple :
LDA $ 37 ou LDA < $37  chargement de l’accumulateur A avec le contenu de
$D437 (DPR = D4).

2- Instruction sur trois octets


Le code opératoire est défini par les deux premiers octets. Le troisième octet
précise les poids faibles de l’adresse effective. Le premier octet est seulement
nécessaire pour les instructions qui opèrent sur le pointeur de pile S, le registre
d’index Y et sur les instructions de comparaison CMP opérant sur 16 bits.
Exemple :
LDY $17 ou LDY <$17  chargement du registre Y avec le contenu des cases
2317/18.

IV- Adressage absolu ou étendu


L’adressage étendu ou absolu permet de retrouver des données en mémoires.
Le code opératoire (8 bits) est suivi de 2 octets constituant l’adresse effective de
l’opérande proprement dit.
Il existe deux types d’instructions dans ce mode d’adressage.
Le symbole « > » est une directive assembleur qui force l’adressage absolu.

Ben Soussia Afif Page 5 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

1- Instruction sur trois octets


Le premier octet (code opératoire) est suivi de l’adresse 16 bits spécifiant
l’emplacement de l’opérande (8 ou 16 bits).
Exemple :
LDA $21C0 ou LDA >$21C0  chargement de l’accumulateur A avec le contenu de
la case mémoire d’adresse $21C0.

Dans ce cas l’opérande est l’accumulateur A (8 bits).


2- Instruction sur quatre octets
Le code opératoire est défini par les deux premiers octets. Les 3 ème et 4ème octets
constituent l’adresse effective. Le premier octet est seulement nécessaire pour les
instructions qui opèrent sur les pointeurs S et Y et sur les instructions de comparaison
CMPU, CMPD.
Exemple :
LDY $3478 ou LDY >$3478  chargement du registre Y avec le contenu de $3478.
V- Adressage absolu ou étendu indirect
Ce mode d’adressage est identique au mode d’adressage étendu mais possède
en plus une indirection. En effet, on accède à une adresse effective en « transitant »
par une adresse intermédiaire. L’adressage étendu indirect est codé par un code
opératoire identique à celui de l’adressage indexé suivi d’un post-octet (cas
particulier de cet adressage indexé).
La notation assembleur « [ ] »force l’adressage étendu indirect.
Il existe deux types d’instructions dans ce mode d’adressage.
1- Instruction sur quatre octets
Les deux premiers octets déterminent le code opératoire : code opératoire de
l’adressage étendu simple suivi d’un post-octet déterminant l’indirection. Les 3 ème et
4ème octets représentent l’adresse de transit.
Exemple :
LDA [$2000]  chargement de l’accumulateur A avec le contenu dont l’adresse se
trouve en $2000 et $2001.

Ben Soussia Afif Page 6 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

2- Instruction sur cinq octets


Pour certaines instructions, il est nécessaire d’ajouter un pré-octet. Cela est
nécessaire pour les instructions opérant sur les pointeurs S et Y et pour les
instructions de comparaison CMPU et CMPD. Le reste de la codification est identique
au cas précédent.
Exemple :
LDY [$2000]  chargement du registre d’index Y avec le contenu dont l’adresse se
trouve en $2000 et $2001.

VI- Adressage relatif


1- Adressage relatif court
Ce mode d’adressage est réservé pour les instructions de branchement.
L’instruction de branchement opérant en adressage relatif court fait appel à un format
de deux octets seulement. Le premier octet détermine le code opératoire qui spécifie le
type de branchement en même temps le test correspondant. Le second octet est la
valeur du déplacement qui peut être positif ou négatif. Dans ce mode d’adressage
relatif court, le déplacement étant codé sur un octet, on pourra se déplacer 128 ($80)
octets en arrière et de 127 ($7F) octets en avant par rapport à la valeur du compteur
programme (PC) à la fin du traitement de l’instruction de branchement.

Ben Soussia Afif Page 7 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Exemple :
ARRET EQU $3000
BPL ARRET
L’étiquette ARRET correspond à l’adresse $3000. L’instruction BPL ARRET doit se
trouver impérativement entre $2F7F ($2F7F + $2 + $7F = $3000) et $307E ($3047E
+ $2 - $80 = $3000).
Dans ce cas, BPL fait un test sur le bit N du registre de code condition, le
branchement a lieu si N=0 ( résultat de l’opération précédente positif)

Le déplacement est calculé en fonction de la valeur de Adr par rapport à l’étiquette


ARRET ($3000).
2- Adressage relatif long
Ce mode d’adressage est identique au précédent, il est toujours réservé aux
branchement. Les instructions sont codées sur quatre octets, les deux premiers
déterminent le code opération, les 3 ème et 4ème octets donnent la valeur signée du
déplacement.
La différence essentielle entre l’adressage relatif court et l’adressage relatif
long est que le déplacement est codé sur 16 bits dans le second cas.
On pourra donc se déplacer de +32767 ($7FFF) octets en avant et de –32768
($8000) octets en arrière, par rapport à la valeur du compteur programme (PC) à la
fin du traitement de l’instruction de branchement.
Au niveau du code machine, ce qui différencie l’adressage relatif long de
l’adressage relatif court, c’est la présence d’un pré-octet dont la valeur est constante
($10). Le code opératoire proprement dit est le même dans les deux cas.
Exemple :
ARRET EQU $6000
LBPL ARRET
L’étiquette ARRET correspond à $6000. Dans ce cas il n’y a pas de restriction quant à
la position de l’instruction LBPL sur l’espace mémoire du microprocesseur. Si le
résultat de l’opération précédant l’instruction de branchement est positif, le compteur
ordinal PC se positionnera à l’adresse $6000.

Ben Soussia Afif Page 8 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

VII- Adressage indexé


Le principe de l’adressage indexé est que l’instruction spécifie une base (index)
plus un déplacement par rapport à cette base. On peut donc écrire :
Adresse effective = base + déplacement
La puissance d’un mode d’adressage indexé est déterminé par l’éventail bases
dont on dispose et par les possibilités de déplacement que l’on a.
Dans le cas du 6809, la base peut être soit un des registres d’index ( ce qui est
normal), mais aussi un des deux pointeurs de pile ( U ou S) ou, ce qui est très
intéressant, le compteur programme lui-même (notre adressage indexé est alors un cas
particulier de l’adressage relatif).
Pour ce qui est déplacement, il y a de multiples possibilités, celui-ci peut être
nul, codé sur cinq, huit ou seize bits, ou variable dans le cas de l’utilisation de
l’accumulateur A, B ou D.
Enfin, l’adressage indexé offre des possibilités d’auto-incrémentation ou
d’auto-décrémentation de 1 ou de 2. Toutes fois ces options sont sélectionnées par le
post-octet qui suit le code opératoire.
Le tableau I montre les format utilisés par le post octet.

Ben Soussia Afif Page 9 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Tableau I : Signification des bits du registre post-octet


Bit du registre post-octet Mode d’adressage indexé
7 6 5 4 3 2 1 0 AE = , Base (R) +/- Déplacement
0 R DEPLACEMENT AE = , R +/- 4 bits
1 R 0 0 0 0 0 AE = , R+
1 R I 0 0 0 1 AE = , R++
1 R 0 0 0 1 0 AE = , - R
1 R I 0 0 1 1 AE = , - - R
1 R I 0 1 0 0 AE = , R +/- 0
1 R I 0 1 0 1 AE = , R +/- Acc B
1 R I 0 1 1 0 AE = , R+/- Acc A
1 R I 1 0 0 1 AE = , R+/-8bits
1 R I 1 0 0 0 AE = , R+/-16bits
1 R I 1 0 1 1 AE = , R +/- D (Acc A + Acc B)
1 ▬ I 1 1 0 0 AE = , PC+/-7bits
1 ▬ I 1 1 0 1 AE = , PC+/- 15bits
1 R 1 1 1 1 1 AE = , Adresse
Remarque : les bits 5 et 6 du post-octet permettent de définir la base.
Base R b6 b5
Index X 0 0
Index Y 0 1
Pointeur U 1 0
Pointeur S 1 1
Compteur programme ▬ ▬

1- Déplacement nul
Dans ce mode, le registre pointeur sélectionné contient l’adresse effective des
données devant être utilisées par l’instruction. Ce mode est le mode indexé le plus
rapide. Il existe deux types d’instruction :
1-1- Instruction sur deux octets
Le code opératoire est suivi du post-octet présentant les options pour
l’instruction en cours (tableau I).
Exemple :
LDA ,X  chargement de A avec la valeur dont l’adresse est le contenu de l’index X.

Ben Soussia Afif Page 10 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Dans ce cas, le post-octet est égal à $84 :


 b7 = 1  b4 = 0 signifie que nous sommes en adressage indexé direct.
 b5.b6 = 0.0  on travaille avec l’index X
 b3.b2.b1.b0 =0.1.0.0  le déplacement est nul.
1-2- Instruction sur trois octets
Pour certains registres du microprocesseur il est nécessaire d’ajouter un pré-
octet, aux deux octets opératoires proprement dits. Cela mis à part, ce mode est
identique au précédent.
Exemple :
LDY ,X  chargement de l’index Y avec la valeur dont l’adresse de base est le
contenu de X.
2- Auto- incrémentation / décrémentation de l'index
On peut obtenir des pré-décrémentations de un ou deux et des post-
incrémentations de un ou deux. Ces possibilités permettent de gérer facilement une
table. Le registre pointeur sélecteur contient l’adresse effective des données utilisées
par l’instruction. Les symboles « + », « ++ », « - », « - -» placés avant ou après la
base définissent le type auto-incrémentation/décrémentation choisi.
2-1- Instruction sur deux octets
Exemple :
LDA ,X+  chargement de A avec la valeur dont l’adresse est le contenu de X, post-
incrémentation par un de X.

Dans ce cas le post-octet est égal à $80 (tableau I) :


 b7 = 1  b4 = 0 --< adressage indexé direct.
 b6.b5 = 0.0  utilisation de l’index X.
 b3.b2.b1.b0 = 0.0.0.0  mode post-incrémentation.
Le mode auto-icrémentation/décrémentation par un est utilisé pour gérer des tables de
données.
2-2- Instruction sur trois octets
Exemple :
LDY ,--X  chargement de Y avec la valeur dont l’adresse est le contenu de X-2.

Ben Soussia Afif Page 11 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Le post-octet est égal à $83 (tableau I) :


 b7 = 1  b4 = 0  adressage indexé direct.
 b6.b5 = 0.0  utilisation de l’index X.
 b3.b2.b1.b0 = 0.0.1.1  double pré-décrémentation.
Le mode auto-incrémentation/décrémentation par deux est utilisé pour gérer
des tables d’adresses.
L’aspect pré-décrément, post-incrément permet de créer des piles logicielles
pointées par X et Y, gérées de la même façon que les piles S et U.
3- Avec déplacement constant
Dans ce mode d’adressage, l’adresse effective de l’opérande est la somme de
déplacement (en complément à deux) et du contenu du registre constituant la base. Le
registre de base n’est pas modifié. Il existe trois formes d’adressage indexé à
déplacement constant, suivant la valeur de cette constante.
3-1- Déplacement sur +/- 4 bits
Le déplacement codé sur cinq bits (en complément à deux) présente l’avantage
d’être contenu dans le post-octet d’indexation. Ce qui permet un gain de la mémoire et
une exécution plus rapide de cette instruction.
Les bits 0 à 4 du post-octet déterminent la valeur du déplacement qui pourra
être de –16 octets en arrière (1 0000) et de +15 octets en avant (0 1111). Dans ce cas,
le bit 7 constamment à zéro initialise le bit 4 comme bit de signe.
Exemple :
ADDB –3,Y  addition du contenu d’adresse mémoire Y-3 au contenu de
l’accumulateur B, le résultat est dans B.

Ben Soussia Afif Page 12 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Dans ce cas le post-octet est égal à $3D (tableau I) :


 b7 = 0  b4 est le bit de signe du déplacement.
 b6.b5 = 0.1  utilisation de l’index Y.
 b4.b3.b2.b1.b0 = 1.1.1.0.1  le déplacement est –3 en complément à deux.
3-2- Déplacement sur +/- 7 bits
Ce déplacement codé sur huit bits (en complément à deux) est contenu dans un
seul octet, placé à la suite du code opératoire proprement dit et du post-octet. Les
déplacements possibles sont donc compris entre – 128 et +127 octets.
Exemple :
LDY $65,U  chargement du pointeur Y avec le contenu mémoire dont l’adresse de
base est le contenu de U + $65.

Dans ce cas le post-octet est égal à $C8 (tableau I) :


 b7 = 0  b4= 0 adressage indexé en direct.
 b6.b5 = 1.0  utilisation de l’index U.
 b3.b2.b1.b0 = 1.0.0.0  le déplacement est codé sur huit bits en complément à
deux.
3-3- Déplacement sur +/- 15 bits
Ce déplacement codé sur 16 bits (en complément à deux est contenu dans les
deux octets placés à la suite de ceux de l’instruction (code opératoire + post-octet).
Les déplacements possibles sont donc compris entre – 32768 et + 32767 octets.
Exemple :
LDA $2000,X  chargement de l’accumulateur A avec le contenu mémoire d’adresse
X + $2000.

Ben Soussia Afif Page 13 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

La valeur du post-octet est $89.


 b7 = 0  b4 = 0  indexé direct.
 b6.b5 = 0.0  utilisation de l’index X.
 b3.b2.b1.b0 = 1.0.0.1  le déplacement est sur +/-15 bits.
4- Déplacement accumulateur
Ce mode d’adressage est semblable au précédent à l’exception du déplacement
qui n’est plus codé sur des octets spécifiques mais contenu dans les accumulateurs A,
B ou D du microprocesseur. L’adresse effective est donc la somme des registres
pointeur et accumulateur spécifiés dans le mnémonique de l’instruction. Le contenu
des registres pointeur et utilisateur reste inchangé après l’addition. Chaque
instruction est codé sur deux octets, le post-octet spécifie le nom du pointeur et celui
de l'accumulateur de déplacement.
4-1- Déplacement sur +/- 7 bits accumulateur A ou B
Exemple :
LDA B,X  chargement de l’accumulateur A avec le contenu mémoire dont l’adresse
est X+B.

Post-octet $85 :
 b7 = 0  b4 = 0  indexé direct.
 b6.b5 = 0.0  utilisation de l’index X.
 b3.b2.b1.b0 =0.1.0.1  le déplacement = contenu accumulateur B (en complément
à deux).
4-2- Déplacement sur +/- 15 bits accumulateur D
Exemple :

Ben Soussia Afif Page 14 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

LEAY D,X  chargement dans l’index Y de l’adresse donnée par la somme D+X.

Post-octet $8B :
 b7 = 0  b4 = 0  indexé direct.
 b6.b5 = 0.0  utilisation de l’index X.
 b3.b2.b1.b0 =0.1.1.1  le déplacement = contenu accumulateur D=(A:B) (en
complément à deux).
5- Base = compteur programme
Les paragraphes précédentes nous ont permis d’aborder les différents modes
d’adressage indexé utilisant X, Y, S et U comme base. L’utilisation de compteur
ordinal comme base d’indexation impose des restrictions sur les types de
déplacements. Seuls les déplacements constants codés sur 8 ou 16 bits (en complément
à deux) peuvent être utilisés.
5-1- Déplacement sur +/- 7 bits
L’adresse effective est égale au compteur programme courant plus un
déplacement codé sur 8 bits. L’instruction est codé sur 3 octets, deux octets sont
réservés à l’instruction(code + post-octet), le dernier octet contient le déplacement.
Exemple :
LDA $F0Pc  chargement de l’accumulateur A avec le contenu mémoire dont
l’adresse est la valeur de PC + $ F0.

Post-octet = $8C :
 b7 = 0  b4 = 0  indexé direct.
 b6.b5  indifférent.
 b3.b2.b1.b0 = 1.1.0.0  le déplacement sur 8 bits (en complément à deux).

Ben Soussia Afif Page 15 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

5-2- Déplacement sur +/- 15 bits


L’adresse effective est égale au compteur courant plus un déplacement codé sur
deux octets. Ce mode d’adressage présente l’avantage de permettre des déplacements
sur tout l’espace mémoire du microprocesseur.
Exemple :
ADDA $9000, PC  addition du contenu mémoire dont l’adresse est la valeur du PC
+ $ 9000 et de l’accumulateur A, le résultat est dans A.

Post-octet = $8D :
 b7 = 0  b4 = 0  indexé direct.
 b6.b5  indifférent.
 b3.b2.b1.b0 = 1.1.0.1  le déplacement sur 16 bits (en complément à deux).
Étiquette Localisée:
Dans ce cas, la syntaxe assembleur n’utilise pas un déplacement mais une
étiquette localisée située à +/-128 octets de l’instruction suivante (déplacement sur 8
bits) ou n’importe où sur l’espace mémoire du microprocesseur (déplacement sur 16
bits). Comme précédemment l’adresse effective est égale au compteur programme plus
un déplacement codé sur 8 ou 16 bits. L’instruction est codée sur trois ou quatre
octets.
La syntaxe assembleur contient le mnémonique de l’instruction, le nom de
l’étiquette localisée plus la base. L’assembleur calcule la valeur du déplacement en
fonction de la position de l’étiquette.
Exemple :
LEAX ETIQ, PCR  chargement du registre d’index X avec l’adresse effective qui est
donnée par la position de l’étiquette par rapport au compteur programme courant.
On prend Adr = $2000
ETIQ = $2015 xxxx = 0011

Ben Soussia Afif Page 16 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Post-octet = $8D :
 b7 = 0  b4 = 0  indexé direct.
 b6.b5  indifférent.
 b3.b2.b1.b0 = 1.1.0.1  le déplacement sur +/-15 bits (en complément à deux).
VIII- Adressage indexé indirect
Le mode d’adressage indexé présente l’avantage de pouvoir travailler en
indirection.
Dans ce cas on accède à l’adresse effective en transitant par une adresse
intermédiaire.
On peut donc écrire :
Adresse effective = contenu mémoire dont l’adresse de base est la somme de
l’index + le déplacement.
Tous les modes d’adressage indexé peuvent travailler en indirection sauf les
modes auto-incrémentation/décrémentation par un (ce qui est normal car on ne gère
ici que des octets) et le mode déplacement constant codé sur 5 bits.
La syntaxe assembleur utilisée pour définir l’indirection est la même que celle
de l’adressage étendu : « [ ] ».
Les instructions sont codées sur deux octets, le premier définit le code
opératoire (identique à l’index simple), le second le type de déplacement, le type de la
base et l’indirection (tableau I).
1- Déplacement nul
Exemple :
LDA [ ,X]  chargement de A avec le contenu mémoire dont l’adresse est le
contenu de (X, X+1).

Ben Soussia Afif Page 17 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Post-octet =$94:
 b7 = 1  b4 = 1 mode indexé indirect.
 b6.b5 = 0.0  index X.
 b3.b2.b1.b0 = 0.1.0.0  déplacement nul.
2- Auto- incrémentation / décrémentation de l'index
Le mode indexé indirect travaille seulement en
auto-incrémentation/décrémentation par deux, ce qui est normal car seul ce mode
permet de gérer des cases.
Exemple :
ADDA [ ,U++]  addition de l’accumulateur A et du contenu mémoire dont l’adresse
se trouve pointée par U, U+1, le résultat est dans A.

Post-octet =$D1:
 b7 = 1  b4 = 1 mode indexé indirect.
 b6.b5 = 1.0  index U.
 b3.b2.b1.b0 = 0.0.0.1  post-auto-incrémentation de 2.
3- Avec déplacement constant
Les déplacements constants sont codés sur 8 bits ou 16 bits (en complément à
deux). L’indirection n’est pas possible pour un déplacement codé sur 5 bits.
Exemple :

Ben Soussia Afif Page 18 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

LDA [$2000, X]  chargement de l’accumulateur A avec le contenu mémoire dont


l’adresse est pointée par X+ $2000.

Post-octet =$99:
 b7 = 1  b4 = 1 mode indexé indirect.
 b6.b5 = 0.0  index X.
 b3.b2.b1.b0 = 1.0.0.1  déplacement constant sur +/- 15 bits.
4- Déplacement accumulateur
Comme dans l’adressage indexé simple, le déplacement est contenu dans les
accumulateurs A, B ou D (en complément à deux).
Exemple :
LDU [D, Y]  chargement de U avec le contenu dont l’adresse mémoire est pointée
par le contenu de Y + celui de D.

Post-octet =$BB:
 b7 = 1  b4 = 1 mode indexé indirect.
 b6.b5 = 0.1  index Y.
 b3.b2.b1.b0 = 1.0.1.1  déplacement accumulateur D =(A :B) (en complément à
deux).
5- Base = compteur programme

Ben Soussia Afif Page 19 sur 20


Chapitre II : Modes d’adressage du 6809 CSFE De Sousse

Si la base est le compteur programme lui-même, les déplacements sont codés


sur 8 ou 16 bits en complément à deux, l’indirection est possible dans ce deux cas.
Exemple :
LDA [ $F000, PC]  chargement de A avec la valeur dont l’adresse est pointée par
la valeur courante du PC + $F000.

Post-octet = $9D:
 b7 = 1  b4 = 1 mode indexé indirect.
 b6.b5 = indifférents.
 b3.b2.b1.b0 = 1.1.0.1  déplacement codé sur +/-15 bits.
Comme pour l’adressage indexé direct, on peut utiliser dans ce mode non pas un
déplacement mais une étiquette localisée, pour ce qui est de la syntaxe assembleur.
Exemple :
LDA [TABLE, PCR]  chargement de A avec la valeur dont l’adresse est pointée par
TABLE.

Post-octet = $9D:
 b7 = 1  b4 = 1 mode indexé indirect.
 b6.b5 = indifférents.
 b3.b2.b1.b0 = 1.1.0.1  déplacement codé sur +/-15 bits.

Ben Soussia Afif Page 20 sur 20

Vous aimerez peut-être aussi