CODINGHEBDOGICIEL ★ FORMATION A L'ASSEMBLEUR PRATIQUE ★

La page pédagogique d'hebdogiciel 117 - Registres et AdressageCoding Hebdogiciel
Langage machine Z80

ASSEMBLEUR MSX

Bon, il paraît évident que l'action de programmer consiste à remplir intelligemment les octets de notre chère RAM. Des lors, le microprocesseur peut, sous votre ordre et â partir de l'adresse que vous lut indiquez, lire la RAM en s'effbrçant de comprendre et d'exécuter les ordres que vous avez tenté de lui transmettre par cet intermédiaire. C'est la raison d'être de la fonction USR du Basic. Vous avez certainement constaté que le lancement d'un programme en LM ( Langage Machine ) a partir de l'adresse &Hxxxx, s'effectue sur votre MSX par : DEFUSRx = &Hxxxx : X - USRx(X) (Cf. Manuel de référence, on est pas là pour vous donner des cours de Basic). Mais qu'est-ce qu'un programme en "langage machine" ?

C'est un programme qui contient une suite d'instructions élémentaires, directement compréhensibles par le microprocesseur. Ces instructions codées sous forme Hexadécimale, puis implantées en mémoire, sont appelées les "codes machina". Justement, vous avez entendu dire qu'un programme nommé "assembleur' est censé simplifier la création et l'écriture d'un programme en LM. De quelle manière 7 Par l'emploi d'instructions symboliques compréhensibles, formées d'abréviations de mots anglais et appelés MNEMONIQUES. Exemple : DEC pour décrément, INC pour Incrément, LD pour LOAD etc. Ces mnémoniques composent le fameux langage "assembleur"' Au fait, il ne faut pas confondre "assembleur du 280" désignant le langage de programmation, avec "un assembleur 280", désignant un programme destiné à permettre la programmation dans ce langage. Un programme composé de mnémoniques est appelé "programme source" et l'action qui consiste â transformer les mnémoniques d'un programme source, en valeurs compréhensibles par le 280, est appelée ASSEMBLAGE (et l'action Inverse DESASSEMBLAGE). Un programme ainsi généré, est appelé "programme objet". Un "assembleur" est un programme qui permet à l'aide d un éditeur, la saisie de votre programme source, pour ensuite en effectuer l'assemblage et l'implantation. Bien qu'il soit possible de réaliser soi-même le boulot d'un assembleur (en utilisant une table de correspondance mnémoniques/codes machine), il est quand même souhaitable d'en acquérir un au plus lot : son emploi facilité considérablement l'apprentissage et la pratique de ce type de programmation.

Pour commander directement au ZOO par l'intermédiaire du langage machine, vous conviendrez qu'il est indispensable de comprendre comment ce célèbre microprocesseur manipule les données en mémoire. Ces dernières vont transiter et être traitées par l'intermédiaire de registres* qui sont, si vous voulez, des emplacements de stockage temporaire qui fonctionnent de manière très précise. Ces registres sont des esclaves à votre service qui, bien dirigés, se chargent de tous les fastidieux calculs nécessaires au bon fonctionnement de vos programmes. Ces registres donc, sont différenciés par des lettres.

Petite présentation :
REGISTRES DE 8 BITS : A. B. C. D, E, F, H. L , A', B', C'. D' , E' F', H', L'.
REGISTRES DE 16 BITS : IX, IY, I, R, PC, SP

A noter que l'on peut grouper par paire des registres de 8 bits, pour former des registres de 16 bits: exemple : AF, BC, DE, HL (les registres primes sont appelés "registres auxiliaires"). Laissons de coté (pour l'instant bien sur) les registres auxiliaires, les registres d'index (IX et IY), les registres propres au système (I, R, PC. SP), pour nous intéresser à l'étude des registres suivants : A, B. C. D. E, F, H, L de 8 bits. Le Jeu des mnémoniques, par ses limites, leur assigne des usages particuliers.
A est appelé accumulateur, c'est le principal instrument de travail du 280. utilisé pour les opérations logiques ou arithmétiques. BC est principalement utilisé comme compteur du nombre d'exécutions de boude LM (peut être comparé si vous voulez au I des boucles FOR ) du Basic). HL permet de stocker une adresse mémoire, avec la partie haute de l'adresse dans H (high), et la partie basse dans L (low). DE contient souvent un déplacement.

F sert toujours aux tests de condition devant diriger l'ordre d'exécution des programmes. Tous ces rôles que nous étudierons ne sont pas figés et l'utilisateur est libre d employer ces registres comme il le désire (dans la mesure où il existe des instructions le lui permettant), De plus, te zeo disposant d'approximativement 600 instructions, il est à peu près hors de question de toutes les retenir. Une quarantaine suffiront amplement à une programmation complète et efficace Sachez que vous disposez, pour le Z80, d'Instructions de chargement (de la mémoire ou de registres), d'addition et de soustraction, de manipulation purement binaire, de déroutement (équivalents de GOTO ou GOSUB) conditionnel ou non et de comparaison. Pour apprendre â les connaître et à les utiliser, rien ne vaut la pratique: alors allons-y gaiement.

Par exemple : comment réaliser l'équivalent de POKE &H9000. &HFF en assembleur ? Il s'agit pour notre Z80, de prendre la valeur &HFF (255) et de la placer â l'adresse mémoire &H9000 , bien.

— Vous savez depuis peu (ci-dessus), que les Instructions de chargement ont leur mnémonique commençant par LD.
— Vous venez d'apprendre que le registre A est utilise pour les manipulations de données.
— Vous apprenez dans une revue d'informatique célèbre, que les valeurs hexadécimales doivent comporter en assembleur, le préfixe "$"
— Vous ne savez pas encore, mais cela ne saurait tarder, qu'il faut séparer par une virgule le contenant situé à gauche (appelé "opérande
destination"), de la valeur de drone (appelée "opérande source") destinée à modifier ce contenant. Pas si dur â comprendre, exemple .
LD HL,$9000 : place la valeur $9000 dans le registre HL. donc effectue
HL = $9000.
— Vous découvrez avec émerveillement, qu'il faut placer entre parenthèses l'adresse (ou le registre contenant l'adresse) destinée à recevoir le valeur (ou le contenu d'un registre) spécifié. Fastoche. exemple :

LD HL,$9000
LD (HL),$10 ; place $10 à l'adresse $9000 contenue dans HL

— Vous venez d'apprendre au café du coin, que I "adresse d'origine de votre programme doit être spécifiée par ORG.
— Vous avez lu dans une revue d'Informatique concurrente, que la fin de votre programme doit impérativement se terminer par RET (l'équivalent de RETURN du Basic). Vous écrivez donc fébrilement :

ORG $C000 ; signale le début de l'implantation du programme en $C0000.
LD HL,$9000 ; charge le registre HL de la videur $9000, adresse où l'on désire placer notre donnée.
LD A,$FF ; charge A de la donnée en question, soit $FF
LD (HL),A ; charge à l'adresse contenue dans HL, le contenu de A.
RET ; fin du programme, retour au Basic.

Pris d'un doute, vous compulsez un bouquin du style programmation du Z80 (par Rodnay ZAK3 chez Sybex), pour vérifier la validité des instructions que vous venez d'écrire. C'est bon, mais quelques instants de réflexion vous ont permis de trouver mieux :

ORG $C000
LD A,$FF
LD ($9000)
RET

ou bien

ORG $C000
LD HL,$9000
LD (HL),$FF
RET

Votre examen du jeu de LD dont vous disposez, va vous permettra de faire un grand pas dans la pratiqua de l'assembleur du Z80. Déplacez donc à souhait (entre autres), les contenus de la mémoire jusqu'à notre prochain cours.

Nicolas BOURDIN et Jean-Claude PAULIN , Hebdogiciel n°117

★ ANNÉES: 1985
★ AUTEURS: Nicolas BOURDIN et Jean-Claude PAULIN

Page précédente : La page pédagogique d'hebdogiciel 116: Registres et adressage

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

Lien(s):
» Coding » La page pédagogique d'hebdogiciel 155: Adressage
» Coding » La page pédagogique d'hebdogiciel 123: La Mémoire
» Coding » La page pédagogique d'Hebdogiciel n°111: Basic et Langage Machine
» Coding » La page pédagogique d'hebdogiciel 120: Le Pointeur SP
» Coding » La page pédagogique d'hebdogiciel 084: Formation à l'assembleur - La Pile
» Coding » La page pédagogique d'hebdogiciel 088 : Formation à l'assembleur
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 067 millisecondes et consultée 2279 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.