CODING ★ DIS MOI, C'EST QUOI L'ASSEMBLEUR ★

Assembleur ACPC n°36 - Dis moi, c'est quoi l'assembleur
Ce ne sais pas si vous pourrez un jour éprouver le désarroi qui m'envahit ce soir-là, alors que nous discutions tranquillement au coin d'un feu romantique (la télévision) et apaisant. Comment trouver les mots, les euphémismes, les idées, les liens avec notre monde si matériel qui me permettraient de lui faire comprendre et partager ma passion pour ce langage si binaire et si logique sans lequel l'informatique ne serait pas ce qu'elle est.

En fait, ce langage n'est pas plus difficile que les autres. Il nécessite simplement un peu plus de rigueur et d'attention sans lesquels un bug peut survivre au plus sérieux des désassemblages. Je ne veux pas vous faire peur mais une erreur vicieuse peut tuer la petite flamme de vie de votre CPC jusqu'à la prochaine mise sous tension après extinction hard, due à la manipulation de l'interrupteur situé sur le boîtier, voire sur le moniteur (NDPoum : en deux mots et avec décodeur, le Barbare veut vous dire qu'une erreur dans votre programmation peut se traduire par un beau plantage qui bloquerait complètement votre CPC. Il ne vous resterait plus alors qu'a éteindre la machine, la rallumer et recharger l'Assembleur pour reprendre la main).

Nous avons décidé, histoire de vous familiariser avec ce nouveau compagnon, de vous amener tout doucement à la programmation proprement dite par quelques exemples simples utilisant des routines systèmes. Avant tout, qu'est-ce qu'une routine système.

CONNAISSANCES PRIMORDIALES

Pour fonctionner, un micro-ordinateur a besoin d'un programme pour ne pas se perdre dans l'infinie mémoire, tout comme l'automobiliste a besoin de panneaux pour retrouver son chemin sur les vastes routes qui sillonnent notre beau pays. Pour cela, le CPC contient une mémoire ineffaçable appellée ROM. Cette mémoire contient des petits programmes tout faits qui permettent d'accomplir certaines tâches (afficher un caractère, positionner un mode écran, saisir une touche au clavier, ouvrir un fichier...). Ces routines principales et primordiales sont aussi appelées par le Basic pour réaliser de petites opérations simples. Elles sont, en fait, les liens rapides entre un programme conséquent et la machine. Pourquoi compliquer les choses et se casser la tête à écrire des programmes qui existent déjà si ce n'est pour faire quelque chose de plus propre.

Ce qui nous intéresse pour l'instant n'est pas l'optimisation poussée, mais plutôt la simplicité totale. Sachez donc qu'il est possible de demander au CPC de réaliser des tâches pour soi, en appelant simplement la routine adéquate. La formule d'appel est toujours la même. Pour ceux qui causent un peu l'anglais, la langue d'outre-Manche, le mnémonique utilisé est CALL, soit la traduction littérale du mot français «appel ». La syntaxe à utiliser sera donc:

CALL VECTEUR

Où vecteur est l'adresse de la routine demandée. Dorénavant, nous nommerons vecteur toute routine système que nous devrons appeler. Ainsi, le vecteur 8BB5A vu le mois dernier dans cette rubrique est le programme qui permet l'affichage d'un caractère à la position courante du curseur. Les vecteurs EtBBO6 et 8BB18 attendent qu'une touche du clavier soit pressée. Pour les jaloux des possesseurs de CPC 6128, l'ordre de FRAME (attente de balayage écran) est remplaçable sur CPC 464 et 664 par l'appel du vecteur &BD19. Nous ne vous avons cité ici que quelques exemples des plus utilisés mais nous construirons, au fur et à mesure de cette initiation, une liste conséquente des vecteurs disponibles sur CPC.

C'EST MAGIQUE?

Il ne faudra jamais perdre de vue que rien dans un ordinateur n'est magique. Vous pensez bien qu'il ne suffit pas d'appeler un vecteur pour que tout se fasse automatiquement. Il est vrai que certains vecteurs ne demandent rien et sont utilisables tels quels ( c'est le cas du &BD19, du &BB06 ). En revanche, si vous désirez changer le mode d'affichage, vous devez spécifier la valeur désirée (vous savez, sous Basic, mettre le mode écran en appelant tout simplement l'instruction MODE ? ). Pour ça, pas de miracle, vous ne pouvez pas vous permettre de jouer aux devinettes. Nous sommes là pour vous donner tous les tuyaux nécessaires à la préparation des « appelés ». On vous disait par exemple, le mois passé, que pour afficher un caractère il fallait placer dans le registre A (appelé aussi l'accumulateur) son code ASCII et ensuite utiliser le vecteur &BB5A. Il va de soi qu'en plaçant une valeur quelconque dans]es registres HL, DE et pourquoi pas BC et en appelant le vecteur &BB5A, rien ne serait apparu a l'écran (n'ayez crainte mes chers amis, ces registres sont toutefois utilisés pour l'appel d'autres vecteurs). Alors retrouvons cet exemple

LD A,65
CALL &BB5A
RET

Et voilà un petit A majuscule qui s'affiche à l'écran. Contrairement à l'instruction PRINT, l'appel du vecteur &BB5A n'exécute pas le retour chariot et un second appel (avec une autre valeur> fera s'afficher le nouveau caractère à la suite du premier. Prenons un autre exemple, les modes de votre CPC.
Pour changer de mode, il suffit de placer dans l'accumulateur une valeur allant de zéro à deux et d'appeler le vecteur &BC0E. Voici notre exemple pour simuler l'instruction Basic MODE O

LD A,0
CALL &BC0E
RET

Pour vous prouver que l'accumulateur n'a aucunement le monopole, voici la plus simple façon de positionner le curseur texte (LOCATE de notre cher Basic). Vous savez que cette instruction demande une valeur pour l'abscisse et une seconde pour l'ordonnée, exemple:

LOCATE 12,15

En Assembleur, vous devez initialiser le registre H avec l'abscisse ( 12 dans notre exemple ) et L avec l'ordonnée ( 15 présentement ). Une fois les deux registres initialisés, il suffit d'appeler sans crainte le vecteur &BB75. Voici la routine :

LD H,12
LD L,15
CAL L &BB75
RET

Vous pouvez, si le Cœur vous en dit, afficher un caractère pour vous convaincre de l'efficacité de cette routine. Un détail TRES IMPORTANT à ne jamais oublier après avoir placé une valeur dans un ou plusieurs registres et appelé un vecteur quelconque, ne soyez pas surpris de voir votre valeur perdue à jamais. Soyons honnêtes, il arrive parfois que les données subsistent mais ne comptez pas systématiquement dessus. Cela peut être source de bugs Dans le doute, vérifier ou s'abstenir

ORIGINES RETENUES

Avant tout, il faut connaître une règle d'écriture presque incontournable. A chaque programme assembleur, il faut un début et une fin. Commençons par le commencement. En Assembleur, contrairement au Basic, il est possible de définir l'endroit où seront assemblées les mnémoniques du code source et donc où sera implanté le programme. C'est la directive ORG qui permet de fixer cette ORiGine. Cette directive doit être la première instruction du listing assembleur, sans quoi le programme serait rangé en mémoire à l'adresse choisie par défaut par l'Assembleur et non à celle que vous avez choisie. Faites encore attention à ce genre de détail car il peut, lui aussi, générer des bugs ou des plantages inattendus. La syntaxe de la commande ORG est assez simple. Il suffit de faire suivre le mnémonique de l'adresse à laquelle vous désirez installer le programme binaire. ORG &9000 forcera l'Assembleur à écrire le code à l'adresse hexadécimale 9000. ORG 40000 fera de même pour cette valeur.

En ce qui concerne la fin d'un programme binaire, vous n'avez aussi qu'une seule et unique solution. Vous devez forcer le programme à rendre la main au Basic. Pour cela, il existe une instruction simple à RETenir. C'est RET comme RETourne ou encore RETurn, in english in the text. Si vous oubliez un de ces deux mnémoniques, vous pouvez être sûrs que des ennuis passagers mais conséquents vous arriveront.

CONSEILS PRATIQUES

En ce qui concerne les données numériques, des différences de syntaxes existent entre les divers Assembleurs.

Dans tous les sources que nous vous présenterons dorénavant, nous adopterons la notation du Basic. Une valeur décimale sera donc inscrite sans symbole spécial alors qu'un nombre hexadécimal sera précédé du et commercial « & ». Voilà qui achève cette première initiation à l'Assembleur sur CPC. Alors à vos claviers et bonne route pour ce tout petit listing.

BONNE BOURRE

C'est ici que se termine cette initiation. Nous ne vous conseillerons jamais assez de vous entraîner sur des petits exemples utilisant les vecteurs suscités. La pratique ne fait de mal à personne. Si quoi que ce soit vous ennuie ou si un point reste sombre à vos yeux, n'hésitez pas à nous en faire part dans votre courrier qui, nous l'espérons, sera abondant. La fertilité de cette rubrique sera proportionnelle au nombre de questions que vous nous poserez.
Adressez vos lettres à:

Poum et Sined,
Rubrique Assembleur MSE,
31, rue Ernest-Renan,
92130 lssy-les-Moulineaux
France
Terre
Système solaire

Et la tête, alouette...

En vous souhaitant bonne chasse à l'Assembleur, nous vous saluons. Issyles-Moulineaux, à vous Cognac-Jay (les bonnes, on les refait).

ORG 40000 ; Implantation en 40000
LD A,1 ; A chargé avec le mode
CALL &BC0E ; Appel du vecteur MODE
LD H,20 ; H contient la colonne
LD L,12 ; L contient la ligne
CALL &BB75 ; Appel du vecteur LOCATE
LD A,88 ; A chargé avec X
CALL &BB5A ; Appel du vecteur PRINT
RET ; Retour au Basic

Poum et Sined eI Erabrab (Find the bug!), A100 n°36

Page précédente : Bidouilles ACPC n°35 - Disk Court

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

Lien(s):
» Coding » Assembleur ACPC n 06 - Initiation : Les transferts
» Coding » Assembleur ACPC n°37 - Les transferts
» Coding » Bidouilles ACPC n°38 - Lecture sans AMSDOS
» Coding » Assembleur ACPC n°41 - Les flags, grands délires
» Coding » Bidouilles ACPC n°20 - Déviation du Ctrl Shift Esc.....
» Coding » Assembleur ACPC n°10 - Initiation : Les decalages
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 045 millisecondes et consultée 3672 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.