CODING ★ LES AS SANS PEUR (ET SANS REPROCHES) ★

Assembleur ACPC n 04 - Initiation : Débuter avec sont assembleur
Nous sommes déçus car nous n'avons pas eu beaucoup d'échos à la suite de l'introduction à l'assembleur du mois dernier. Ne pouvez-vous pas écrire au journal pour le secouer un peu ? Et toi, tu ne peux pas te remuer quelque part pour trouver des questions à poser ? Allez, au boulot les aminches. Trimez et vous verrez que c'est en trimant que l'on devient trimeur (qui dit que cela ne veut rien dire ?).

80 : RAPPEL

Si cet intertitre est écrit ainsi, c'est parce qu'en ce moment je passe mon permis moto mais c'est un autre problème, Revenons donc au principal sujet d'intérêt de cette rubrique. Je tenais à rappeler, donc, qu'il ne fallait pas confondre langage machine et assembleur, qui sont deux choses tout à fait différentes. Le premier, le langage machine. est en fait constitué par une suite de valeurs comprises entre zéro et deux cent cinquante-cinq, que le microprocesseur comprend et exécute comme des ordres simples. Il faudrait posséder la mémoire de plusieurs troupeaux d'éléphants pour se rappeler la signification et l'effet de chaque code effectivement compris par le calculateur. C'est pour cela qu'un beau jour un personnage, sûrement louche, a décidé que l'ordinateur ferait l'homme. Et que. par ce fait, l'humain n'aurait plus qu'à se souvenir de mots-clés (représentant les opérations primaires) et de lettres (pour dénommer les principaux registres). Cette forme d'écriture ne s'appelle donc plus le langage machine mais l'assembleur. L'homme ne fait plus d'efforts de traduction pour venir au niveau de !a machine et c'est l'ordinateur lui-même qui transforme les mnémoniques (mots facilement mémorisâmes) en codes machines (interprétables par le microprocesseur). Il est ainsi plus facile à l'homme de retenir, par exemple :

LD A, 12
RET

Plutôt que :

62 12
201

Mais sur le CPC il n'y a pas d'assembleur intégré en ROM. tel que le Basic, et de ce fait, vous êtes contraint de passer par un programme appelé assembleur, qui est en fait pour me répéter, un traducteur de mnémoniques en codes machines. Il en existe de divers types, mais si vous choisissez d'acheter un tel oUTIL, essayez, de préférence, de prendre un kit complet, muni d'un éditeur-asSembleur et d'un moniteur. Le moniteur est un petit programme qui permet de lire le contenu de la mémoire de différentes manières (sous forme de valeurs, de mnémoniques, ou encore d'ASCII ).

PASSONS AUX ACTES

Pour comprendre et utiliser ce qui va suivre, il faut absolument posséder un assembleur car, maintenant, nous sommes grands et capables de nous servir de notre outil (dont nous possédons la documentation puisque nous ne sommes pas de vilains pirates). Trêve de plaisanteries. Nous allons étudier maintenant les différentes mnémoniques utilisées par l'assembleur du Z80. ( Il faut bien se dire que pour chaque microprocesseur différent existent des langages assembleurs différents itou, et il est de plus certain que ces langages sont les moins portables de tous). Nous allons étudier ensemble les plus simples mnémoniques de base de ce subtil charabia.

ORGANISE

Annie aime les sucettes,
Les sucettes à l'anis.
Les sucettes à l'anis d"Annie
Donnent à ses baisers
Un goût anisé.
Ne connaissez-vous pas cette petite chansonnette de France Gall ? Faut dire qu'elle n'est pas jeune (la chanson) mais tout de même, elle vaut la peine d'être connue (la chanson). Tout ceci n'es! en fait là que pour introduire le mot-clé ORG qui est, bien entendu, la forme abrégée du mot organisation. Ce code, suivi d'une adresse, signifie que tout ce qui le suit doit être logé à l'adresse précisée en paramètre- Simple, non ? Ah. pardon, j'allais oublier de préciser que pour dire hexadécimal en assembleur, ce n'est pas le "et" commercial (&) qui est utilisé mais le dièze (#). Patron, exemple S.V.P. :

ORG #9000 ; adresse de départ
DEBUT LD A,7 ; 7 dans l'accumlateur
JP #BB5A ; Vas écrire

Voilà un programme qui sera implanté à l'adresse &9000. L'intérêt de cette routine est nul car elle ne fait que l'équivalent d'un PRINT CHR$(7) Basic. 11 faut aussi savoir que ORG est totalement transparent en mémoire et qu'il n'engendrera donc aucun code machine après assemblage. En bref. ORG précise simplement à l'assembleur où mettre les codes machines exécutables. J'en profite pour glisser dans le monologue qu'un programme écrit en tangage machine ne sera relogeable que si vous vous y efforcez (c'est parfois assez compliqué). C'est pour cela que l'on ordonne à l'assembleur d'écrire le programme exactement à l'endroit où l'on veut qu'il soit en mémoire.
Tiens, vous avez aussi remarqué ? J'en vois, au fond de la classe, qui commencent à se poser des questions. Ce que je veux dire, c'est simplement que ce genre de langage ne se dispose pas en lignes mais en colonnes, comme dans l'exemple ci-dessus. La première de ces colonnes doit contenir, si elle n'est pas vide, une étiquette, la deuxième colonne sera occupée par une mnémonique, la troisième contiendra les registres et/ou les opérandes nécessaires au bon fonctionnement de l'instruction traitée : la dernière colonne sera utiiisée pour les remarques. La plupart des assembleurs, Z80 et autres, utilisent ce genre de format : s'il n'est pas respecté, vous pouvez vous attendre à des messages d'erreur.

TOUT EST RELATIF, COMME
DISAIT FRANCK

Nous avons parié, dans le paragraphe précédent, de la notion d'étiquette. One étiquette est en fait une adresse représentée par une chaîne de caractères. Ainsi, vous pourrez utiliser, pour des branchements dans vos propres programmes, des noms qui seront le reflet d'une adresse vers laquelle le processeur devra se diriger. Ceci est encore une astuce permettant de ne pas avoir à se triturer les méninges. Exemple :

ORG #9000
--------------- ; Plein d'instructions
DEBUT LD A,10 ; Peu importe où c'est
--------------- ; Plein d'instructions
JP DEBUT ; Il sait où il va

Il, dans l'exemple ci-dessus, est en fait le microprocesseur. L'assembleur fera le travail de recherche et de calcul de l'adresse symbolisée par DEBUT. Mais ceci n'est pas seulement valable pour les adresses internes au programme. En effet, l'utilisation de l'instruction EQU permet d'affecter une adresse â un mot. Ainsi, un vecteur souvent utilisé pourra être remplacé par un nom plus convivial qu'un chiffre (de plus, cela évite les plantages bêtes dus à des erreurs d'inattention). Exemple :

ORG #9000
PRINT EQU #BB5A
BIP EQU 7
DEBUT LD A,BIP
JP PRINT

Comme vous avez pu vous en rendre compte, cette instruction sert à affecter une valeur à un nom. Contrairement à une étiquette, il est possible d'assigner, au symbole situé dans la première colonne, une valeur quelconque, qui prendra la place du symbole lors de l'assemblage. Dorénavant, lorsque nous emploierons "étiquette", il faudra entendre ' adresse", et lorsque nous citerons "symbole", vous saurez qu'un nom a été affecté à une valeur donnée. Voilà qui met encore pas mal de choses au point

ILS SONT GIVRES MAIS
CA VA CHAUFFER

Après avoir parlé des constantes figées et dépendantes du processus d'assemblage, nous allons aborder la notion de variables mémoires. Il existe pas mal de différentes syntaxes pour définir un octet, un mot. une chaîne de caractères ou un espace réservé. Nous utiliserons ici la plus courante des notations et ses divers écarts ou abréviations.
L'assembleur n'est pas considéré comme un langage évolué car il est avant tout incapable de gérer directement différents types de variables tels que les réels ou les chaînes de caractères. En l'occurrence, le Z80 ne sait travailler qu'avec des mots de seize bits et des octets (de huit bits). Toutes les opérations effectuées sur des objets plus complexes que ces données simples ne sont qu'une suite de milliers de traitements logiques réalisés sur des mots ou des octets. Nous verrons ces opérations plus ou moins complexes plus ou moins plus tard et, en attendant, nous allons passer en revue les simples mots-clefs permettant à l'assembleur de gérer l'espace mémoire.
Cette opération n'est en fait nécessaire que pour l'homme car. encore une fois le microprocesseur ne fait aucune différence entre un nombre et un caractère. Il faut voir cela de la même manière que les variables Basic sauf qu'ici il n'y a pas de syntax error : ce qui fait véritablement la puissance de ce langage, c'est que n'importe quelle donnée peut être traitée de n importe quelle manière. Mais voici l'énoncé rapide des différentes possibilités de gestion de la mémoire par l'intermédiaire de l'assembleur.

DES FINITIONS

Il existe donc différentes manières de coder les données en mémoire. Nous allons les citer en fonction du type de données stockées. Le plus simple est de commencer par l'instruction qui permet de stocker l'élément de base, c'est-à-dire l'octet.

ADROCT DEFB 00

Ou

ADROCT DB 00

Ces instructions permettent de forcer la case mémoire Adroct à zéro. Elles sont identiques et dépendent simplement par leur syntaxe, du type d'assembleur Utilisé. Il est possible de mettre plusieurs octets à la suite du mot-clef pour ne pas utiliser autant de lignes que de données, de la manière suivante par exemple :

DB 12,11,10,9,8

De plus, certains assembleurs acceptent un caractère entre guillemets, ce qui évite de rechercher le code Ascii de la donnée à stocker :

DB "A" ; Ascii

Maïs les possibilités d'un assembleur ne s'arrêtent pas ici car il faut aussi pouvoir jongler avec les différentes bases mathématiques. Ainsi, l'instruction précédente équivaut à :

DB 65 ; Décimal
DB #41 ; Hexadécimal
DB %01000001 ; Binaire

(La dernière ligne, qui concerne le binaire, est en fait rarement disponible car très peu d'assembleurs travaillent dans cette base. Cela peut être décevant car il est parfois utile, pour des masquages par exemple, de pouvoir disposer de cette option.) Etant donné que nous avons parlé de caractères, il est de bon aloi d'introduire des chaînes du même genre. Des ordres permettent de ranger des chaînes de caractères de la manière suivante :

ADRCHAI DEFM Salut amis lecteurs ; Format DAMS
ADRCHAI DB "Salut amis lecteurs" ; Format Devpac & Pyradev

Ces deux façons d'implanter une chaîne de caractères en mémoire sont encore dépendantes du type d'assembleur utilisé. Une troisième option est parfois offerte à l'utilisateur. Elle permet de remplir une zone définie de mémoire avec une valeur précisée. Sa syntaxe est la suivante :

DEFS 100,0

100 représente le nombre d'octets à remplir, et 0 est la valeur de remplissage. Cela sert à initialiser une zone fixe pour des stockages éventuels.
Le dernier type de gestion de mémoire est un peu spécial car il obéit à une règle fixée par le Z80 lui-même. Cette instruction, DEFW. permet de stocker un mot (2 octets) en mémoire mais ceci à la façon du Z80. Ce microprocesseur, comme beaucoup de faux 16 bits, stocke un mot dans le désordre (pour l'homme). Un exemple sera ici plus parlant que mille mots. Si vous tapez :

ORG #A000
DEFW #1234

il apparaîtra à l'adresse &A000, non pas &12 mais &34. L'adresse &A001 sera, elle, occupée par la valeur &12. Nous verrons plus tard pourquoi il faut stocker des variables de cette manière. Voilà, ce cours va se terminer ici et il ne tient qu'à vous de poursuivre seul l'étude des différentes commandes de votre assembleur.

CALL MOIS-PROCHAIN

Le mois prochain, nous continuerons l'étude des assembleurs et surtout celle du langage utilisé par ses fantastiques traducteurs. Pour le moment, il serait bien que vous nous écriviez pour nous faire part de quelques suggestions qui nous permettraient de mieux cibler cette initiation. Alors au mois prochain. Et tripotez bien votre CPC de ma part
Lusse !

Sibar le Nénede , A100% n°4 , p66-67-68

Page précédente : Bidouilles ACPC n 03 - Les Instructions supplemetaires du Z80
★ AMSTRAD CPC ★ DOWNLOAD ★

Files:
» Amsoft  devpacDATE: 2006-08-02
DL: 1537
TYPE: ZIP
SiZE: 17Ko
NOTE: Extended DSK/40 Cyls
.HFE: Χ

» DAMSPACKDATE: 2002-12-14
DL: 874
TYPE: ZIP
SiZE: 18Ko
NOTE: Basic 1.1/40 Cyls
.HFE: Χ

» DAMS  6128    FRENCHDATE: 2015-07-09
DL: 531
TYPE: ZIP
SiZE: 14Ko
NOTE: 40 Cyls
.HFE: Χ

» DAMS  Converter  v1.0    ENGLISHDATE: 2018-07-29
DL: 391
TYPE: ZIP
SiZE: 9Ko
NOTE: Uploaded by CPCLOV ; Extended DSK/40 Cyls
.HFE: Χ

» DAMS  Converter  v1.1DATE: 2006-07-26
DL: 867
TYPE: ZIP
SiZE: 7Ko
NOTE: 42 Cyls
.HFE: Χ

» Dams  notice  FRDATE: 2002-11-15
DL: 794
TYPE: ZIP
SiZE: 19Ko
NOTE: |DEK|
.HFE: Χ

» DAMS  Overdrive  v1.0DATE: 2006-07-26
DL: 805
TYPE: ZIP
SiZE: 13Ko
NOTE: 42 Cyls
.HFE: Χ

» DAMS  OVL  v1.2DATE: 2019-03-10
DL: 386
TYPE: ZIP
SiZE: 23Ko
NOTE: Uploaded by CPCLOV ; Extended DSK/40 Cyls
.HFE: Χ

» DAMS  OVL    ROMDATE: 1992-09-16
DL: 987
TYPE: ZIP
SiZE: 22Ko
NOTE:
.HFE: Χ
.ROM: √

» DAMS  v1.2    (Incl.  Manual)    FRENCHDATE: 2021-08-19
DL: 805
TYPE: ZIP
SiZE: 25Ko
NOTE: 40 Cyls
.HFE: Χ

» DAMS  v1.2    SOURCEPACKDATE: 2016-03-04
DL: 411
TYPE: ZIP
SiZE: 66Ko
NOTE:
.HFE: Χ

» DAMS    (Keypad  patched  version)DATE: 2013-06-17
DL: 972
TYPE: ZIP
SiZE: 13Ko
NOTE: 40 Cyls
.HFE: Χ

Type-in/Listing:
» DAMS-CPM    (CPC  Revue)    FRENCHDATE: 2020-04-29
DL: 725
TYPE: ZIP
SiZE: 8Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Coding » Assembleur ACPC n°44 - La programmation HARD du PSG
» Coding » Bidouilles ACPC n°32 - RSX ùPEEK
» Coding » Assembleur ACPC n°21 - CRTC + astuces
» Coding » Bidouilles ACPC n°16 - Bidouilles bizarres
» Coding » Assembleur ACPC n°20 - Convertion numerique
» Coding » Bidouilles ACPC n°30 - Catalogue et heresie
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 805 millisecondes et consultée 2661 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.