Premiere approche:
il y a deux possibilités pour accéder à une variable
- par son nom , l'adressage immédiat
- par son adresse, l'adressage indirect
l'utilisation des pointeurs est liés à la mémoire puisqu'un pointeur est une variable spéciale qui contient toujours une adresse mémoire.
Toutes les variables d'un programme sont contenus en mémoire dans des cases que l'on nomme adresses. A une adresse correspond un octet, une variable occupera un ou plusieurs octets suivant son type.Il faut bien différencier le contenu d'une variable avec son adresse.
Exemple: nombre.w=256 nombre ici est de type word, il est donc définit sur deux octets mais son adresse mémoire est définit sur 4 octets(système window 32bits).
Cela signifie que la variable nombre occupe deux adresses mémoires contenant chacune 1 octet. Une variable peut donc occuper plusieurs adresses mémoires d'octets contigüs.
Connaissant le type d'une variable, seul nous est nécessaire de connaitre la première adresse d'une variable contenant l'octet de poid faible.
la représentation de 256 sur deux octets donne 0 pour le premier et 1 pour le deuxième.
L' adresse mémoire d'une variable ne change pas au cours d'un programme, elle reste la même pendant toute la durée de vie de la variable; c'est window qui la détermine à chaque lancement du programme.
-les variables numériques:
soit une variable: nombre.w
pour connaitre son adresse mémoire (adresse mémoire de l'octet de poid faible) je place un @ devant le nom de la variable: soit @nombre
Ensuite à partir de son adresse, je peux lire ou écrire dans cette variable de deux manières. La première sont les instructions Peek (lecture) et poke (écriture) que l'on complète par une lettre suivant le type de la variable qui va déterminé le nombre d'octets à lire.
Comme nombre est déclaré de type word, nous utiliserons PeekW et PokeW
Code : Tout sélectionner
; Exemple pratique:
nombre.w=256
adresse=@nombre
debug peekW(@nombre)
Code : Tout sélectionner
; Allons un peu plus loin
; nombre est définit sur deux octets et à chaque octet correspond
; une adresse mémoire, nous allons le vérifier
; pour lire chaque octet, nous utiliserons PeekB.
nombre.w=256
adresse1=@nombre
adresse2=@nombre+1
debug peekb(adresse1) ; le premier octet de la premiere adresse
;memoire de la variable est 0 comme expliqué plus haut
debug peekb(adresse2) ; le deuxième contient 1
Code : Tout sélectionner
; De même pour écrire dans une variable avec un pointeur
nombre.w=256
adresse=@nombre
debug peekW(adresse)
; je change la valeur de la variable nombre
pokeW(adresse,123)
debug peekW(adresse)
debug nombre
Si tu imprimes bien ce qui a été dit, tu auras une première base.