Micros ID n°1 décembre 1986
Micros ID n°1 décembre 1986
  • Prix facial : 22 F

  • Parution : n°1 de décembre 1986

  • Périodicité : trimestriel

  • Editeur : Mieva Presse

  • Format : (201 x 296) mm

  • Nombre de pages : 84

  • Taille du fichier PDF : 72,6 Mo

  • Dans ce numéro : Sony contre Amstrad : le combat

  • Prix de vente (PDF) : gratuit

Dans ce numéro...
< Pages précédentes
Pages : 28 - 29  |  Aller à la page   OK
Pages suivantes >
28 29
2 ; 3\Dès ce numéro, nous vous proposons de découvrir l'assembleur du processeur Z80 d'une façon originale et agréable. Aucune disposition particulière n'est indispensable pour aborder cette série d'articles. Dans un premier temps, nous allons détailler les analogies entre des instructions Basic bien connues de tout le monde et des instructions, ou séquences d'instructions, en assembleur permettant l'obtention d'effets similaires. La plupart des commandes Basic qui sont utilisées en mode direct sont sans objet en assembleur. LIST, NEW, RENUM, et AUTO par exemple ne correspondent à rien. Elles se retrouveront plutôt au niveau de l'éditeur de texte qui, dans le cas de l'assembleur, est toujours un programme distinct. Toutes les autres instructions sont simulables avec plus ou moins de facilité. Il n'est pas impensable de réaliser un programme qui effectue la transformation directe de tous les ordres du Basic en assembleur. Un tel programme existe déjà pour le Basic Microsoft standard. Il s'agit simplement du « compilateur basic ». A l'issue de cet article, vous ne serez sans doute pas capable d'écrire un compilateur mais vous comprendrez certainement mieux les arcanes qui sous-tendent son fonctionnement. LES VARIABLES La notion de variable est inconnue des assembleurs. Il existe un petit nombre de registres qui peuvent être utilisés comme des variables (A, B,C, D, E, H,L, etc). Cependant, leur taille est limitée (8 ou 16 bits) et ils sont trop peu nombreux pour permettre une utilisation sérieuse. Certains compilateurs (les compilateurs C par exemple) permettent d'affecter directement une variable entière fort utilisée à un registre. Avec les registres, l'affectation des variables est très simple. LET B=57 peut s'écrire facilement LD A,57 ou LDC,57 (le registre importe peu). L'égalité de variables n'est pas plus compliquée à réaliser. LET K=L s'écrira LD A,B ou LD H,C. Les opérations mathématiques simples sur des variables ne peuvent malheureusement s'effectuer que sur l'accumulateur (A) LET F=F+4 peut s'écrire ADD A,4 LET F=G-3 peut s'écrire LD A,B suivi de SUB A,3 LET F=F+G peut s'écrire ADD A,B Langages ASSEMBLEUR Z80 Pour pallier aux limitations des registres, il faut passer par la mémoire centrale pour sauvegarder les valeurs temporaires des variables. Cette méthode permet de mémoriser n'importe quel nombre aussi grand soit-il. Celui-ci tient alors sur 2, 4 ou 8 octets, et parfois même plus. Le nombre de variables ne dépend plus alors que de la taille de la mémoire centrale disponible. La méthode présente cependant un inconvénient de taille. En effet, il faut retrouver la position mémoire de chaque variable de façon simple et rapide. Il est donc nécessaire d'utiliser une table annexe de correspondance entre le nom symbolique de la variable et son contenu intrinsèque. L'affectation s'opère par l'intermédiaire d'un registre qui point:.. ; ur l'adresse de mémorisation de la variable. Pour la simplicité des exemples, nous nous sommes limités à des variables entières (16 bits). LET Z=1234 peut s'écrire LD HL,ADR (ADR représente l'adresse) LD (HL),1234 ou encore : LD HL,1234 LD (ADR),HL LET Z=X peut s'écrire LD HL,(ADRX) (ADRX= l'adresse de X) LD (ADRZ),HL (ADRZ= l'adresse de Z) De façon indirecte en utilisant les registres, on peut écrire : LD HL,ADRZ LD DE,ADRX LD A,(DE) LD (HL),A INC DE Il y a deux octets... INC HL...à transférer !. LD A,(DE) LD (HL),A Cette routine est la plus proche de celles employées réellement dans un système complexe. En effet, l'adresse de mémorisation des variables (X et Z) s'obtient en général dans une table et se retrouve dans un registre. Les opérations arithmétiques restent souvent complexes à gérer. Elles peuvent constituer une grande partie des routines d'un compilateur ou d'un interpréteur. Seules l'addition et la soustraction d'entiers (16 bits) peuvent se faire simplement en utilisant les registres HL et DE.
▪ permet toujours de simuler une boucle, quelle que soit sa complexité. La boucle Basic (FOR NEXT STEP) contient 6 éléments : — le début de la boucle caractérisé par le mot FOR — La valeur de départ de l'index de boucle (I=n) — La valeur de fin de la boucle (TO m) — Le pas d'incrémentation (STEP p) — Le corps de la boucle — La fin de la boucle (NEXT) En assembleur, on utilise les mêmes éléments : — Le début de la boucle qui est caractérisé par une étiquette — La valeur de départ de la boucle (nombre entier) — La valeur de fin de la boucle (en général 0) — Le pas qui est toujours d'une unité — Le corps de la boucle — La fin de la boucle qui est constituée par un saut conditionnel. EXEMPLES : en basic FOR 1=1 TO 10 NEXT I corps de boucle en assembleur LD A,10 LOOP corps de boucle DEC A JP NZ,LOOP en basic FOR J=1 TO 1000 NEXT I corps de boucle en assembleur LD BC,1000 LOOP corps de boucle Lemmes- ASSEMBLEUR Z80. LES SAUTS ET LES TESTS Les sauts sont les instructions les plus simples à manipuler en assembleur. Certaines remarques s'imposent cependant. Le saut en Basic (GOTO) fait référence à une étiquette symbolique - le numéro de ligne ou même, sur certains Basic, un mot clair. En langage machine le saut se fait soit de manière absolue (JP) vers une adresse mémoire précise, soit de façon relative (JR) en indiquant un déplacement relatif par rapport à la position courante du compteur d'instruction (PC). Les assembleurs convenables utilisent des étiquettes symboliques pour identifier le point d'arrivée d'un saut. Les tests ne s'opèrent pas de façon similaire en Basic et en assembleur. En Basic, une instruction de test IF est suivie d'une séquence d'instructions exécutées si la condition spécifiée est vraie (THEN) ou si la condition est fausse (ELSE). En assembleur Z80, les test se font sur une série de bits d'un registre particulier appelé registre d'état (F). En fonction du positionnement de ces bits (flags ou sémaphores), le programme prend une direction ou une autre à l'aide d'un saut conditionnel. Les principaux sémaphores permettent de tester la valeur zéro de l'accumulateur, la valeur négative (signe), la parité (nombre de bits à 1 ou à 0) et le débordement d'opération mathématique. LES SOUS-ROUTINES L'instruction Basic de branchement à un sousprogramme (GOSUB) est fort proche de l'instruction assembleur CALL. Ce qui a été dit pour les sauts (GOTO) et pour les tests s'applique totalement aux sous-routines. LES BOUCLES Pour terminer ce premier article, analysons les boucles. Celles-ci sont beaucoup plus souples en Basic qu'en langage machine, cependant un peu d'astuce LD OR C JP NZ,LOOP Daniel Martin



Autres parutions de ce magazine  voir tous les numéros


Liens vers cette page
Couverture seule :


Couverture avec texte parution au-dessus :


Couverture avec texte parution en dessous :


Micros ID numéro 1 décembre 1986 Page 1Micros ID numéro 1 décembre 1986 Page 2-3Micros ID numéro 1 décembre 1986 Page 4-5Micros ID numéro 1 décembre 1986 Page 6-7Micros ID numéro 1 décembre 1986 Page 8-9Micros ID numéro 1 décembre 1986 Page 10-11Micros ID numéro 1 décembre 1986 Page 12-13Micros ID numéro 1 décembre 1986 Page 14-15Micros ID numéro 1 décembre 1986 Page 16-17Micros ID numéro 1 décembre 1986 Page 18-19Micros ID numéro 1 décembre 1986 Page 20-21Micros ID numéro 1 décembre 1986 Page 22-23Micros ID numéro 1 décembre 1986 Page 24-25Micros ID numéro 1 décembre 1986 Page 26-27Micros ID numéro 1 décembre 1986 Page 28-29Micros ID numéro 1 décembre 1986 Page 30-31Micros ID numéro 1 décembre 1986 Page 32-33Micros ID numéro 1 décembre 1986 Page 34-35Micros ID numéro 1 décembre 1986 Page 36-37Micros ID numéro 1 décembre 1986 Page 38-39Micros ID numéro 1 décembre 1986 Page 40-41Micros ID numéro 1 décembre 1986 Page 42-43Micros ID numéro 1 décembre 1986 Page 44-45Micros ID numéro 1 décembre 1986 Page 46-47Micros ID numéro 1 décembre 1986 Page 48-49Micros ID numéro 1 décembre 1986 Page 50-51Micros ID numéro 1 décembre 1986 Page 52-53Micros ID numéro 1 décembre 1986 Page 54-55Micros ID numéro 1 décembre 1986 Page 56-57Micros ID numéro 1 décembre 1986 Page 58-59Micros ID numéro 1 décembre 1986 Page 60-61Micros ID numéro 1 décembre 1986 Page 62-63Micros ID numéro 1 décembre 1986 Page 64-65Micros ID numéro 1 décembre 1986 Page 66-67Micros ID numéro 1 décembre 1986 Page 68-69Micros ID numéro 1 décembre 1986 Page 70-71Micros ID numéro 1 décembre 1986 Page 72-73Micros ID numéro 1 décembre 1986 Page 74-75Micros ID numéro 1 décembre 1986 Page 76-77Micros ID numéro 1 décembre 1986 Page 78-79Micros ID numéro 1 décembre 1986 Page 80-81Micros ID numéro 1 décembre 1986 Page 82-83Micros ID numéro 1 décembre 1986 Page 84