Les boucles
La manière la plus simple de mettre en oeuvre une boucle (c'est-à-dire de répéter une séquence d'instructions) avec le microprocesseur 6502 est la suivante :
- Chargez un registre d'index ou un emplacement mémoire avec le nombre de fois que la séquence doit être exécutée.
- Exécutez la séquence.
- Décrémentez le registre d'index ou l'emplacement mémoire de 1.
- Revenez à l'étape 2 si le résultat de l'étape 3 n'est pas 0.
Les programmes typiques ressemblent à ceci :
Rien, sauf une question de clarté, nous empêche de compter (en utilisant les instructons INX, INY ou INC); bien sûr, vous devez modifier l'initialisation de manière appropriée. Un compteur 16 bits est beaucoup plus facile à incrémenter qu'à décrémenter. Dans tous les cas, les instructions à répéter ne doivent pas interférer avec le comptage des répétitions. Vous pouvez entreposer le compteur dans le registre d'index ou dans n'importe quel emplacement de mémoire. Les caractéristiques spéciales du registre d'index X sont son utilisation en pré-indexation et la large disponibilité des modes indexés à zéro page. La particularité du registre d'index Y est son utilisation en post-indexation. Comme d'habitude, les emplacements de mémoire sur la page sont plus courts et plus rapides à utiliser que les emplacements de mémoire sur les autres pages. Bien entendu, si vous utilisez un registre d'index ou un seul emplacement mémoire comme compteur, vous êtes limité à 256 répétitions. Vous pouvez fournir un plus grand nombre de répétitions en imbriquant des boucles utilisant un seul registre ou emplacement mémoire ou en utilisant une paire d'emplacements mémoire, comme illustré dans les exemples suivants :
La boucle externe restaure le compteur interne (registre d'index Y) à sa valeur de départ (NTIML) après chaque décrémentation du compteur externe (registre d'index X). L'imbrication produit un facteur multiplicatif - les instructions commençant à LOOPI sont répétées NTIMM x NTIML fois. Bien sûr, une approche plus générale (et plus raisonnable) utiliserait deux emplacements de mémoire sur la page au lieu de deux registres d'index. Voici un exemple d'un compteur 16 bits dans deux emplacements de mémoire :
L'idée ici est d'incrémenter uniquement l'octet le moins significatif à moins qu'il n'y ait une retenue sur l'octet le plus significatif. Notez que nous ne pouvons reconnaître la retenue qu'en cochant le drapeau de zéro, puisque INC n'affecte pas le drapeau de retenue. Le compte à rebours est beaucoup plus simple que le compte à rebours; la séquence comparable pour décrémenter un compteur 16 bits est la suivante :
Si nous comptons, cependant, nous devons nous rappeler d'initialiser le compteur au complément de la valeur souhaitée (indiquée par les noms NTIMLC et NTIMHC dans le programme utilisant INC).