CODING ★ MICRONEWS - Z80 ASSEMBLEUR FACILE (1ere partie) ★

Cours et initiation du Magazine Micro NewsMicro News n°06 : Z80 Assembleur Facile (1ere partie)

BASIC pourrait être défini comme suit : tentative réussie pour rapprocher la machine de l'homme Tentative réussie à ce point que le meilleur programmeur Basic ne sait quoi inventer pour rendre ses programmes plus performants, car en définitive il ne cannait pas grand chose de la machine qu'il programme. Basic Interpose de ce point de vue un écran que nous nous efforcerons d'abattre. Commençons donc de suite avec quelque chose qui ressemble a s'y méprendre à une boucle For Next.

LD A,0 Charger dans l'accumulateur la valeur 0
P1 Faire ceci, cela
INC A Additionner 1 à l'accumulateur CP F3H Comparer l'accumulateur à F3H
JR NZ,P1 Boucler sur P1 si inégalité

Voyons ce charabia de plus près :

LD A,0 : LD pour Load. Initialiser l'accumulateur à 0. L'accumulateur est l'organe de calcul principal de la machine. On est déjà loin du basic qui ne sait pas converser directement avec cet important registre. En aucun cas A ne représente ici une variable.

P1 : Faire ceci, cela. A l'évidence il faut placer ici des instructions que nous apprendrons à connaître. Nous intéresse pour le moment ce P1 qui pourrait être aussi bien le fameux TOTO des informaticiens, ou, pourquoi pas, Aristobule. C'est une étiquette, ou encore label. Sans aller plus avant, disons simplement, pour le moment, que ce P1, cette étiquette, sert à désigner de manière aisée un point de chute.

INC A : INC de Increass. Accumulateur=Accumuiateur+1. Cette instruction "INC quelque chose" reviendra sans arrêt, avec son pendant "DEC quelque chose", decrease : Des incrémenter par opposition à Incrémenter.

CP F3H : CP de Compare. Compare le contenu de l'accumulateur avec la valeur F3H. Voici une nouveauté : Z80 ne sait faire des comparaisons qu'à travers l'accumulateur, qui est désigné implicitement. On parle d'opérande implicite". Cela veut simplement dire qu'il faut que la valeur à comparer soit dans l'accumulateur. Pour Z80 c'est si évident qu'il nous dispense de le lui rappeler en nommant l'accumulateur.

JR NZ, P1 : NZ est un drapeau ou indicateur. Mettons que NZ soit un drapeau rouge et Z un drapeau bleu. Si les deux termes d'une comparaison sont inégaux, c'est le drapeau rouge NZ qui se soulève, s'ils sont égaux, c'est le drapeau bleu. Notre instruction revient donc à dire : Si le drapeau rouge est levé, va en P1.

C'est un saut "relatif". Relatif à quoi ? A ('instruction actuelle. On ne saute pas à l'adresse X. mais on saute de N octets en avant ou en arrière, un peu comme si en basic on pouvait dire ; Saute de N lignes en avant ou en arrière. Le grand avantage de ce JR (saut relatif) par rapport à son frère JP (saut absolu) est de laisser le programme "relogeable". Imaginez que je dise à ce soupirant : "Vous trouverez votre "belle" cent mètres devant vous, où que vous soyez" (C'est le JR) ou par contre que je lui dise "Vous la trouverez à t'arbre du Ténéré" (C'est le JP), ce n'est pas tout à fait pareil.
Voici une autre version du même petit programme :

LD A,F3H
P1 Faire ceci, cela
DEC A
CP 0
JR NZ,P1

Quelle version préférer?
Les deux marchent, mais dans ce cas précis, on s'y prendrait autrement. Ces deux petits programmes sont des "hypothèses d'école".
L'accumulateur n'est pas le seul organe de calcul du Z8O.
Nous trouvons toute une série de registres, qui nous deviendront peu à peu familiers.

Généralement ces autres registres marchent par paire, alors que l'accumulateur fait un peu figure de célibataire endurci. De plus ces autres registres ont des liens de parenté assez particuliers. Prenez par exempte la paire BC, Ces deux registres peuvent marcher la main dans la main ou indépendamment. Très curieusement, B possède quelque part un chromosome qui fait de lui le spécialiste des B (oucles). Quant à C il est au même titre le spécialiste des échanges calculateur-organes extérieurs. Voyez là finesse ou complication, selon que votre humeur vous porte à l'optimisme ou au pessimisme.

Donc, puisque spécialiste des boucles il y a, reconstruisons notre boucle avec le registre B.

LD B, F3H
P1 Faire ceci, cela
DJNZ P1

Ce DJNZ signifie très exactement : Décrémente B de 1, compare 8 avec 0 et tant que le drapeau "Inégal" est levé, remonte par saut "relatif à P1.

Cette boucle travaille toujours en "Step -1' comme on dirait en basic. D(ecrase) and J(urnp). De plus, cette instruction DJNZ n'existe que pour ce cas précis, avec le registre B, qui est son opérante implicite. Mais voyez comme c'est simple et direct Etonnez vous dés lors qu'en langage machine le Z80 se mette à s'emballer B est un registre 8 Bits, (tout comme Accumulateur et C), capable, à ce titre, de recevoir des valeurs de 0 à 255. (En valeur absolue. Pour les négatifs, patience...).

Là, j'aimerais voir Lucien Jeunesse répondre à une question à 1000 frs. "Dans quel cas 255 vient il après 0?'

Imaginez que vous écriviez bien lisiblement sur une feuille blanche la valeur 1000 décimale. A présent mettez votre doigt sur le 1 de 1000 et commencez une soustraction par -1. Vous trouvez 999. Soulevez votre doigt. Un lutin vous à "chippé" le 1. Vous venez de passer de 0 à 999.

Dans un registre 8 bits 0-1 donne 255. (FFH).

Conclusion, et nous nous en tiendrons là pour aujourd'hui, avec B il est possible de réaliser des boucles pour toutes les valeurs comprises entre 1 et 256.

LD B,0
P1 Faire ceci, cela
DJNZ P1

Ceci est une boucle sur 256!

A.S., MICRONEWS n°6

★ REVUE: MICRONEWS
★ ANNÉE: 1988
★ AUTEUR: André Schmitt
 

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

Lien(s):
» Coding » Micro News n°07 : Z80 Assembleur Facile - Les boucles (2eme partie)
» Coding » Micro News n°12 : Z80 Assembleur Facile
» Coding » Micro News n°09 : Z80 Assembleur Facile (4e partie : l'organisation de la mémoire)
» Coding » Micro News n°11 : Z80 Assembleur Facile
» Coding » Micro News n°08 : Z80 Assembleur Facile (3e partie)
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/c
Page créée en 174 millisecondes et consultée 865 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.