Mode d’adressage index´e
IUtilit´e : permet d’acc´eder `a des tables de valeurs.
IPrincipe : on utilise un registre d’index, pr´ealablement initialis´e, qui
pointe sur la table (´equivalent `a un pointeur en C).
ISymbolis´e par la pr´esence de ” ,x” ou ” ,y” dans le champ
op´erande.
IExemple :
1ldx #$3542
2ldaa 0,x
IOn pourra acc´eder aux valeurs au dessus et en dessous en
incr´ementant (inx ou iny) et d´ecr´ementant (dex ou dey) l’index.
9/20
Mode d’adressage index´e
IOn peut lui ajouter un offset optionnel (valeur constante, ou l’un
des 2 accumulateurs)
IExemple :
1ldx #$3540
2ldaa 3,x
IOn pourra utiliser ce mode avec d’autres instructions, par exemple :
Istaa 0,x : sauvegarde la valeur de A `a l’adresse indiqu´ee par X.
Icmpb 3,y : compare la valeur de B avec la valeur se trouvant `a
l’adresse indiqu´ee par Y, plus 3.
IRemarque : l’offset est limit´e `a 255.
10/20
Mode d’adressage index´e : application
IAcc`es `a une table de 10 valeurs, situ´ee `a l’adresse TABLE
1DEBUT ldx #TABLE ; initialisation index
2encore ldaa 0,x; lecture valeur
3bsr TRAITEMENT ; appel sous prog.
4inx ; incr´ementation X
5cpx #TABLE+10 ; est−on arriv´e au bout ?
6bne encore ; si non, on continue
7... ; la suite ...
IEquivalent `a :
1char ∗p;
2for(p= &table;p<table+10; p++ )
3traitement(∗p);
(Rappel : en C le type char correspond `a un octet.)
11/20
Adressage index´e pr´e/post incr´ement´e
ILors de la lecture d’une table, on pourra supprimer l’instruction
d’incr´ementation / d´ecr´ementation du registre d’index (X ou Y)
IExemples :
Ildaa 0,x+ (post-incr´ementation)
Istab 5,+x (pr´e-incr´ementation)
Ildaa 50,x- (post-d´ecr´ementation)
Istab 19,-x (pr´e-d´ecr´ementation)
12/20