★ CODING ★ CLASSEURS 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 CPC4/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%) ; 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.
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 INous 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.
|