|
|
Le langage Assembleur ou langage d'assemblage, dit assembleur tout court, est le langage de programmation le plus proche, le plus lisible pour un humain du langage machine utilisé par le microprocesseur de la machine. Le langage machine est une combinaison de bits, il est rendu lisible en remplaçant les valeurs brutes en symboles appelés mnémoniques.
Ainsi, alors que l'ordinateur reconnaîtra ce que l'instruction machine
10110000 01100001signifie, pour les programmeurs c'est plus simple de se souvenir de l'équivalent en langage Assembleur :
mov $0x61, %al(cela signifie de mettre la valeur hexadécimale 61 (97 en décimal) dans le registre 'AL'.)
Contrairement à un langage de haut-niveau, il y a une correspondance 1-1 entre le code assembleur et le langage machine, ainsi les ordinateurs peuvent traduire le code dans les 2 sens sans perdre d'information. La transformation du code assembleur dans le langage machine est accompli par un programme nommé Assembleur, dans l'autre sens par un programme Désassembleur. L'opération s'appelle respectivement, assemblage et désassemblage. Dans un programme réel en Assembleur, c'est un peu plus complexe que cela (on peut donner des noms aux routines, aux variables), et on n'a plus cette correspondance.
Chaque architecture d'ordinateurs a son propre langage machine, et donc son propre langage d'assemblage (l'exemple ci-dessus est pour le x86). Ces différents langages diffèrent par le nombre et le type d'opérations qu'ils ont à supporter. Ils peuvent avoir des tailles et des nombres de registres différents, et différentes représentations de type de données en mémoire. Tandis que tous les ordinateurs sont capables de faire les mêmes choses, ils le font de manière différente.
De plus, plusieurs groupes de mnémoniques ou de syntaxe de langage assembleur peuvent exister pour un seul ensemble d'instructions. Dans ce cas, le plus populaire est habituellement celui utilisé dans la documentation du fabricant. Pour revenir à notre exemple ci-dessus, il est donné en syntaxe AT&T. En syntaxe Intel, cela donnerait :
MOV AL,61hC'est vraiment histoire de goût, les opérandes sont inversées et des possiblités du programme d'assemblage (certains gèrent les 2 syntaxes, d'autres qu'une). Néanmoins cela ne facilite la maintenance des programmes !
| Table of contents |
|
2 Directives du langage Assembleur 3 Usage du langage Assembleur 4 Macro-assembleur |
Des opérations de base sont disponibles dans tous les jeux d'instructions
En plus de coder les instructions machine, les langages Assembleur ont des directives supplémentaires pour assembler des blocs de données et assigner des adresses aux instructions en définissant des étiquettes ou labels.
Ils sont capables de définir des expressions symboliques qui sont évaluées à chaque assemblage, rendant possible d'écrire du code encore plus facile à lire et à comprendre.
Ils ont habituellement un langage macro intégré pour faciliter la génération de codes ou blocs de données complexes.
Il y a des débats sur l'utilité du langage Assembleur. Dans la plupart des cas, les compilateurs peuvent transformer du langage de haut-niveau dans un code qui tourne aussi vite que du code assembleur écrit à la main.
Cependant, quelques calculs complexes seront plus rapides écrit directement en assembleur, et certaines routines sont plus simple à écrire en langage de bas-niveau. Des taches très dépendantes du système exécutés par les systèmes d'exploitation ne peuvent simplement pas être écrits dans un langage de haut-niveau. Et certains compilateurs transforment des programmes en langage de haut-niveau en code assembleur en premier, permettant de voir le code dans une optique de débogage et d'optimisation.
Beaucoup de systèmes embarqués sont aussi programmés en assembleur pour bénéficier du maximum des possibilités de ces systèmes qui sont souvent limités en ressource, bien que progressivement les composants de ses systèmes sont de plus en plus puissant pour un coût minimal.
Liens externes :Instructions machine
Et on trouve des instructions spécifiques avec une ou quelques instructions pour des opérations qui auraient dû en prendre beaucoup. Exemples :
Directives du langage Assembleur
Usage du langage Assembleur
Macro-assembleur
Beaucoup d'assembleurs gèrent un langage de macros. Il s'agit de regrouper plusieurs instructions afin d'avoir un enchaînement plus logique et moins fastidieux.
Par exemple (en assembleur Microsoft MASM) :
putchar Macro car ; Prototype de la macro
est une macro qui affiche un caractère sous MS-DOS. On l'utilisera par exemple ainsi : ifdef car ; si car est défini
mov dl,car ; le mettre dans dl
endif
mov ah,2 ; ah=2 : fonction "putchar" en DOS
int 21h ; appel au DOS
endm ; fin macro
Et cela génèrera :
putchar "X"
mov dl,"X"
mov ah,2
int 21h
Cf aussi Programme Assembleur
NASM - Netwide Assembler