0 évaluation0% ont trouvé ce document utile (0 vote) 127 vues13 pagesMode D Adressage
Copyright
© © All Rights Reserved
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
4.2. LES DIFFERENTS MODES D’ADRESSAGE DU 68¢9
Tout d’abord qu’appelle-t-on mode d’adressage ? Nous avons vu au
début de ce chapitre (paragraphe 1) un exemple (addition de deux
nombres) ou nous disions que pour connaitre un nombre x, il fallait
spécifier son adresse sur 16 bits (ou deux octets).
Le fait de définir x par la donnée de son adresse constitue un mode
d’adressage : nous appellerons ce mode ” adressage étendu” (car on peut
accéder directement, grace 4 lui, a la totalité de l'espace adressable du
6809). Donc, par definition, un mode d’adressage est un moyen d’accé-
der 4 une case-mémoire donnée.
4.2.1. L'adrossage implicite
L’adressage implicite n’est pas en réalité un véritable mode d’adres-
sage. En effet aucune adresse n’est nécessaire pour définir les instruc-
tions correspondant 4 ce mode. Le code-opération de ces instructions
tient, comme c’est toujours le cas du 6869, sur un ou deux octets. On
peut mentionner parmi elles les instructions portant directement sur le
contenu de registres internes (instructions de décalage par exemple), les
instructions de retour de sous-programme ou d’interruption, les interrup-
tions logicielles, les instructions d’échange ou de transfert de registre
interne, les opérations sur la pile. Notons que ces deux derniéres sortes
d’instructions nécessitent deux octets, l'un pour le code-opération
proprement dit, l’autre pour sélectionner les registres concernés (registres
destination et source pour les instructions de transfert de registre et
registres & sauvegarder ou charger dans le cas d’instructions portant sur
la pile).
Ce dernier octet se nomme ™ post-octet”’. Nous reviendrons sur ce
point dans le chapitre traitant du jeu d’instructions du 6809.
Exemples :
ASLA.
RTI
SWI
TFR A,B
EXG U, S
PSHS A, B, X
444.2.2. L’'adressage immédiat
Dans ce mode d’adressage les instructions comportent deux
parties :
— le code-opération proprement dit qui est, comme d’habitude,
codé sur un ou deux octets,
— Vopérande qui comprend, selon le cas, un ou deux octets selon
que l’instruction considérée porte sur des mots de 8 bits ou de 16 bits.
Cette opérande correspond tout simplement 4 la donnée sur laquelle
porte l’instruction considérée.
Exemple 1: Soit a additionner la valeur $05 au contenu de
Paccumulateur A.
Liinstruction sera la suivante:
ADDA # $85
Le symbole ” #” précise a l’assembleur que !’on est dans le cas d’un
adressage immédiat.
Exemple 2: Soit a comparer le contenu du registre S avec la valeur
16 bits $12F3.
L’instruction sera la suivante
CMPS # $12F3
4.2.3. L’adressage étendu
Ce mode d’adressage a déja été rencontre dans ce chapitre.
L’opérande est ici une adresse de 16 bits (donc 4 chiffres hexadécimaux).
La donnée située a cette adresse (et parfois 4 la suivante dans le cas
d’instructions portant sur des mots de 16 bits) est utilisée par l’instruc-
tion considérée.
Exemple 1: Soit 4 additionner le contenu de la case-mémoire d’adresse
$53F8 4 laccumulateur B.
instruction s’écrit :
ADDB $53F8
45Grace a cet adressage on peut (nous l’avons déja dit) acceder a la
totalité de l’espace-mémoire du 6809.
Exemple2: Soit a charger le registreS avec le contenu des cases-
mémoire d’adresses $53F8 et $53F9.
On écrira:
LDS $53F8
4.2.4. L'adressage direct
Ce mode d’adressage est similaire 4 l’adressage étendu sauf qu’ici
& Vopérande tient sur un seul octet. Elle permet done d’adresser un espace-
mémoire de 256 octets. Dans beaucoup de microprocesseurs (et notam-
ment dans le cas du 6562) cet espace est situé en page-zéro qui est la
premiére page de 256 octets adressable par un microprocesseur (adresses
£4 © comprises entre 0 et 255). Dans le 6809 il existe un registre spécial DP
© (registre de page directe : ” direct-page register”) qui permet de spécifier
>» quelle page est utilisée dans ce mode d’adressage. Cela permet donc
. od ‘adresser les_64 K octets du 6809 tout en garantissant une rapidité
A fy execution du code due au fait que l’opérande n’est plus codée que sur
on WOU Sete |e gckchsadpatallis tele micre 5156 228 cet ek pan Spay
* SS 256% PAM | dans le rine or
Le contenu du registre DP fixe done l’octet de poids fort def
Vadresse 16 bits tandis que l’opérande de l’instruction considérée en
fournit octet de poids faible.
ah tia hex
Exemple: Soit a charger 'accumulateur D avec le contenu des cases-
mémoire d’adresses $12 et $13. Remnorques pour frxen DP a uns
age dans
Yrespord & fo page $
On écrira:
b
LDD <$12_—— avec: DP = Sag A For TER om ra
8) dons le tear bp
Le symbole ”<” est destiné 4 renseigner l’assembleur qu’il est en
présence d’un mode d’adressage direct
Notons qu’aprés une mise sous tension du 6809 le contenu du
registre DP est toujours a zéro. Si donc l'utilisateur ne désire s’intéresser
qu’a la page zéro, il lui suffira de ne pas s’occuper de ce registre.
464.2.5. L'adressage relatif
L’adressage relatif est utilisé uniquement pour les instructions de
branchement conditionnel (le branchement n’a lieu que si la condition
désirée est réalisée). Ces instructions sont l’€quivalent du IF...THEN en
BASIC. Afin de bien saisir le fonctionnement de ce mode d’adressage, le
mieux est de donner un exemple.
Soit le petit programme suivant:
ADDA $53F8
BEQ FIN
FIN SWI
On effectue I’addition du contenu de la case-mémoire d’adresse
$53F8 avec l’accumulateur. L’instruction BEQ veut dire ” branchement
si égalité”. Ici il y a donc bhranchement vers FIN si le contenu de
l'accumulateur aprés addition est egal a zéro. Le bit Z du registre de
condition est alors égal a 1. Sinon, le programme continue et exécute les
instructions présentes aprés le BEQ. Supposons que le début du
programme (instruction ADDA) soit placé a I’adresse $0200. Nous
donnons ci-dessous le contenu de la mémoire a partir de cette adresse ;
j 4
so20s. =| ADC ADC
. $0201 $F8 SFB
nea |_|
. $202 $53 $53
eplantasiom $6283 BEQ | BEQ | yo
- . i se2n4 FIN = $18 te
Z dial en “ |
sas | SWI Swi
- 4
Nous n’avons pas introduit les codes-opérations des instructions
ADDA, BEQ et SWI afin que le programme soit plus explicite.
47L’étiquette FIN est située a l’adresse $9215.
Lors d’un branchement relatif on charge l’octet suivant l’instruction
de branchement par la différence (en binaire) qui existe entre la valeur de
ladresse_d’arrivée (ici $0215) et la valeur du registre PC pointant sur
Vir instruction qui suit immédiatement, Je BEQ, donc ici $0205. Nous char-
gerons sven gel sui aun meémoire d’adresse $0204 par la valeur
hexadécimale:
$6215 — $6205 = $16
re ed qualte TRIN 0 “
Le contenu de la case-mémoire d’adresse $0204 aurait trés bien pu
étre négatif (avec la notation en complément a 2) si le branchement avait
dai étre effectué vers l’arriére.
Par exemple, pour un branchement en $020, le contenu de la case-
mémoire d’adresse $6204 aurait été:
$0200 — $6265 = $-05
= $FB
Nous venons d’envisager des branchements relatifs courts pour
lesquels d’une part le code-opération est codé sur un octet et d’autre part
le déplacement possible est codé sur un octet également ce qui autorise
des déplacements compris entre 127 (branchement relatif vers l’avant) et
—128 (branchement relatif vers l’arriére).
Il existe également dans le 6869 des instructions de branchement
relatif longs. Dans ce cas, le code opération cst codé sur deux octets ct la
valeur du déplacement également ce qui permet d’accéder a la totalité de
Vespace adressable du 6809.
Naturellement lutilisation de ce type d’instructions se fait au détri-
ment de la rapidité d’exécution du code assembleur 6809.
La syntaxe assembleur relative au mode d’adressage relatif est la
suivante:
a) Si on utilise unc étiquette:
BEQ FIN (cas d’un branchement court)
LBEQ FIN (cas d’un branchement long)
48b) Si le déplacement est connu on peut écrire:
BEQ ++ (cas d‘un branchement court)
LBEQ ++$12F6 (cas d’un branchement long)
La valeur du déplacement ne dépend absolument pas de I’adresse
d'implantation en mémoire du programme. L’adressage Telatif permet
donc d’avoir des programmes translatables (qui fonctionnent a n’importe
quelle adresse-mémoire), ceci 4 condition que les branchements soient
tous relatifs a l'intérieur du programme. En particulier il ne doit pas y
avoir de sauts inconditionnels ni d’appels de sous-programmes internes.
Notons que nous verrons un peu plus loin un mode d’adressage trés utile
pour écrire des programmes relogeables et qui est I’adressage relatif au
PC.
4.2.6. Les modes d’adressage indexés
Ces modes d’adressages font du 6899 un microprocesseur extréme-
ment puissant. Ils peuvent se décomposer en quatre grands groupes qui
chacun se divisent en sous-groupes:
— les modes d’adressage indexés a déplacement constant,
— les modes d’adressage indexés par accumulateur,
— les modes d’adressage auto-incrémentés et auto-décrémentés,
— Ics modes d’adressage relatifs au comptcur ordinal (PC).
Nous allons examiner chacun de ces grands groupes a son tour
mais nous allons tout d’abord décrire les caractéristiques communes a
tous les modes d’adressages indexés.
Le code-opération des instructions possédant ce mode d’adressage
est, comme toujours, codé sur un ou deux octets. Tout comme dans le
cas des instructions de transfert de registre les modes d’adressage
indexés nécessitent un post-octet destiné a renseigner le 6899 sur le type
exact d’adressage a utiliser. Nous donnerons 4 la fin de ce paragraphe un
tableau regroupant les différents modes d’adressage indexés ainsi que les
post-octets correspondants.
49a) Les modes a déplacement constant
Dans ce type de mode d’adressage, I’adresse de la donnée consi-
dérée est obtenue en ajoutant le contenu d’un registre interne du 6809 a
un déplacement fixe.
Ce déplacement peut étre:
[ * nul et dans ce cas l'adresse de la donnée considérée correspond au
contenu du registre spécifié dans l’opérande. L’instruction proprement
dite comprend donc le code-opération plus le post-octet qui contient
un code de deux bits permettant de connaitre le registre par rapport
auquel se fait l’indexation (X, Y, U ou S).
Exemple:
LDA ,X
(* Codé sur 5 bits et dans ce cas l’adresse de la donnée considérée corres-
| pond au contenu du registre spécifié dans l’opérande additionné au
deéplacement compris entre —16 et +15 spécifié dans lopérande.
Liinstruction proprement dite comprend donc le code-opération plus
le post-octet qui contient d’une part le code de deux bits dont nous
avons parlé ci-dessus, d’autre part le déplacement codé sur 5 bits.
Exemple:
LDA 12;X
“+ codé sur 8 bits ct dans ce cas l’adresse de la donnée considérée est
| obtenue en faisant la somme du contenu du registre d'index et du
déplacement codé sur 8 bits. Dans ce cas l’instruction proprement dite
comporte le code-opération, le post-octet comportant le code de 2 bits
dont nous avons parlé ci-dessus et un octet donnant le déplacement
sur 8 bits.
Exemple: Lafec a dc
LDA’ 182, x
En notation en complément a deux le déplacement est compris entre
—128 et 127.
50* codé sur 16 bits. Le fonctionnement de ce mode d’adressage est simi-
laire au précédent sauf qu’ici le déplacement proprement dit nécessite
16 bits donc 2 octets.
Exemple :
LDA $12F5,X
En notation avec complément a deux le déplacement est compris entre
—32768 et 32767.
b) Les modes indexés par accumulateur
Dans ce cas le contenu des accumulateurs A, B ou D sert comme
déplacement. L’adresse de la donnée considérée est donc obtenue en
ajoutant le contenn de Pun de ces accumulateurs avec le contenu du
registre d’index spécifié.
Comme dans les modes a déplacement constant, le post-octet
contient un code de 2 bits permettant de sélectionner le registre d’index
considéré.
Si l'accumulateur est A ou B, le champ adressable par variation du
contenu de ces registres sera une page de 256 octets. Par contre si
l'accumulateur est D on pourra accéder la totalite de l’espace adres-
sable du 6809.
Exemple:
LDA A,X
LDD DU
c) Les modes auto-incrémentés et auto-décrémentés
Ces modes d’adressage sont extrémement utiles pour I’écriture de
boucles.
Le registre concerné contient l’adresse de l’opérande. En mode
auto-incrémenté ce registre pointe sur une donnée et effectue le traite-
ment demande par l’instruction considérée. Il est ensuite incrémenté
automatiquement de une ou deux unités ce qui lui permet de pointer 4
Vadresse de la donnée suivante.
51L’adressage auto-incrémenté d’une unité est utilisé lorsque l’on veut
accéder par exemple 4 des tables d’octets. Au contraire, l’adressage auto-
incrémenté de deux unités est utilisé lorsque l’on veut accéder a des
tables de mots de 16 bits.
Dans le cas de I’adressage auto-décrémenté, le contenu du registre
es 7 décrémenté de une ou deux unités suivant le cas. Il
contient ensuite l’adresse de la donnée désirée.
Dans tous ces modes le post-octet contient le code de deux bits carac-
téristique du registre d’index utilisé.
Exemple:
STX 6,U+ (adressage auto-incrémenté de une unité)
STIX 6,U++ (adressage auto-incrémenté de deux unites)
LDD ,-Y (adressage auto-décrémenté de une unite)
LDD ,—-Y (adressage auto-décrémenté de deux unités)
d) Les modes d’adressage relatifs au compteur ordinal (PC)
Ces modes d’adressage fonctionnent exactement comme les modes
a déplacement constant sur 8 ou 16 bits sauf que le registre d’index est
ici tout simplement le compteur ordinal. Ceci a comme principal avan-
lage de permetire l'écriture de programmes fonctionnant a n‘importe
quelle adresse mémoire et ceci sans modification.
L’adresse de l’opérande est obtenue en faisant la somme du dépla-
cement sur 8 ou 16 bits contenu dans l’opérande et le contenu du registre
PC.
Exemple:
LDA 26,PCR (déplacement sur 8 bits)
LDA 23F4,PCR (déplacement sur 16 bits)
Le tableau suivant résume les différents modes d’adressage indexés
disponibles sur le 6809.
52T T
]
| Type Forme Syntaxe Past ontet
|
déplacement constant Obits 1RROO100
déplacement constant 5 bits ORRnnnnn
déplacement constant 8 bits 1RRO10006
déplacement constant 16 bits 1RRO1001
déplacement accumulateur_ A 1RROG110
déplacement accumulateur B | 1RROO101
deplacement accumulateur 1RRO1011
auto-incrémenté part | 1RROGIGD
auto-incrementé par 2 | 1RROGOO1
auto-décrémenté par | 1RROOO10
auto-décrémenté par2 1RROOO11
relatif au PC 8 bits | 1xx91100
relatif au PC 16 bits | 1901101
Dans ce tableau, *nnnnn” représente une valeur binaire codée sur
5 bits et “xx” signifie “n’importe quelle valeur”.
Le code "RR” est le code de deux bits dont nous avons parlé
précédemment et chargé de spécifier le registre d’'index utilisé.
Ainsi si:
RR = OH le registre d’index est X
RR = 01 le registre d’index est Y
RR = 1 le registre d’index est U
RR — 11 le registre d’index est S ‘
4.2.7. Les modes d’adressage indirect /
Le 6899 posséde de trés nombreux modes d’adressage indirects qui
sont dérivés des modes d’adressage indexés décrits précédemment.
Mais tout d’abord voyons ce que I’on appelle par ” adressage indi-
rect”. Au lieu que l’adresse spécifiée dans l’opérande donne la donnée
sur laquelle porte l’instruction, elle en donne |’adresse. L’adresse effec-
tive de la donnée est donc contenue dans la case-mémoire spécifi¢e par
l'opérande ainsi que dans la suivante puisqu’il faut deux octets mémoire
pour spécifier une adresse.
53Nous verrons un exemple un peu plus loin.
Nous avons donc dit que les modes d’adressage indirects sont déri-
vés des modes d’adressage indexés. Nous allons donc les passer en revue.
a) Les modes indirects indexés 4 déplacement constant
Tout comme il existait des modes d’adressage indexés a déplace-
ment constant il existe des modes d’adressage indirect indexés a déplace-
ment constant.
Dans ce éas le contenu du registre spécifié ajouté au déplacement
(sur 8 bits ou 16 bits uniquement) donne |’adresse de I’adresse de la
donnée concernée.
Exemple :
LDA (125,X)
Les parenthéses indiquent a l’assembleur qu’il est en présence d’un
mode d’adressage indirect.
b) Les modes indexés par accumulateur
Ici le contenu du registre spécifié additionné au contenu de
Vaccumulateur concerné donne l"adresse de l'adresse de la donnée.
Exemple:
LDX {A,S)
c) Les modes indirects auto-incrémentés et auto-décrémentés
Seuls les modes incrémentés et décrémentés de deux unités sont
autorisés. Cela se congoit aisément puisqu’il faut 2 octets mémoire pour
définir une adresse.
A chaque exécution d’une instruction, le contenu du registre spéci-
fié est incrémenté (ou décrémenté) de deux unités de maniére a aller poin-
ter sur I'adresse de lI’adresse suivante.
Exemple:
LDA (,S++)
54d) Les modes indirects relatif au PC
Le contenu du compteur ordinal, ajouté 4 un déplacement constant,
donne l’adresse de l’adresse de la donnée nécessaire a l’instruction.
Exemple :
ROL (128, PCR)
e) L’adressage étendu indirect
Ce mode est le seul qui ne soit pas dérivé d’un mode indexé.
Tout comme il existe un mode d’adressage étendu, il existe un mode
d’adressage étendu indirect. Le nombre spécifié entre crochets donne
Vadresse de l’adresse de la donnée concernée.
Exemple: Soit Vinstruction :
IMP. ($53F8)
Le microprocesseur, lorsqu’il rencontre l’instruction JMP de saut
inconditionnel, se branche a l’adresse $53F8 et charge son compteur
ordinal PC avec les contenus des: cases-mémoire d’adresses $53F8 et
$53F9 (l’octet de poids faible du PC est stocké dans la premiére adresse :
$53F8). Il y a donc branchement 4 I’adresse $AC26.
uMP
|
SFB
$53
$53F8 $20
$53F9 SAC
a -
SAC20
55Nous allons maintenant donner un tableau regroupant les différents
modes d’adressage indirects disponibles sur le 6809.
f
Type Forme Syntaxe ret
déplacement constant Obits (GR) 1RR10100
déplacement constant 8 bits (n.R) 1RR11000
déplacement constant 16 bits (n,R) 1RR11001
déplacement accumulateur | A | (AR) 1RR10110
déplacement accumulateur | 8 (B,R) 1RR10101
déplacement accumulateur | D (D.R) 1RR11011
auto-incrémenté par 2 (R++) 1RR10001
auto-incrémenté par2 (--R) 1RR10011
relatif au PC 8 bite | (n,PCR) 19111199
relatif au PC 16 bits (n,PCR) 1xx11101
étendu indirect (n) 10011111
56
Vous aimerez peut-être aussi