Manuel Amos Professional  Sommaire  Index

Code Machine


La moindre erreur dans vos calculs d'adresse fera planter AMOS Professional, il est donc vital de sauvegarder vos programmes avant de tenter de modifier vos variables de cette manière.

Avec les programmes en code machine, VARPTR peut également être utilisé pour manipuler directement des chaînes entières ou des tableaux. Chaque type de variable est stocké dans son propre format individuel, comme indiqué ci-dessous.

Les entiers sont stockés sous forme d'un simple groupe de quatre octets. Ils peuvent être lus depuis votre programme Basic avec LEEK, et modifiés par LOKE. Voici un exemple de cette méthode (dangereuse) :

E> ANSWER=43 : Rem Charger une variable
   AN=Varptr(ANSWER) : Rem Trouver l'adresse de la variable
   Loke AN,LEEK(AN)-1 : Rem Équivalent à ANSWER=ANSWER-1
   Print ANSWER

Les nombres à virgule flottante sont stockés sous forme de quatre octets, en utilisant le format spécial Fast-Floating point. Toutefois, si DOUBLE PRECISION est utilisé, les nombres à virgule flottante sont stockés sous forme d'un groupe de huit octets au format IEEE double précision.

Les chaînes sont stockées sous forme d'une série de caractères au format Ascii standard. L'adresse donnée par VARPTR pointe vers le premier caractère de la chaîne, et celui-ci peut être examiné avec PEEK ou remplacé en utilisant POKE. Notez que la longueur de la chaîne est contenue dans deux octets situés immédiatement avant la chaîne. Cela signifie qu'elle peut être chargée dans Basic avec une ligne comme celle-ci :

X> Print Deek(Varptr(A$)-2) : Rem Équivalent à Print Len(A$)

Une application de cette fonction est de renvoyer la valeur Ascii d'un seul caractère dans une chaîne AMOS Professional. La méthode standard consiste à utiliser les fonctions ASC et M1D$, comme ceci :

X> A=Asc(Mid$(A$),C,1) : Rem Renvoie le code Ascii du caractère C dans A$

En utilisant VARPTR, cela pourrait être remplacé par la ligne suivante :

X> A=Peek(Varptr(A$)+C)

Pour éviter tout danger, des précautions particulières doivent être prises avant de pokér de nouvelles valeurs dans une chaîne. Au cours d'un programme, l'adresse d'une chaîne peut changer plusieurs fois, il est donc vital de charger l'adresse actuelle d'une chaîne en utilisant VARPTR juste avant que cette chaîne ne soit utilisée.

AMOS Professional réorganise régulièrement toutes les chaînes en mémoire, en utilisant un processus de "ramassage des ordures". Cela libère de l'espace précieux nécessaire aux variables, et est essentiel au bon fonctionnement du système. Mais si vous souhaitez passer l'adresse d'une chaîne comme paramètre de procédure, le ramassage des ordures peut semer le chaos. La solution évidente est de collecter les ordures avant que l'adresse ne soit calculée, en utilisant une simple ligne comme celle-ci :

X> X=Free
Retour    Suivant
14.A.07