samedi 23 août 2014

Modes d'adressage [fr]

Étudions maintenant quelques modes d'adressage.

Qu'est-ce donc déjà ?

Nous avons vu que nous pouvions stocker des données en mémoire via des labels. Et bien, il est tout à fait possible ensuite pour le CPU de lire ou d'écrire dedans. Pour cela, nous allons utiliser un simple move qui va donc bouger un contenu mémoire dans par exemple un registre de notre choix.

Ce move sera accompagné d'un des nombreux mode d'adressage disponible par nos 68k, surtout sur les 68020+. A partir de ce CPU, les ingénieurs en ont en effet rajouté une tripotée.

Reprenons notre petit programme :

 
L'adresse de __MesDonnees est donc dans a2. Afin de bouger $CAFECAFE dans d1, il suffit d'utiliser le mode d'adressage le plus simple : (ax) ! Il y en a beaucoup d'autres que nous verrons au fur et à mesure.

Les parenthèses signifient "contenu" : ce mode d'adressage va donc bouger ce que contient l'adresse stockée dans a2.

Je récapitule pour que tout cela soit très clair :
  • move.l a2,d0 = bouge l'adresse dans le registre d0
  • move.l (a2), d0 = bouge le contenu de l'adresse dans le registre d0

Toujours en traçant le programme avec le débugger, vous pouvez voir que $CAFECAFE arrive bien dans notre registre de donnée d1.

Ensuite, il est tout à fait possible d'ajouter un décalage à (ax) : il suffit de rajouter devant le chiffre désiré. Ici pour notre exemple, nous allons bouger nos données en mémoire dans trois registres de données. Le 4(a2) va donc chercher __MesDonnees+4, c'est à dire $1111 puisque ce move est .w !

Noter que a2 n'est pas modifié par le CPU : il effectue juste une addition (+4 donc) pour lui et a2 reste intact. a2 = __MesDonnees est en quelque sorte une référence, et les chiffres additions devant servent juste à atteindre les données désirées.

Pour finir, le dernier move va bouger l'octet $FF dans d3...

A travers cet exemple, nous avons lu : il est aussi tout à fait possible d'écrire :

d1, d2 et d3 deviennent source et vont écrire dans les destinations (a2), 1(a2), 2(a2) et 4(a2).

Voici le résultat dans la mémoire :

Voilà, bonne progression aujourd'hui, vous comprenez de mieux en mieux le langage assembleur...

Avouez que c'est tout à fait accessible et surtout très logique !
  

Aucun commentaire:

Enregistrer un commentaire