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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top