"Déclaration" de "Variables"
Page réalisée par:
Philippe Moreau
UPJV

En assembleur, la notion de déclaration de variables n'existe pas au sens décrit dans le langage algorithmique (ou la plupart des langages de programmation évolués). Il existe cependant des directives d'assemblages (pseudo instructions interprétables uniquement par le logiciel réalisant l'assemblage) "classiques" permettant une réservation d'emplacements en mémoire (espace de stockage) avec une éventuelle initialisation.

Les directives d'assemblage DS et DC:

syntaxe:

DS.f N

Action réalisée:

réserve N emplacements mémoire au format .f à l'adresse où la ligne sera assemblée


syntaxe:

DC.f liste de N valeurs

Action réalisée:

réserve N emplacements mémoire au format .f à l'adresse où la ligne sera assemblée et y place les N valeurs de la liste


Dans l'utilisation de directives DS et DC, le format n'est pas optionnel.

Exemples d'utilisation:

X:DC.W4
Y:DC.L5
XY:DC.W1,2
T:DS.B10
ABC:DC.B65,66,67,68,69,...

A la suite de ces lignes, la valeur 4 est stockée sur 16 bits à un emplacement référencé par X (d'adresse X). Puis la valeur 5 est stockée sur 32 bits à l'adresse Y (à la suite de X), puis on stocke les valeurs 1 et 2 sur 16 bits à l'adresse XY. Ensuite, 10 octets sont réservés à l'adresse T, et enfin les valeurs 65, 66, 67, 68, 69, ... sont placées en mémoire à l'adresse de l'assemblage de ABC.


Remarques:

- Les directives d'assemblages DC et DS sont, comme leur nom l'indique, propres au logiciel d'assemblage. Mais celles-ci sont très classiques et existent dans la plupart des logiciels d'assemblage

- Le logiciel que l'on va utiliser, nous permet également d'écrire la dernière ligne sous une autre forme

la ligne
ABC:DC.B65,66,67,68,69,...
pourra s'écrire
ABC:DC.B"ABCDE..."
65,66,67,68,69,... correspondant
aux codes ASCII de ABCDE...

Exemples de manipulations:

pour réaliser l'affectation D0 ← X
(sur 16 bits) on écrira
MOVEX,D0
pour réaliser l'affectation X ← 5
(sur 16 bits) on écrira
MOVE#5,X
pour réaliser l'affectation D0 ← X
(sur 16 bits) on peut aussi écrire
MOVE.L#X,A0
MOVE.W(A0),D0

A retenir: lors de l'utilisation d'un label en tant que mode d'adressage, pour s'assurer de l'opération effectuée, il suffit de se souvenir qu'à l'assemblage l'étiquette est remplacée par une adresse et donc: une étiquette seule correspond à l'adressage absolu, une étiquette précédée d'un signe # correspond à l'adressage immédiat.


ATTENTION

Dans toutes les manipulations des "variables" ainsi "déclarées", il est indispensable de respecter les formats définis lors de l'écriture. Ainsi, si deux variables X et Y ont été déclarées par:

les deux lignes
X:DC.W4
Y:DC.L5
ce qui correspondrait à:
X est initialisé avec la valeur 4 sur 16 bits
Y est initialisé avec la valeur 5 sur 32 bits

une erreur dans l'utilisation des formats peut avoir des conséquences facheuses. Exemples: pour réaliser l'affectation X ← 1 (X doit contenir 1)

si on écrit:
MOVE.B#1,X
Alors:
X contiendra 260 (0104)16
et si on écrit:
MOVE.L#1,X
Alors:
X contiendra 0 (0000)16 et Y contiendra 65541 (00010005)16