Microcontroleur

publicité
LES MODES D'ADRESSAGE
PREM/TERM
LE MICROCONTROLEUR
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
X
Avant
Après
FFFF
E000
LDAB #%01001001
B
Avant
Après
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
A
Avant
Après
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
1/3
S SI
Section GENIE ELECTRIQUE
LDY $1A
Y
Avant
Après
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
D
Avant
Après
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 indexé
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
A
Avant
Après
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
2/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
A
Avant
Après
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).
Microcontroleur - adressage
Lycée SARDA GARRIGA
3/3
S SI
Section GENIE ELECTRIQUE
Téléchargement