CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

4/1.6.3 - La gestion des variables dans les Amstrad CPC (14e Complément)Coding Classeurs Weka
4/0 - Langages du CPC

4/1.6 - Basic approfondi

4/1.6.3 - La gestion des variables dans les Amstrad CPC

Le Basic LOCOMOTIVE des Amstrad CPC permet de gérer trois types de variables standard propres à beaucoup de micro-ordinateurs :

— les variables entières : définies par la fonction DEFINT Variable et souvent accompagnées du symbole % (Var%) ;
— les variables réelles, encore appelées variables en virgule flottante :

définies par la fonction DEFREAL Variable et ne comportant pas

de distinction particulière ;

— les variables chaîne de caractères, ou variables alphanumériques : définies par la fonction DEFSTR Variable et souvent accompagnées du symbole $ (Var$). On remarquera que, si la variable X a été définie en variable alphanumérique, il n'est plus utile de l'accompagner du symbole $.

Lorsqu'ils sont utilisés ou définis, les noms et les caractéristiques de ces variables sont sauvergardés dans un tableau, ce qui permettra au programme de les retrouver rapidement pour en modifier leur contenu. Ce contenu est lui-même sauvegardé dans une autre zone de la mémoire RAM.

I. Les variables entières

Les variables entières sont des variables numériques qui peuvent contenir des nombres entiers compris entre —32768 et +32767.

Comme ces valeurs sont inscrites dans la mémoire sous forme hexadécimale (et comprises en binaire par le microprocesseur), ces nombres seront codés sur deux octets, et occuperont donc deux adresses.

Exemple :  31438 décimal=7A CE hexa
31438 décimal=00 E7hexa
octet de
poids faible
octet de
poids fort

Ce qui nous intéressera le plus, surtout si l'on programme en assembleur, c'est la position (l'adresse) de ces deux octets dans la mémoire, afin de les récupérer, si besoin, dans une routine en langage machine.

Le Basic LOCOMOTIVE nous permet de retrouver l'adresse de cette valeur grâce à l'instruction @, qui correspond à l'instruction du Basic standard : VARPTR.

Lorsque l'on exécute l'instruction @Variable, le résultat est ce que l'on appelle le pointeur de la variable. Ce pointeur indique l'adresse de l'octet de poids faible de la valeur ; l'octet de poids fort se trouvant à l'adresse immédiatement supérieure.

Si vous frappez par exemple a% = 3425 qui définit directement la variable a% en tant que variable entière et lui affecte la valeur décimale 3425.

Par l'exécution de la commande PRINT@a% vous obtiendrez la position du poids faible de cette valeur dans la mémoire.

Si vous voulez retrouver la valeur complète, vous pourrez la récupérer par la commande :

PRINT UNT( PEEK(@a% + 1) * 256 + PEEK ( @a% ) )

UNT tient compte du signe de l'octet.

II. Les variables en virgule flottante

Il nous arrive de travailler avec des nombres en virgule flottante lorsque nous voulons effectuer des calculs avec des nombres très grands. Un nombre en virgule flottante est composé d'une partie décimale avec un seul chiffre après la virgule (appelée MANTISSE) et d'une puissance de dix.

Exemple : le nombre 65535 deviendra 6.5535 x 104 et sera noté 6.5535 E + 4.

Dans la mémoire du CPC, les nombres en virgule flottante sont sauver-gardés sous la forme de cinq octets. Les quatre premiers octets représentent la mantisse (signe compris) et la cinquième représente la puissance, cette fois-ci, de 2 en arithmétique signée aussi. Les nombres ainsi utilisés peuvent prendre des valeurs comprises (en décimale) entre - 1 E + 39 et +1 E + 39 pour les grands nombres, entre - 1 E - 39 et + 1 E-39 pour les nombres proches de zéro.

Le pointeur de variable nous indiquera l'adresse de l'octet de poids le plus faible, les trois autres octets se trouvant rangés par ordre d'adresses croissantes, le cinquième octet étant la mantisse.

III. Les variables alphanumériques

Ces variables sont composées de caractères alphanumériques, et éventuellement de caractères de contrôle.

Ce sont les codes ASCII de ces caractères qui sont rangés en mémoire, et auxquels on peut avoir accès.

Contrairement aux variables numériques, dont les longueurs sont fixées en fonction du type, une chaîne de caractères peut contenir entre 0 et 255 caractères. Prendre pour chaque variable utilisée le maximum utili-

sable, c'est-à-dire 255 caractères, ferait perdre une place énorme en mémoire, car il est bien rare d'utiliser à chaque fois autant de signes alphanumériques.

Aussi le repérage de ces variables est-il décomposé en deux parties : une partie indiquant la longueur de la chaîne de caractères sur un octet, l'adresse où la retrouver sur deux octets, la deuxième partie étant composée du contenu de la variable, rangée à l'adresse indiquée.

Nous pouvons encore une fois accéder à la variable, mais cette fois-ci en deux étapes, grâce au pointeur de variables.

L'adresse du pointeur de variable nous donnera le nombre de caratères contenus dans la variable, les deux adresses supérieures, nous donneront le poids faible, puis le poids fort de l'adresse où se trouve la chaîne de caractères.

Prenons pour exemple l'affectation de la chaîne ABCDE à la variable A$, par la commande : A$ = « ABCDE »

PRINT PEEK (@A$) nous donnera la valeur 5, longueur de la chaîne de caractères.

X = 256 *PEEK (@A$ + 2) + PEEK (@A$ + 1)

nous rangera l'adresse de la chaîne de caractère dans la variable X.

Pour lire la chaîne, il suffit de frapper la ligne suivante :

FOR I = 0 TO 4 : PRINT CHR$( PEEK (X + 1 ) ); : NEXT I

Nous avons surtout mis en évidence la possibilité de retrouver la place d'une variable quelconque en mémoire. Vous pouvez ainsi découvrir comment l'Amstrad gère ces variables, lorsque, par exemple, leur contenu est modifié. Mais, la fonction la plus intéressante du pointeur de variable est de servir au passage de la variable à une routine en langage machine (on appelle cela le passage de paramètre), puisque c'est le pointeur qui devra être fourni.

Page précédente : 4/1.6.2 - L'instruction CALL et les RSX en Basic
Je participe au site:

» 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 582 millisecondes et consultée 336 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.