Qu'est ce que 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. Par exemple,
pour afficher un texte à l'écran, en langage C, vous faites tout
naturellement :
printf("Hello world!\n");
Mais
en assembleur, pas de ça ! Vous êtes obligé de comprendre comment
ça ce passe au niveau du processeur (sauf si vous utilisez les interruptions
du DOS, bien sûr, mais nous verrons cela plus tard...). De plus,
en général, il faut beaucoup de lignes de code pour faire pas grand
chose... et le temps de programmation en est d'autant plus long.
Mais alors, quels sont 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. Mais voyons d'abord
ce que fait réellement un compilateur.
Différences 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". On est loin du printf 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. Ouf ! En clair, l'assembleur ne fait que
traduire votre fichier source du langage humain vers le langage
binaire. Je suis conscient que ceci peut être difficile à comprendre
pour un débutant, je vais 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 :
101110000000001000000000000001010000001100000000
( B80200050300 en hexadécimal )
On
comprend mieux l'intérêt des mnémoniques et de l'assembleur
! Voyez la section sur les systèmes de
numérotation si vous ne savez pas ce qu'est le binaire ou l'hexadécimal.
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.
Confusion entre le langage assembleur et le programme assembleur
En effet, vous avez
peut-être remarqué qu'on désigne par le même nom ("assembleur")
le langage et le programme traitant les fichiers sources. Dorénavant,
on appellerai "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ébogage plus difficile
Mais
non, ne partez pas ! Il n'y a pas que des points faibles :
-
rapidité d'exécution
- code compact (peu d'octets)
- on peut absolument tout faire
- on peut optimiser les calculs
- euh... on peut dire : "moi, je connais l'asm !!", ça fait toujours
bien pour se faire embaucher dans l'informatique ;).
Cette
présentation étant faite, voyons maintenant dans quels cas exactement
programmer en asm peut être utile, et comment s'y prendre.

|
Copyright 2000 Jean-Rémy Lacharnay.
Je ne pourrais être tenu pour responsable des éventuelles conséquences
que l'exécution des exemples fournis peut avoir sur votre machine (plantages,
pertes de données, etc...).
|
|
|