LES MODES D'ADRESSAGE
PREM/TERM
LE MICROCONTROLEUR
Microcontroleur - adressage Lycée SARDA GARRIGA 1/3 S SI Section GENIE ELECTRIQUE
Le mode d'adressage est un élément important ; c'est une étape qu'il faut bien comprendre car toute la programmation en
découle. Je vais vous expliquer les différentes manières de manipuler les données dans la mémoire.
Il existe 6 modes d'adressage distincts, chacun a sa propre syntaxe : attention, c'est une source fréquente d'erreurs.
1. Adressage immédiat
La donnée est dans l'instruction. En assembleur, on indique que l'on utilise une donnée immédiate (et non pas une
adresse) par le symbole # (dièze). Dans l'exemple suivant, on charge la valeur décimale 100 dans l'accumulateur A.
Exemples : LDAA #100
Avant Après
A 03 64
Note : on exprime le contenu des registres en hexadécimal pour une conversion plus facile en binaire et
c'est plus court à écrire. On a donc ici écrit directement la valeur 100=(64)hex dans A ; la valeur (03)hex
est quelconque.
Deux autres exemples, où l'on charge la valeur hexadécimale puis binaire d'un nombre :
LDX #$E000
Avant Après
X FFFF E000
LDAB #%01001001
Avant Après
B B7 49
Vous aurez noté le symbole % qui désigne une valeur binaire. L'écriture binaire, bien qu'un peu lourde, peu se révéler
plus pratique pour réaliser un masque. Cependant, nous utiliserons surtout l'écriture hexadécimale.
2. Adressage direct
Dans ce mode, l'instruction contient l'adresse 8 bits de l'opérande. Cette fois ci, on ne prend pas la valeur telle quelle car il
n'y a plus de # ; le nombre écrit n'est pas la valeur à charger mais le contenu de la position mémoire d'adresse $25. Hop,
un exemple :
LDAA $25
Avant Après
A 3D 2A
A la position mémoire $25, il y a la valeur suivante :
2A
L'espace d'adressage est bien sûr limité à 1024 octets, de ($0000 à $03FF) c'est à dire la RAM. Dès lors, dès que vous
aurez une variable à aller chercher en RAM, vous utiliserez cette instruction.
Compris ? Allez, un dernier exemple plus dur J :
Microcontroleur - adressage Lycée SARDA GARRIGA 2/3 S SI Section GENIE ELECTRIQUE
LDY $1A
Avant Après
Y 264B 351F
A la position mémoire $1A, il y a la valeur suivante :
35
A la position mémoire $1B, il y a la valeur suivante :
1F
Petite explication : Y étant un registre de 16 bits, il faut qu'il y ait la même nombre de bits ; les bits de poids faibles du
registre Y seront complétés en prenant la valeur à l'octet suivant dans la mémoire (l'octet 1B).
3. Adressage étendu
Ah, Ah J ! bien ici c'est pareil que l'adressage direct sauf que l'adresse est cette fois ci codée sur 16 bits. Cela étend
l'espace d'adressage à 64Ko. Souvenez vous ces chapitres précédents : le bus d'adresse d'un 68HC11 est de 16 bits, donc
celui-ci peut gérer une mémoire externe (RAM, EEPROM etc...) de 64Ko maximum, soit 65536 octets. Un petit exemple
pour la route, un peu compliqué, il utilise le registre D, c'est à dire A + B :
LDD $425A
Avant Après
D 0000 351F
A la position mémoire $425A, il y a la valeur suivante :
35
A la position mémoire $425B, il y a la valeur suivante :
1F
Toujours pareil, le registre D faisant 16 bits on prend la donnée à l'adresse puis à l'adresse+1. Nous avons donc A qui
contient $35 et B qui contient $1F.
4. Adressage inde
Dans ce mode, l'adresse de l'opérande est obtenue par addition du contenu d'un registre d'index (X ou Y) désignée dans
l'instruction, et d'une valeur non signée 8 bits contenue dans l'instruction. Un exemple pour clarifier tout ça :
LDAA X+0
Avant Après
A 5B 42
Dans le registre X il y a la valeur suivante :
425A
A la position mémoire $425A, il y a la valeur suivante :
19
Là on cherche à l'adresse X+0, soit X. En assembleur, on marquera X simplement ; marquer X+0 fonctionne aussi mais ça
sert à rien. Un dernier exemple :
STAB Y+2
Dans le registre B il y a la valeur suivante :
ED
Microcontroleur - adressage Lycée SARDA GARRIGA 3/3 S SI Section GENIE ELECTRIQUE
Dans le registre Y il y a la valeur suivante :
4355
Contenu des positions mémoires avant :
Adresse Donnée
4355 23
4356 58
4357 00
Contenu des positions mémoires après :
Adresse Donnée
4355 23
4356 58
4357 ED
Bon, ça me parait assez clair comme cela ; on va écrire la donnée à la position mémoire pointée par Y plus 2. Cela donne
4355 (donnée dans le registre Y) + 2 (index) = 4357. La donnée à écrire est ED, situé dans l'accumulateur B.
5. Adressage inhérent
Dans ce mode, l'opérande est toujours un registre et son nom est codé directement dans le code opératoire de l'instruction.
C'est assez simple à comprendre, et je pense que l'exemple suivant suffira.
ABA
Avant Après
A 1B 22
Dans l'accumulateur B, il y a la valeur suivante :
07
6. Adressage relatif
Ce mode n'est utilisé qu'avec les instructions de rupture de séquence. Le déplacement relatif (valeur signée) codée dans
l'instruction est ajoutée au contenu du compteur programme PC pour définir l'adresse de branchement, si la condition
testée est vrai. Le déplacement relatif est codé sur 8 bits, l'amplitude du saut par rapport à PC est de 126 adresses en
arrière et de 129 adresses en avant. On peut comparer ça à un GOTO (langage Basic). Pas d'exemple car il s'agit, si vous
regardez la liste des mots clés dans le chapitre suivant, de toutes les instructions de branchement (branch).
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !