Qu'est-ce que le langage d'assemblage?

Parfois appelé assemblage ou ASM, un langage d'assemblage est un langage de programmation de bas niveau.

Les programmes écrits en langage assembleur sont compilés par un assembleur. Chaque assembleur a son propre langage d'assemblage, conçu pour une architecture informatique spécifique.

Le langage machine n'est qu'une série de chiffres, ce qui n'est pas facile à lire pour les humains. À l'aide de l'ASM, les programmeurs peuvent écrire des programmes lisibles par l'homme qui correspondent presque exactement au langage de la machine.

L'inconvénient est que tout ce que fait l'ordinateur doit être décrit explicitement, avec des détails précis. L'avantage est que le programmeur a un contrôle maximal sur ce que l'ordinateur fait.

Pourquoi ASM est-il un langage "de bas niveau"?

Assembly est appelé langage de programmation de bas niveau car il existe (presque) une relation un à un entre ce qu’il dit à l’ordinateur de faire et ce qu’il fait. En général, une ligne d'un programme d'assemblage contient au maximum une instruction pour l'ordinateur.

Quelle est la différence entre ASM et un langage "de haut niveau"?

Les langages de haut niveau fournissent des abstractions d'opérations de bas niveau qui permettent au programmeur de se concentrer davantage sur la description de ce qu'il veut faire et moins sur la manière dont cela devrait être fait . La programmation de cette manière est plus pratique et facilite la lecture des programmes en sacrifiant le contrôle de bas niveau.

Les programmes écrits dans des langages de haut niveau ne correspondent jamais à la vitesse brute et à l'efficacité des programmes écrits en assembleur. Python, Java, JavaScript, Clojure et Lisp sont des exemples de langages de haut niveau.

Qu'est-ce qu'un langage de "niveau intermédiaire"?

Les langages de niveau moyen ou inférieur fournissent des abstractions de haut niveau pour faciliter la vie du programmeur, tout en offrant un accès aux opérations de bas niveau. Comme ils sont souvent utilisés pour écrire des systèmes d'exploitation, ils sont parfois appelés langages de programmation système .

Les programmes écrits dans des langages de niveau intermédiaire peuvent fonctionner aussi bien, ou presque, que les programmes écrits en langage assembleur. Les exemples de langages de programmation de niveau intermédiaire incluent C, C ++, Ada, Nim et Rust.

Est-ce que l'ASM est portable?

Non, car les langages d'assemblage sont liés à une architecture informatique spécifique, ils ne sont pas portables. Un programme écrit dans un langage d'assemblage aurait besoin d'être complètement réécrit pour s'exécuter sur un autre type de machine.

La portabilité est l'un des principaux avantages des langages de niveau supérieur. Le langage de programmation C est souvent appelé "assemblage portable" car les compilateurs C existent pour presque toutes les architectures système modernes. Un programme écrit en C peut nécessiter certaines modifications avant de pouvoir être compilé sur un autre ordinateur, mais le langage de base est portable.

En règle générale, plus un langage est de niveau supérieur, moins il faut faire de changements pour qu'il soit exécuté sur une autre architecture. Les langages de niveau le plus bas - langage machine et langage d'assemblage - ne sont pas portables.

Exemple: Bonjour le monde! en assemblage 32 bits, pour Windows

Voici "Hello, World" écrit pour un processeur Intel 32 bits. Il fonctionnera également sur un processeur 64 bits. Nous allons compiler et exécuter sur Windows 10.

 global _main section externe _printf .text _main: appel de message push _printf add esp, 4 ret message: db 'Hello, World!', 10, 0 

Pour commencer, ouvrez le Bloc-notes. Copiez et collez le code ci-dessus dans un nouveau fichier texte, puis enregistrez-le sous le nom hello.asm .

Pour compiler l'assemblage, nous utiliserons NASM, l'assembleur Netwide. Il peut être téléchargé à l'adresse http://www.nasm.us/.

 nasm -f win32 hello.asm 

Lorsque vous exécutez cette commande, NASM crée un fichier objet. Un fichier objet contient du code machine, mais n'est pas tout à fait un fichier exécutable. Notre fichier objet s'appelle hello.obj .

Pour créer l'exécutable, nous utiliserons la version 32 bits de MinGW (Minimal GNU for Windows) qui fournira le compilateur gcc. Il peut être téléchargé sur //www.mingw.org/.

 gcc -o hello.exe bonjour.obj 
 Bonjour 
 Bonjour le monde! 

Exemple: Bonjour le monde! en assemblage 64 bits, pour Linux

Voici "Hello, World" écrit pour un processeur Intel 64 bits. Nous allons compiler et exécuter sur Linux 64 bits.

 extern printf; la fonction C printf, appelée section .data; Section de données, variables initialisées msg: db "Hello, world!", 0; La chaîne C se termine par 0 fmt: db "% s", 10, 0; Le format printf, "\ n", section '0' .text; Commencez la section de code global principal; le point d'entrée standard gcc principal:; l'étiquette du programme pour le point d'entrée push rbp; configurer le cadre de pile, doit être aligné mov rdi, fmt mov rsi, msg mov rax, 0; peut également être: xor rax, rax call printf; Appelez C printf function pop rbp; restaurer pile mov rax, 0; normal, pas d'erreur, valeur renvoyée ret; revenir 

Copiez et collez ce programme dans un nouveau fichier appelé hello.asm .

Ensuite, compilez l’assemblage avec NASM, que vous pouvez installer avec votre gestionnaire de paquets. Par exemple, sur Ubuntu ou Debian, vous pouvez installer NASM en utilisant apt:

 sudo apt update && sudo apt install nasm 

Exécutez cette commande pour créer votre fichier objet:

 nasm -f elf64 hello.asm 

Le fichier objet s'appelle hello.o .

Ensuite, utilisez gcc pour lier ce fichier objet aux bibliothèques nécessaires sur votre ordinateur, puis compilez-le en un fichier exécutable appelé hello :

 gcc bonjour.o -o bonjour 

Enfin, lancez le fichier exécutable:

 ./Bonjour 
 Bonjour le monde! 

Pour référence, c'est le même programme, écrit en C:

 #include int main () {char msg [] = "Bonjour tout le monde \ n"; printf ("% s \ n", msg); retourne 0; } 

  • Voir Routines de débogage pour d'autres exemples de code d'assemblage de bas niveau et des informations supplémentaires sur ce que fait chaque routine.
  • Pour d'autres exemples de langage d'assemblage, voir le site Web de Happy Codings.

2GL, Assembleur, Langage bas niveau, Langage machine, Termes de programmation