★ CODING ★ AMSTRAD CPC 464 - CRÉER DE NOUVELLES INSTRUCTIONS ★ |
Nouvelles Instructions 002 |
CONNAISSANCES DE BASE LA NOTATION HEXADÉCIMALE : OCTETS FORTS ET OCTETS FAIBLES Il serait toujours possible, si on le souhaitait vraiment, de travailler en langage machine en fournissant à l'ordinateur des données sous une forme que tout le monde connaît : la notation décimale.
Pour découvrir de quoi il s'agit exactement, commencez par taper ceci sur votre machine (le mode direct suffira, c'est-à-dire qu'il est inutile de mettre un numéro de ligne) : PRINT HEX$ (43870)La réponse qui s'affiche est: AB5E. La fonction HEX$ a transformé la représentation décimale de 43870 en sa représentation hexadécimale. Les deux chiffres ou lettres de droite sont appelés l'octet de poids faible, et les deux de gauche l'octet de poids fort (dans l'exemple, l'octet de poids faible est 5E et l'octet de poids fort AB). Exemples 2060 est représenté en hexadécimal par 80C, qui est l'équivalent de 080C. L'octet de poids faible est donc OC et l'octet de poids fort 8. HEX$ (255) = FF, ce qui est l'équivalent de OOFF. Dans ce cas, l'octet de poids faible est FF et l'octet de poids fort 0 (ou, si l'on veut, il n'y a pas d'octet fort – nous verrons toutefois que la nuance peut être importante). Exemple HEX$ (648) = 288 et &88 + 256 * &2 = 648Le signe & signale à l'ordinateur que le chiffre qui lui est transmis est en notation hexadécimale.
Exemple UNT (&FFEB) = - 21 et &EB + 256 * &FF = 65515Mais, répétons-le, tout cela n'a pour le moment aucune importance. Pour en donner une idée claire, on pourrait dire que la programmation en langage machine consiste pour une grande part en une manipulation de différentes "boîtes" dans lesquelles il est possible de mettre des valeurs, et que l'on peut par exemple additionner et soustraire entre elles. Chacune de ces boîtes, que l'on appelle registre, a un nom. Nous nous intéresserons pour l'instant à sept de ces registres : A, B, C, D, E, H et L. Ce sont, en fait, des registres simples mis deux à deux. Nous en utiliserons trois : BC, DE et HL. Ce dernier exemple amène une remarque importante : pour charger un registre double avec un nombre inférieur ou égal à 255 (donc n'ayant pas d'octet fort), il faut considérer que l'octet fort vaut 0 et le charger dans le registre correspondant. Pour conclure, signalons enfin que nous serons amenés à nous servir également d'un registre double un peu particulier, le registre IX. Ce registre est appelé le registre d'index. Pour nous, la pile ne sera rien de plus que ce que son nom indique : un certain nombre de données empilées les unes sur les autres. Peu importe de savoir comment elle est gérée par la machine, l'essentiel étant de savoir l'utiliser. Imaginons que vous soyez en train de faire la vaisselle. Vous lavez d'abord une assiette rouge que vous posez quelque part en attendant le rinçage. Vous en lavez ensuite une bleue que vous posez sur la rouge, puis une jaune que vous posez sur la bleue. Le lavage terminé, vous attaquez maintenant le rinçage. Si vous prenez vos assiettes comme elles se présentent sur la pile, la première à être rincée sera la dernière qui a été posée, en l'occurrence la jaune. C'est le principe de base de la pile : dernier élément entré, premier élément sorti (en anglais, c'est une pile LIFO Last In/First Out). Dans nos programmes, nous utiliserons souvent la pile pour y stocker provisoirement des données, car c'est un moyen commode et rapide. Son fonctionnement peut paraître simple, pour ne pas dire simplet, mais vous verrez que l'on a vite fait de s'y perdre, si l'on n'y prend pas garde, lorsque les données s'accumulent. C'est un registre que nous n'utiliserons pas directement et, là encore inutile de s'encombrer de détails superflus. Il suffit de nous imaginer ce registre comme une boîte comportant huit cases, ou indicateurs, ayant chacune un numéro, et parfois un nom : Dans chacune de ces "cases", il peut y avoir 1 ou 0 : on dit que tel indicateur est mis à 1 ou 0.
L'indicateur 6 est appelé l'indicateur de zéro (Z), et le 7 l'indicateur de signe (S). Remarque Certaines opérations n'entraînent aucune modification des indicateurs, et cela quel que soit le résultat. En outre, certaines instructions conditionnelles ne peuvent s'utiliser qu'en fonction par exemple de l'indicateur 6, et non pas en fonction du 7 (ou vice versa). Le CPC est un ordinateur ayant une RAM (mémoire vive) de 64K, ce qui signifie 64x1 024 = 65 536 octets ou cases mémoire, ayant chacune une adresse de 0 à 65535. Lorsque vous écrivez un programme BASIC, il est codé par la machine et stocké à partir de l'adresse la plus basse (368). Plus le programme s'allonge, plus la mémoire se remplit. En outre, il peut arriver que l'exécution d'un programme nécessite des cases mémoire dans les adresses les plus hautes (43903 et au-dessous). MEMORY 10000les cases mémoire allant de 10001 à 43903 resteront vierges de toute intrusion, et le BASIC restera confiné entre les adresses 368 et 10000. Il ne s'agit là que d'un exemple, et nous n'aurons fort heureusement pas à réserver des zones de mémoire aussi importantes. Un programme en langage machine de 500 octets, par exemple, représente déjà un programme tout à fait considérable. Ceux que nous vous proposerons dans cet ouvrage tournent autour de 100 ou 200 octets. Un MEMORY 43600 serait donc tout à fait suffisant, la perte de mémoire négligeable, et rapidement amortie. Nous utiliserons l'espace mémoire ainsi ménagé de deux manières : d'une part pour y écrire nos instructions, et d'autre part, bien que plus rarement, pour y stocker des données. Il importe dès à présent de bien distinguer l'adresse d'une case mémoire de son contenu. Exemple Case mémoire d'adresse 43000 (&A7F8) Case mémoire d'adresse 43001 (&A7F9) Le processeur Z 80 possède un nombre considérable d'instructions de base : 158. Pour ce qui nous concerne, nous nous contenterons d'en utiliser 35, et vous pourrez constater qu'avec ce nombre réduit, il est déjà possible de faire un certain nombre de choses. Deux exemples &19 signifie : "Additionner les registres HL et DE". |
|
Page précédente : Nouvelles Instructions 001 |
|
Page créée en 326 millisecondes et consultée 1345 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. |