Lorsque l'on écrit un programme avec l'assembleur GNU, on peut
définir en plus des variables du programme (qui apparaissent
dans la section
.data) des variables de l'assembleur
(que l'on déclare avec
.equ ou
.set).
Les variables du programme n'existent que dans le programme
une fois celui-ci compilé et exécuté. Elles prennent
donc de l'espace mémoire et les manipuler utilise du temps à
chaque exécution du programme.
Les variables de l'assembleur n'existent
que pendant la
compilation du programme. Elles n'occupent donc aucun
espace mémoire et les manipuler ne prend que du temps lors de
la compilation, pas à l'exécution. Par contre, les
manipulations que l'on peut faire avec sont très limitées.
Le code suivant montre que la variable de l'assembleur
N_ASM n'apparaît pas dans le code compilé alors que
la variable du programme
n_asm y apparaît.
1                           
.equ N_ASM,5
2
3                           
.data
4 0000 05000000      n_prg:  .int 5
5
6                           
.text
7                           
.global main
8                   
main:
9 0000
55                    
pushl %ebp
10 0001
89E5                 
movl %esp,%ebp
11
12 0003
C9                   
leave
13 0004
C38D7600             
ret
En pratique, on utilise les variables de l'assembleur pour les
variables que l'on manipule peu (principalement les
constantes) et pour tous les nombres sur lesquels on calcule, on
utilise les variables du programme.