Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : Assembleur - modes d'adressage indexés
(Article écrit par Little Zeus et extrait d'A-News (Amiga News) - janvier 1989)
|
|
Chers Amiga-beginners, j'ai deux nouvelles à vous annoncer, une bonne et une mauvaise.
La bonne : voici le temps pour vous de devenir des Amiga-Users ; après les
modes d'adressage absolus et immédiats, nous
voyons maintenant les différents modes d'adressage indexés. Nous illustrerons ce mode par une petite routine qui aura
pour but de retourner une image ou autrement dit, de produire un effet de miroir.
La mauvaise nouvelle : Little Zeus a le regret d'informer ses chers lecteurs de son départ, mais celui-ci n'est pas définitif.
Pour l'instant, je suis encore là, donc commençons.
Mode d'adressage indirect
Le mode d'adressage indirect peut se trouver sous trois formes : la
première consiste à prendre le contenu du contenu d'un registre d'adresse pour le mettre dans une case mémoire ;
le second consiste à mettre une valeur dans le contenu du contenu du registre d'adresse ; enfin, le troisième combine les
deux précédents et met le contenu du contenu d'un registre d'adresse dans le contenu du contenu d'un autre.
Tout ceci doit paraître un peu vague ; pour remédier à cela, appuyons-nous sur un exemple : Move.l #10,a0 Move.l #20,(a0).
Première chose à remarquer, le mode d'adressage indirect se reconnaît par les deux parenthèses qui sont placées de part
et d'autre du registre d'adresse concerné. Deuxième chose, la séquence précédente est équivalente à Move.l #20,10.
Mais alors, pourquoi utiliser un mode d'adressage qui nécessite deux fois plus de lignes qu'un autre ? La réponse émergera
lorsque nous étudierons la routine qui renverse les images.
Un deuxième exemple : Move.l #5,10 Move.l #10,a0 Move.l #20,a1 Move.l(a0),(a1) est équivalent à Move.l #5,20.
Les options du mode d'adressage indirect
Le mode d'adressage indirect possède différentes options ; nous en verrons trois : l'indirect postincrémenté, l'indirect
prédécrémenté et enfin l'indirect avec déplacement.
Les deux premiers modes sont très utiles dans des boucles, le postincrémenté incrémente, comme son nom l'indique, le contenu
du registre après avoir fait le transfert : Move.l #10,(a0)+ est équivalent à Move.l #10,(a0) Add.l #4,a0. Attention,
Move.w #10,(a0)+ est équivalent à Move.w #10,(a0) add.l #2,a0. Nous noterons par conséquent que la postincrémentation est
fonction de la longueur de l'adressage utilise (octet, mot ou long mot).
Le principe de la prédécrémentation est assez similaire sauf qu'au lieu d'incrémenter on décrémente et cette decrémentation
se fait avant le transfert. Un exemple : Move.l #10,-(a0) est équivalent à Sub.l #4,a0 Move.l #10,(a0).
Enfin, l'adressage avec déplacement ajoute une valeur au contenu du registre d'adresse (des exemples sont donnés dans la
routine ci-dessous).
La routine
Passons à la routine proprement dite, son principe est le suivant : nous allons successivement prendre mot par mot les données
d'une image chargée en mémoire à partir de l'adresse "picdata", ensuite, nous les mettrons successivement dans les plans de bits,
et ce ligne par ligne. Il apparaît donc évident que nous allons devoir prendre les plans de bits à l'envers, C'est-à-dire de
l'adresse de poids le plus fort à l'adresse de poids le plus faible.
Nous allons maintenant utiliser à la fois les modes d'adressage indirects indexés avec postincrémentation et déplacement.
On utilise le premier pour pointer automatiquement sur le mot suivant et le second à cause de la structure de l'image IFF
qui fait se succéder 40 mots du plan de bits 1, 40 mots du plan de bits 2 et ainsi de suite (pour plus d'informations, rapportez-vous
à l'article sur l'image IFF).
Pour rendre cette routine opérationnelle, il suffit de substituer la routine précédente aux lignes qui affichent l'image
normalement (prenons par exemple la routine dans l'article
sur l'image IFF et modifions-là comme précédemment dit !).
Ainsi s'achève cet article tout particulièrement consacré aux débutants. Maintenant, vous, ex-débutants vous êtes en mesure
de reprendre les routines des numéros précédents et de les comprendre mieux, voire complètement !
|