APPLICATIONSPROGRAMMATION ★ LOGI-ASM ★

Logi-AsmApplications Programmation
Si les mots assembleur, langage machine, évoquent pour vous autant de mystères que les hiéroglyphes égyptiens de la grande pyramide, alors réjouissez-vous : voici Logi-Asm, un assembleur tout à fait performant avec son mode d'emploi, suivi d'explications comme vous en avez toujours souhaité et bientôt d'un véritable cours progressif pour maîtriser les subtilités et les merveilles de ce langage.

LANGAGE MACHINE ET LANGAGE ASSEMBLEUR

Votre CPC possède un processeur principal appelé Z-80 qui gère brillamment un sacré paquet de mémoire (96 ko). Le seul langage qu'il comprend est son langage machine, constitué a instructions opérant sur des registres ou des adresses mémoires. Ce langage n'est pas très évocateur puisqu'il est constitué de suites de 0 et de 1. Ainsi, pour faire comprendre au Z-80 qu'il doit charger le contenu du registre B dans le registre A, on doit taper 01111000 ! Facile à mémoriser, n'est-ce pas? En hexadécimal on tape &78, tandis qu'en langage "assembleur", cette fois c'est nettement plus clair puisqu'on écrit : LD A,B. Le langage assembleur, plus parlant, est donc un langage intermédiaire entre ce que vous voulez faire et ce que comprend le processeur. Il est composé de "mnémoniques", c'est-à-dire de noms plus faciles à retenir, comme LD A,B ou NOP.

QU'EST-CE QU'UN ASSEMBLEUR?

C'est un programme qui a une double tâche : premièrement, celle d'écrire des programmes qu'on appelle des programmes "sources" et, deuxièmement, celle de traduire en langage machine ces programmes sources pour les transformer en programmes "objets".

POURQUOI LE LANGAGE MACHINE?

S'il n'est pas facile d'accéder au langage machine, il y a au moins trois raisons pour essayer. La rapidité incontestable du langage, la compacité de celui-ci (la routine que nous vous proposons en exemple ne comporte pas 300 octets !), et l'accès à toutes les ressources de la machine.

L'ASSEMBLEUR LOGI-ASM POUR BIEN DEBUTER

Avant le chargement de ce programme, il est indispensable de faire un "RESET" complet du CPC. Implanté jusqu'à l'adresse 27000, LOGI-ASM permet de stocker environ 12 ko pour le programme source et le programme objet. Il est en principe impossible d'écraser la "source" par l'"objet"

mais, si certains programmes sont trop longs, il sera nécessaire d'assembler ceux-ci en plusieurs morceaux. Les mnémoniques reconnus sont les mnémoniques officiels de ZILOG (qui donne son initiale au "Z" de Z-80).

Vous pourrez prendre comme livre de référence l'ouvrage "Clefs pour Amstrad", tome 1, Editions P.S.I. La seule instruction qui diffère est [EX AF, AF'] qui doit être écrite [EX AF,AF] sans apostrophe.

L'EDITEUR C'est lui qui permet d'écrire le programme source. Il dispose de deux sortes de commandes.

1) Commandes précédées d'un numéro de ligne (NoL)

  • NoL eff : effaçage de la ligne NoL ;
  • NoL auton : numération automatique des lignes à partir de la ligne référencée et de dix en dix ;
  • NoL autoff : arrêt de la numération automatique.

2) Commandes avec numéro de ligne facultatif

  • renum : renumèration des lignes à partir de la ligne 10 et de dix en dix ;
  • liste : listage du code source à l'écran ;
  • limp : listage à l'écran et sur imprimante ;
  • assem : lancement de l'assemblage ;
  • e/s : accès aux entrées et sorties pour sauvegarde sur cassette ou disque ;
  • fp? : adresse de fin de programme source ;
  • etiq? : listage de toutes les étiquettes rencontrées lors de l'assemblage avec les adresses attribuées.

Remarques :

  1. Le code source avec son adresse d'implantation de chaque code n'apparaît qu'après l'assemblage.
  2. Le listage (aussi bien que l'assemblage) peut être interrompu en gardant appuyée la touche [COPY] jusqu'à apparition d'une étoile (*) en début de ligne. Pour reprendre le listage il faut appuyer sur la touche "flèche en bas" [↓] du curseur et pour revenir à l'éditeur c'est la touche du curseur "flèche en haut" [↑].

L'ASSEMBLEUR

C'est lui qui transforme le code source tapé grâce à l'éditeur en code objet directement compréhensible par la machine. L'assembleur LOGI-ASM reconnaît deux types d'instructions : les mnémoniques ZILOG précédemment cités et des macro-instructions spécifiques ou directives assembleur, facilitant la programmation. Voici ces instructions (avec un exemple de syntaxe sur la deuxième ligne) :

org adresse - org 40000 : Cette directive constitue obligatoirement la première instruction du programme. Elle indique où commence l'implantation du programme machine.

equ etiquette, adresse

equ label,40016 : Assigne une valeur fixée à une étiquette.

(étiquette): defb nombre label: defb 196 : Initialise la case mémoire pointée par le PC avec le nombre codé sur un octet ou la valeur du PC à l'étiquette.

(étiquette): defw nombre tabco: defw 0 : Cette directive est identique à la précédente pour des nombres codés sur deux octets.

(étiquette): defm chaîne alphanum-tabno'.defm QUA : Initialise chaque case mémoire avec le code ASCII des caractères de la chaîne alphanumérique (quatre caractères maximum).

(étiquette):defs n,val defs 55,0 : Initialise n octets à la valeur val (nombres codes sur l'octet).

(étiquette):end adresse : Donne l'adresse où débutera le programme machine lors de son chargement.

Remarques :

  1. Les parenthèses indiquent que les étiquettes ne sont pas obligatoires.
  2. Les mots dits "réservés" ne peuvent être employés dans les étiquettes. Il s'agit des directives assembleurs, des commandes de l'éditeur, des espaces et mots "ix" et "iy" (vous ne pouvez donc pas prendre comme étiquette le mot "org", le mot "renum", le mot "fixe" qui contient "ix", le mot "no m" à cause de l'espace.

COMMENT ECRIRE UN PROGRAMME

Vous aurez à respecter une syntaxe très stricte pour entrer une ligne de programme. Examinons en détail le format d'une ligne : [250 un:ld a,(ix + 0); ix=zone.de.départ]

250 : numéro de ligne. Obligatoire. Suivi immédiatement d'un espace.

un : étiquette. Six caractères maximum ne contenant ni espace ni mots réservés. Suivi immédiatement de deux points [:].

ld a,(ix+0) : mnémonique. Suivi immédiatement d'un espace. Destination. Virgule. Origine. Suivi immédiatement d'un point-virgule [;] ou de [RETURN]

;ix—zone.de.départ : commentaire. Les espaces sont remplacés par des points ou des tirets. Ne pas employer non plus ni virgule [,], ni point-virgule [;]. Suivi immédiatement de [RETURN].

Remarques :

  1. L'argument de djnz ou de jr est obligatoirement une étiquette. Le programme source ne peut pas se terminer par une de ces deux instructions, ni par une directive assembleur. Au besoin rajoutez [nop] (no opération).
  2. Tout nombre peut être entré en décimal ou en hexadécimal borné par [&]. Par exemple : call &BB18&
  3. L'assemblage se fait en deux passes. Durant la première passe l'écran affiche en vert. Si une erreur est détectée, la ligne en défaut est éditée et le type d'erreur est indiqué, l'écran affichant alors en blanc. Il ne vous reste alors plus qu'à retaper la ligne fautive et à redemander l'assemblage. Pendant la deuxième passe l'écran affiche en jaune.

LE LISTAGE

Lorsque vous demanderez "liste" ou "limp", vous verrez apparaître à l'écran, et éventuellement à l'imprimante, des lignes selon le format de l'exemple suivant :

250 .40123 9CBB.DD 7E 00 . un: ld a,(ix+0) ;ix = zone.de.départ

250 : numéro de la ligne dans le programme source.

40123 : adresse décimale d'implantation du premier code machine de la ligne.

9CBB : la même adresse mais en héxadécimal.

DD 7E 000 : les trois codes machine correspondants aux mnémoniques de la ligne.

un : etiquette (elle prendra la valeur 40123 partout ou elle figurera comme argument).

ld : code opération du mnémonique.
a : code destination du mnémonique.

(ix+0) : code origine du mnémonique.

;ix =zone.de.départ : commentaire commençant par un point-virgule [;] (identique au REM Basic).

Remarque : les adresses d'assemblage et les codes machine ne peuvent fort évidemment apparaître qu'une fois l'assemblage effectué. Ils sont dans la première passe remplacée par des zéros.

SAUVEGARDE ET CHARGEMENT

La directive [e/s], entrées/sorties, permet de sauvegarder les programmes source et objet, de les recharger à partir de vos cassettes, d'essayer la routine (attention aux "plantages" si vos programmes ne sont pas entièrement débo-gués!), et de revenir à l'éditeur.

EXEMPLE D'UTILISATION

Le meilleur moyen de comprendre le fonctionnement de LOGI-ASM est de suivre pas à pas les instructions qui suivent.

Le programme que nous vous proposons en exemple est une RSX, c'est-à-dire une commande supplémentaire, qu'on pourra utiliser ensuite en Basic avec la syntaxe suivante:

|QUAD,x1,y1,x2,y2. Cette RSX trace un quadrilatère rectangulaire dont le coin gauche a pour coordonnées (xl, yl) et le coin opposé (x2, y2). Rappelons que le signe| [!] s'obtient en pressant simultanément [SHIFT] et [@] "arrobas".

POUR COMMENCER

Faites un RESET complet du CPC (éteignez l'ordinateur et rallumez-le). Chargez LOGI-ASM par RUN"LOGI-ASM. A l'apparition du message "OK", vous êtes alors en mode éditeur.

RECOPIER LE LISTING SOURCE

  • Tapez "10 auton". Vous passez ainsi en numération automatique.
  • Recopiez avec soin le programme source (en encadré) sans recopier le code machine. Pour la ligne 10 vous ne tapez donc que [org 40000] suivi immédiatement d'[ENTER]. Pour la ligne 100, vous tapez [tabco:defs 0] suivi d'[ENTER].

VERIFIEZ LA FRAPPE

  • Tapez "liste" pour vérifier que vous n'avez pas commis quelque erreur malencontreuse et comparez avec le listing source.
  • Corrigez éventuellement vos fautes. Retapez le numéro de ligne, puis la ligne corrigée.

SAUVEGARDEZ LA SOURCE

  • Tapez "e/s" et sauvegardez le programme source (option 2) en lui donnant par exemple comme nom "RECT". Puis repassez em mode éditeur (option 6).

ASSEMBLEZ

  • Tapez "assem". La première passe commence (affichage vert). En cas d'erreur, attendez le retour du curseur (cela peut durer quelques temps), retapez la ligne fautive, retapez "assem". Quand vous verrez l'affichage passer en jaune, la deuxième passe aura débuté et le programme sera en train de traduire les instructions en langage machine.

SAUVEGARDEZ L'OBJET

  • Sauvegardez immédiatement (option 4) vos codes machine quand vous aurez vu le message "Assemblage terminé" s'inscrire sur l'écran. Par exemple sous le nom "QUAD". En faisant [liste], vous pourrez comparer alors avec le listing que nous vous avons fourni.

UTILISEZ CETTE RSX

  • Faites un RESET de la machine. Tapez : DEFINT x-y puis MEMORY 39999: LOAD"QUAD": CALL 40000: [RETURN] et votre routine est implantée. Pour vous en servir, essayez | QUAD,0,0,639,399. Vous pouvez même paramétrer vos coordonnées. Essayez par exemple ce petit programme Basic : 5 MODE 0: FOR i = 1 T0 10:|QUAD, 30+10*i,30+10*i,500+ 10*i,200+ 10*i: NEXT: LOCATE 7,15: PEN 6: PRINT "logi-asm": CALL &BB06.

Faites RUN suivi d'[ENTER], vous aurez alors une page de présentation tout à fait acceptable.

POUR VOUS REMONTER LE MORAL

Paris ne s'est pas fait en un jour et je ne connais aucun programmeur qui ait réussi à assembler du premier coup le plus simple des programmes ! D'ailleurs, un des dictons des initiés du LM dit à peu près ceci : "Sauve tes programmes avant que tout ne se plante sans que tu saches pourquoi". C'est un conseil que personnellement je suis à la lettre !

Si toutefois un problème vous semblait insurmontable, sachez que nous nous ferons un plaisir de répondre à toutes vos questions, soit dans le journal, soit personnellement si vous avez pris soin de joindre à votre courrier une enveloppe timbrée à vos nom et adresse.

De même, si parmi vous des amateurs mettaient au point des programmes intéressants, c'est avec un grand honneur que nous leur offririons la possibilité de publier leurs œuvres. Ils obtiendront ainsi le grand plaisir d'être dans le journal et une juste compensation financière de leurs efforts. Alors n'attendez plus, à vos claviers !

LOGISTRAD

★ EDITEUR: LOGIPRESSE
★ ANNÉE: 1987
★ CONFIG: ???
★ LANGAGE:
★ LiCENCE: COMMERCIALE
★ COLLECTIONS: LOGISTRAD , LOGISTRAD 11
★ AUTEUR(S): ???
 

★ AMSTRAD CPC ★ DOWNLOAD ★

File:
» Logi-Asm    (Logistrad)    FRENCHDATE: 2018-05-29
DL: 197
TYPE: ZIP
SiZE: 15Ko
NOTE: Uploaded by CPCLOV ; Extended DSK/40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Loriciels - Budget Familial
» Applications » No Man's Land - Budget
» Applications » Lohn und Einkommensteuer 1985 (Computer Technik)
» Applications » Cash Book
» Applications » Budget Familial/Gestion du Budget (Free Game Blot)
» Applications » Comptabilité Generale (Logicys)
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
Page créée en 079 millisecondes et consultée 1234 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.