CODING ★ PROGRAMMATION : L'ASSEMBLEUR EN DOUCEUR (5e partie) ★

L'assembleur en Douceur (5/x) : Les modes d'adressage (Micro-Mag)Cours et Initiation MICROMAG

Capable de multiples opérations, le Z80 dispose, pour la manipulation de valeurs variables, d'emplacements mémoire privilégiés appelés registres.
C'est dans ceux-ci que Von place les différentes valeurs à manier.

Examinons attentivement le schéma illustrant cet article, en ignorant pour l'instant les huit registres de droite (A', F, B', C', D', E', H' et L'). Première constatation, certains registres appelés «registres simples» ne peuvent contenir que des nombres sur 8 bits (0 à 255). D'autres nommés «registres doubles» acceptent quant à eux des nombres sur 16 bits (0 à 65535). On peut néanmoins coupler des registres simples pour en faire des registres doubles capables de recevoir une valeur 16 bits. Seules combinaisons possibles: BC, DE et HL (donc, pas de BH, LE ou autres liaisons douteuses). Soulignons également que les registres 16 bits IX, IY, SP et PC ne sont pas scindables en deux registres de 8 bits. Un couple AF sera rencontré dans deux ordres particuliers du langage Assembleur (POP AF et PUSH AF), mais il s'agit d'un couple illégitime, inutilisable pour le chargement d'une valeur 16 bits.

Il faut savoir que tous les registres simples ou doubles n'ont pas la même finalité et que leur mauvais emploi peut être lourd de conséquence: cela va de l'impossiblité d'exécuter une tâche à une lenteur d'exécution dommageable. Il est donc indispensable d'en connaître parfaitement l'usage.

L'accumulateur

Ainsi dénommé, le registre A est le plus important. C'est par son biais que s'effectuent les opérations élémentaires sur 8 bits, telles que l'addition, la soustraction, la comparaison avec un autre nombre ou le stockage d'une valeur à une adresse en mémoire vive. Les instructions se rapportant à ce registre sont bien plus nombreuses que pour les autres registres 8 bits. Nous verrons aussi qu'il est mis la plupart du temps à contribution lors de l'emploi de routines système, pour passer en entrée ou recueillir une donnée en sortie.

Registre F

Ce registre bien particulier n'a aucune analogie avec les autres (pas question d'y stocker quelque valeur que ce soit). Il se nomme «registre des flags» (drapeaux) ce qui, au figuré, symbolise assez bien son rôle. Six de ses 8 bits en se mettant à 1 ou 0 (drapeau levé ou baissé) ont une signification précise.

A la suite d'opérations arithmétiques, logiques ou autres, les dits flags se positionnent en fonction du résultat. Ainsi, la consultation de ceux qui nous intéressent, permet d'obtenir diverses informations -dépassement de capacité d'un registre, résultat nul, etc.- qui décident des actions à entreprendre. Vous avez, je suppose, compris que le registre F est comme A nécessaire à la réalisation du moindre petit programme.

Registres B, C et BC

B, C et le couple BC sont plus classiques. Soulignons quand même que certaines procédures utilisent B et BC comme compteurs. On trouvera donc certains ordres par-
ticuliers aidant à cette fonction.

Registres D, E et DE

D et E ne présentent pas de spécificités particulières. DE en revanche, est appelé «pointeur d'adresse auxiliaire». C'est lui qui, par exemple, pointe toujours l'adresse d'arrivée lors d'une instruction automatique de transfert de contenu mémoire.

Registres H, L et HL

H et L sont aussi d'un emploi classique, mais HL a un peu, pour les registres 16 bits, la même importance que A pour les 8 bits. Il permet, par exemple, des additions ou soustractions 16 bits. Il est dit «pointeur d'adresse principal» car un grand nombre d'instructions le mettent en œuvre, la plupart permettant d'effectuer facilement les différentes opérations possibles dans les «cases mémoire» de la Ram On retrouvera HL assez souvent lors de l'utilisation des routines système, quand les entrées ou sorties des paramètres nécessiteront d'autres valeurs que celles quasiment toujours données dans le registre A.

A (8 bits)F (8 bits)A' (8 bits)F' (8 bits)
B (8 bits)C (8 bits)B' (8 bits)C' (8 bits)
D (8 bits)E (8 bits)D' (8 bits)E' (8 bits)
H (8 bits)L (8 bits)H' (8 bits)L' (8 bits)
IX (16 bits)Registres du Z80?
IY (16 bits)
SP (16 bits)
PC (16 bits)
R (8 bits)I (8 bits)

Registres IX et IY

Ces deux registres 16 bits appelés «registres d'adressage indexé» sont dotés des mêmes caractéristiques et possèdent un jeu d'instructions spéciales. Exemple: quand IX pointe sur une adresse, IX+1 permet d'accéder pour écriture ou lecture à l'adresse supérieure, ce qui est très utile pour gérer des tables ou tableaux en RAM. Les quatre derniers registres sont dédiés à des utilisations particulières. Pas question d'y placer des valeurs quelconques sous peine d'une sanction quasi immédiate: le blocage de l'ordinateur!

Registre SP

Il est communément appelé «pointeur de pile» (stack pointer). La pile est un endroit réservé où l'utilisateur peut stocker momentanément des données. Le système emploi lui aussi la pile pour sa petite cuisine. Ce pointeur contient toujours l'adresse de la pile où est contenue la dernière valeur stockée. Changer cette adresse (pour récupérer une valeur stockée antérieurement) sans la remettre ensuite, peut amener le système à repartir avec de mauvais paramètres. Très dangereux lorsqu'on sait qu'il stocke (par exemple) dans cette pile, l'adresse de retour avant d'exécuter une sous-routine.

Registre PC

Ou «compteur programme» (program counter). Il est employé par le système qui trouve dans ce registre l'adresse à laquelle se brancher pour poursuivre le programme. En effet, le système ne suit pas comme en Basic, un programme numéroté par lignes. Il effectue directement des sauts d'adresse en adresse afin de prendre connaissance des codes machine qui sont pour lui autant d'instructions à exécuter.

Registre R

Ce registre sert (servait?) uniquement au système d'exploitation pour le rafraîchissement des données de la Ram. Comme la valeur qu'il contient change constamment, il peut être utilisé en lecture par une routine réclamant un nombre aléatoire.

Registre I

Registre également réservé au système qui l'emploie pour gérer les interruptions.

Registres auxiliaires A',F,B',C,D',E', H' et L'

Grâce à des instructions d'échanges, ces registres peuvent venir remplacer momentanément leurs homologues. Doit-on pour autant les considérer comme huit registres supplémentaires? Si nous les avons laissé de côté, c'est parce que le système en a l'usage. Vouloir s'en servir obligerait à connaître en détail toutes les obligations à respecter. Peu intéressant, donc.

Adressage

Ainsi familiarisés avec les fameux registres du Z80, comment allons-nous les utiliser en relation avec la mémoire vive? En d'autres termes, comment, à travers eux, effectuer la manipulation des valeurs? Par une opération en assembleur nommée «adressage». Il existe bien évidemment plusieurs modes d'adressage. Gardons nous, maintenant, de déflorer ce sujet d'importance réservé à notre prochain rendez-vous. Patience...

Guy Poli, Micromag n°9

★ EDITEUR: MICROMAG
★ ANNÉE: 1990
★ AUTEUR: GUY POLI
 

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Scanner (Micromag)
» Applications » Fiche (Micromag)
» Applications » Sprite (Micromag)
» Applications » Catimp (Micromag)
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 254 millisecondes et consultée 754 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.