I Introduction

2. Présentation de l'assembleur

 

• 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...).