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

★ LICENCE: COMMERCIALE
★ 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 ★ DOWNLOAD ★

Files:
» Amsoft_devpacDATE: 2013-09-03
DL: 574 fois
TYPE: ZIP
SIZE: 47Ko

» DAMS-CPMDATE: 2013-09-03
DL: 179 fois
TYPE: ZIP
SIZE: 18Ko

» damspackDATE: 2013-09-03
DL: 386 fois
TYPE: ZIP
SIZE: 47Ko

» DAMS_6128__FRENCHDATE: 2015-07-09
DL: 50 fois
TYPE: ZIP
SIZE: 39Ko

» DAMS_Converter_v1.1DATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 25Ko

» Dams_notice_FRDATE: 2002-11-15
DL: 361 fois
TYPE: ZIP
SIZE: 18Ko

» DAMS_Overdrive_v1.0DATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 39Ko

» DAMS_OVL__ROMDATE: 2002-12-02
DL: 448 fois
TYPE: ZIP
SIZE: 21Ko

» DAMS_v1.2__(Include_Manual).zipDATE: 2015-05-07
DL: 138 fois
TYPE: ZIP
SIZE: 49Ko

» DAMS__(Keypad_patched_version)DATE: 2013-09-03
DL: 271 fois
TYPE: ZIP
SIZE: 37Ko

» Hisoft_Devpac80_v.2__ENGLISHDATE: 2013-09-03
DL: 470 fois
TYPE: ZIP
SIZE: 447Ko

» Hisoft_Devpac_ROMDATE: 2012-09-19
DL: 423 fois
TYPE: ZIP
SIZE: 12Ko

» Hisoft_Devpac__ENGLISHDATE: 2013-09-03
DL: 435 fois
TYPE: ZIP
SIZE: 85Ko

» RSX-Fast_Arrow__(Include_DEVPAC_SRC)__FRENCHDATE: 2015-07-28
DL: 58 fois
TYPE: ZIP
SIZE: 39Ko

» Zenith_2_DecompacterDATE: 2013-09-03
DL: 354 fois
TYPE: ZIP
SIZE: 26Ko

» ZENSUREN__GERMANDATE: 2013-09-03
DL: 323 fois
TYPE: ZIP
SIZE: 24Ko

» Zen__FRENCHDATE: 2013-09-03
DL: 365 fois
TYPE: ZIP
SIZE: 39Ko

Adverts/Publicités:
» Hisoft-Devpac80DATE: 2014-05-05
DL: 175 fois
TYPE: image
SIZE: 116Ko

» Hisoft-Devpac__ENGLISHDATE: 2015-01-08
DL: 154 fois
TYPE: image
SIZE: 238Ko

» Hisoft-Happy_New_Year_from_Hisoft-Pascal80-C_Plus_Plus-Devpac80-The_Knife-Catalog-Your_Health-Your_Horoscope__ENGLISHDATE: 2014-12-26
DL: 76 fois
TYPE: image
SIZE: 307Ko

» Hisoft-Pascal_4T-Devpac_3DATE: 2015-01-08
DL: 182 fois
TYPE: image
SIZE: 189Ko

» Zenith_Software-Z-PackDATE: 2015-01-08
DL: 118 fois
TYPE: image
SIZE: 61Ko

Covers:
» Amsoft-HiSoft-Devpac__ENGLISHDATE: 2015-01-08
DL: 157 fois
TYPE: image
SIZE: 274Ko

» Hisoft_Devpac__(Release_TAPE)__SPANISHDATE: 2014-05-05
DL: 186 fois
TYPE: image
SIZE: 418Ko
 

Medias/Supports de stockage:
» Devpac__(Release_DISC-AMSOFT)__ENGLISHDATE: 2016-06-21
DL: 22 fois
TYPE: image
SIZE: 14Ko
NOTE: Uploaded by hERMOL ; w310*h374

» Hisoft_Devpac__(Release_AMSOFT-TAPE)__ENGLISHDATE: 2015-11-11
DL: 23 fois
TYPE: image
SIZE: 100Ko
NOTE: Scan by Loic DANEELS ; w594*h739

» ZEN_Assembler__(Release_TAPE)__ENGLISHDATE: 2015-11-11
DL: 36 fois
TYPE: image
SIZE: 95Ko
NOTE: Scan by Loic DANEELS ; w594*h737

Manuels d'utilisation:
» DAMS__(Manuel_d_utilisation-OCR_by_DRILL)__FRENCHDATE: 2014-05-05
DL: 315 fois
TYPE: PDF
SIZE: 330Ko

» HiSoft-Devpac__(Licence_Statement)__ENGLISHDATE: 2014-05-05
DL: 184 fois
TYPE: image
SIZE: 295Ko

» HiSoft_Devpac_Programmers_Manual__ENGLISHDATE: 2014-05-05
DL: 467 fois
TYPE: PDF
SIZE: 2083Ko

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » La page pédagogique d'hebdogiciel 127: La Memoire
» Coding » La page pédagogique d'hebdogiciel 087: Formation à l'assembleur
» Coding » La page pédagogique d'hebdogiciel 139: La Pile
» Coding » La page pédagogique d'hebdogiciel 127: Registre F
» Coding » La page pédagogique d'hebdogiciel 082: Generalite sur les Routines
» Coding » La page pédagogique d'hebdogiciel 120: Le Pointeur SP

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 092 millisecondes et consultée 635 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.