2010-11-19 5 views
1

J'utilise Easy68k pour créer un programme simple qui inclut une boucle while.Comment mettre à jour le registre d'adresse?

Supposons que le registre A0 pointe vers mes données, qui sont des mots. Pourquoi cela ne fonctionne-t-il 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 sont stockées. Cependant, le dernier mouvement n'a aucun effet.

Répondre

0

J'ai trouvé la réponse, et mon instruction était incorrecte.

Fondamentalement, (A0) + va incrémenter le registre d'adresses APRÈS qu'il ait terminé l'instruction dont il fait partie.

Je pensais que cela serait incrémenté en premier, puis assigné (ce qui était aussi une erreur logique).

Donc tout ce que je dois faire est:

move (A0)+,D3; 

cela ajoutera la valeur A0 à D3 et incrémenter ALORS A0 pour la prochaine fois.

0

Je suis en aucun cas un 68k Jock mais j'ai regardé les modes d'adressage et je suis confus par cette ligne:

MOVE.W (A0)+,(A0) 

Si je lis ce droit, il est la copie du contenu de l'adresse où A0 pointe vers où A0 pointe, puis incrémente A0 de 2, n'est-ce pas? Est-ce juste un incrément d'instruction A0?

Ou, prend-il la valeur à A0, incrémente A0 de 2, et écrit cette valeur à la nouvelle adresse? Si tel est le cas, il semblerait que ce serait en copiant le '2' à des emplacements mémoire successifs à chaque itération de la boucle, ce qui expliquerait pourquoi D3 continue d'obtenir 2.

+0

Je suis un débutant, il ne ya donc un très haut J'ai probablement foiré une instruction, c'est pourquoi j'ai posté ici. Comment feriez-vous ce que j'essaye d'accomplir? Autrement dit, il suffit d'incrémenter le registre d'adresses, de sorte qu'il pointe vers le mot suivant. Et je ne suis pas sûr de ce qu'il fait, de vos deux options. Votre théorie semble plausible. – Blackbinary

+0

J'apprécie l'aide, il m'a mis sur le bon chemin! Voir ma réponse ci-dessous. – Blackbinary

+0

'lea (A0) +, A0' –

2

Je ne sais pas si j'understod ce que vous voulez, mais si je suis bien votre instruction Secord devrait être

ADDI.L #2,A0 

ou

LEA (A0)+,A0