★ APPLICATIONS ★ PROGRAMMATION ★ LOGI-ASM ★ |
Logi-Asm | Applications 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)
2) Commandes avec numéro de ligne facultatif
Remarques :
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 :
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 :
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. (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
VERIFIEZ LA FRAPPE
SAUVEGARDEZ LA SOURCE
ASSEMBLEZ
SAUVEGARDEZ L'OBJET
UTILISEZ CETTE RSX
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 !
|