Vous êtes sur la page 1sur 4

INTRODUCTION A L'ASSEMBLEUR

1. PRESENTATION DE L'ASSEMBLEUR

L'assembleur est un langage de programmation (c'est-à-dire un moyen pour l'homme de


communiquer avec la machine) de très bas niveau (entendez par là "très près de la machine"). En
effet, la plupart des langages de programmation (C/C++, Pascal, Java, etc...) ont pour but de simplifier
la tâche du programmeur en lui proposant des instructions "prêtes à l'emploi" pour les tâches
habituelles d'un programme.

Mais en assembleur, vous êtes obligé de comprendre comment ça se passe au niveau du processeur.
De plus, en général, il faut beaucoup de lignes de code pour faire pas grande chose... et le temps de
programmation en est d'autant plus long. Quels sont alors les avantages de l'assembleur ?

En fait, étant donné que vous programmez directement le processeur, vous pouvez vous-même
effectuer des optimisations sur votre code, suivant les cas ; ce que le compilateur ne fait pas.

2. DIFFERENCES ENTRE LE COMPILATEUR ET L'ASSEMBLEUR

Tout microprocesseur contient en lui-même un jeu d'instructions. Ces instructions, très basiques, se
résument à une tâche simple, par exemple, "mettre telle valeur dans la mémoire", ou "additionner
telle valeur avec telle autre valeur et mettre le résultat dans la mémoire". Nous sommes loin du C !
En fait, l'assembleur va convertir un fichier source contenant les instructions du microprocesseur
sous forme de mnémoniques anglaises en un fichier exécutable contenant le code numérique binaire
de chaque instruction, et donc compréhensible par le microprocesseur. En clair, l'assembleur ne fait
que traduire votre fichier source du langage humain vers le langage binaire. Ceci peut être difficile à
comprendre, nous allons donc prendre un exemple concret. Voici ce que peut donner du code en
assembleur permettant d'additionner 2 et 3 :

mov ax,2

add ax,3
Traduit en langage binaire, il donnera :

1011.1000.0000.0010.0000.0000.0000.0101.0000.0011.0000.0000

( B80200050300 en hexadécimal )

On comprend mieux l'intérêt des mnémoniques et de l'assembleur car il serait très lourd que pour
écrire un programme, il faut aligner des « 0 » et des « 1 » sans compter les erreurs que cela peut
occasionner.

Le compilateur, lui, analyse un fichier source écrit en un langage dit "structuré", et transforme
chaque instruction propre au langage en une suite d'instructions machines, donc il convertit le fichier
source en programme assembleur, et ce n'est qu'ensuite qu'est produit le fichier exécutable
contenant les codes binaires. En fait, le compilateur effectue une étape de plus que l'assembleur,
c'est la transformation "fichier source écrit en langage structuré" vers "fichier source écrit en
assembleur". C'est justement l'inconvénient du compilateur : la transformation n'est pas toujours
aussi bonne que ce qu'elle pourrait. Evidemment, si vous voulez créer un programme qui affiche
"Hello, world !", ou qui calcule la somme de deux nombres, l'utilisation de l'assembleur est inutile
(même absurde), car même si le compilateur produit un code assembleur moins bon que ce qu'on
pourrait faire directement en assembleur, la perte de vitesse lors de l'exécution du programme ne
sera pas perceptible... Par contre, si vous voulez créer une application graphique ou un jeu,
l'assembleur vous permettra d'obtenir des fonctions graphiques rapides, à condition bien sûr de bien
connaître toutes les subtilités de l'assembleur, de manière à produire un code meilleur que le
compilateur.

3. CONFUSION ENTRE LE LANGAGE ASSEMBLEUR ET LE PROGRAMME


ASSEMBLEUR

On désigne par le même nom ("assembleur") le langage et le programme traitant les fichiers sources.
Dorénavant, on appellera "assembleur" le programme assembleur, et "asm" le langage assembleur.

• Avantages et inconvénients de l'asm

Si on compare l'asm aux langages de haut niveau, on peut citer comme inconvénients :
- beaucoup de code pour faire peu

- temps de programmation plus long

- bugs plus fréquents

- déboguage plus difficile

Il n'y a pas que des points faibles, les points forts de l’asm sont :

- rapidité d'exécution

- code compact (peu d'octets)

- on peut absolument tout faire

- on peut optimiser les calculs

4. DANS QUELS CAS UTILISER L'ASM ?

L'asm pourra vous être utile dans plusieurs cas :

- Si vous avez besoin de vitesse d'exécution. Par exemple, il est très judicieux d'écrire vos routines
graphiques (affichage de points, de lignes, de polygones, etc...) en asm. Cela pourra vous faire gagner
de nombreuses images par seconde, car vous pourrez alors optimiser au maximum les calculs. Le gain
de temps peut être assez conséquent.

- Si vous désirez un code compact, de très petite taille, par exemple pour programmer un virus...

- Ou tout simplement pour faire quelque chose que votre compilateur ne permet pas. Par exemple,
vous serez obligés de passer par l'assembleur pour réaliser un programme pour détourner une
interruption ; quoique certains compilateurs le fassent.

Mais la majorité des personnes qui s'intéressent à l'asm aujourd'hui recherchent la performance, la
vitesse, par exemple pour pouvoir programmer un moteur 3D digne de ce nom, ou pour effectuer
des calculs conséquents assez rapidement.
5. LES ASSEMBLEURS

Il existe de nombreux assembleurs. Les plus connus sont MASM (Macro Assembler) de Microsoft et
TASM (Turbo Assembler) de Borland. Il existe aussi de nombreux assembleurs comme NASM
(Netwide Assembler). Il est plus complet (instructions Pentium et MMX), et possède une syntaxe
logique et agréable à lire. Le seul hic, c'est qu'il n'est pas encore en version finale : la dernière version
est la 0.98.

6. LE LINKER

L'assembleur ne créé pas un fichier exécutable (.exe) directement, mais produit un fichier objet. Un
fichier objet contient des instructions assemblées, et le nom des symboles (fonctions, variables,
etc...) utilisés. Ce fichier n'est pas exécutable directement. C'est le linker qui va se charger de
convertir le fichier objet en fichier exécutable. Mais alors quel est son intérêt ? Pourquoi l'assembleur
ne produit pas directement un fichier exécutable ? C'est parce que le linker peut aussi combiner
plusieurs fichiers objets (pas obligatoirement créés avec le même assembleur) pour former un seul
fichier exécutable. Cela vous permet d'inclure dans vos programmes des librairies, c'est-à-dire un
ensemble de fonctions externes au programme (par exemple il existe des librairies qui s'occupent du
son, du joystick, de l'affichage en 3 dimensions, etc...) qui ont été crée avec un assembleur différent,
ou même avec un compilateur. Cela vous permet aussi de séparer votre programme en plusieurs
fichiers sources (ce qui est vivement conseillé pour des gros programmes), ce qui vous permet de
mieux vous y retrouver, et aussi d'accélérer les temps d'assemblage (seuls les fichiers sources que
vous avez modifiés sont assemblés).

7. UN EDITEUR DE TEXTE

N'importe quel éditeur de texte peut faire l'affaire, même l'edit du DOS ou le bloc-notes de
Windows.

Vous aimerez peut-être aussi