Comment mettre à jour le registre d'adresses?
Question
J'utilise Easy68k pour faire un programme simple qui comprend une boucle while.
Supposons que le registre A0 pointe à mes données, qui sont des mots. Pourquoi cela ne fonctionne pas?
MOVE.W (A0) , D3
MOVE.W (A0)+, (A0)
MOVE.W (A0) , D3
Si des points A0 au numéro 2 d'abord, et après que le numéro 4, le résultat que je veux est que, après le premier mouvement, 2 est stocké, après l'incrément et le troisième mouvement, 4 est stocké. Cependant, le dernier mouvement n'a pas d'effet.
La solution 3
Je trouve la réponse, et mon instruction était incorrect.
En fait, (A0) + incrémente le registre d'adresse après avoir terminé l'instruction tout cela fait partie de.
Je pensais que ce serait incrémenter d'abord, puis attribuez-lui (ce qui était une erreur logique aussi bien).
Donc je besoin de faire est:
move (A0)+,D3;
ajoutera la valeur A0 à D3, puis A0 incrément pour la prochaine fois.
Autres conseils
Je ne sais pas si j'understod ce que vous voulez, mais si je suis bien votre instruction Secord doit être
ADDI.L #2,A0
ou
LEA (A0)+,A0
Je suis en aucun cas un 68k Jock mais je l'ai fait voir les modes d'adressage et je suis confus par cette ligne:
MOVE.W (A0)+,(A0)
Si je lis ce droit, il est de copier le contenu de l'adresse où les points A0 à l'endroit où les points A0 et incrémente A0 par 2, à droite? Est-ce juste une instruction A0 incrément?
Ou, faut-il la valeur à A0, A0 incrément de 2, et d'écrire cette valeur à la nouvelle adresse? si oui, il semble que ce serait en face de la « 2 » à des emplacements de mémoire successifs à chaque itération de la boucle, ce qui expliquerait pourquoi D3 ne cesse de se 2.