Flux rss
Collection CommentCaMarche.net
 

Introduction à l'assembleur

Les prérequis nécessaires

Le langage assembleur est très proche du langage machine (c'est-à-dire le langage qu'utilise l'ordinateur : des informations en binaire, soit des 0 et des 1). Il dépend donc fortement du type de processeur. Ainsi il n'existe pas un langage assembleur, mais un langage assembleur par type de processeur. Il est donc nécessaire de connaître un minimum le fonctionnement d'un processeur pour pouvoir aborder cette partie. Un processeur réel a toutefois trop de registres et d'instructions pour pouvoir les étudier en détail. C'est pour cette raison que seuls les registres et les instructions d'un processeur simple (Intel 80x86 16 bits) seront étudiés dans ce dossier.

Le processeur en bref...

Un processeur est relié à la mémoire par l'intermédiaire d'une liaison appelée bus. Les données dont le processeur a besoin sont stockées dans ce que l'on appelle des registres (ils sont notés AX, BX, CX, DX, ...). Chacun a sa propre utilité  :

Nom du registre Taille
Accumulateur AX 16 bits
Registre auxiliaire de base BX 16 bits
Registre auxiliaire (compteur) CX 16 bits
Registre auxiliaire de données DX 16 bits
Pointeur d'instruction IP 16 bits
Index de source SI 16 bits
Index de destination DI 16 bits
Registre segment de code CS 16 bits
Registre segment de données DS 16 bits
Registre segment de pile SS 16 bits
Registre segment supplémentaire ES 16 bits
Pointeur de pile SP 16 bits
Pointeur de base BP 16 bits

Les registres AX, BX, CX et DX sont les registres les plus utilisés pour les calculs :

  • Le registre AX sert à effectuer des calculs arithmétiques ou à envoyer un paramètre à une interruption
  • Le registre BX sert à effectuer des calculs arithmétiques ou bien des calculs sur les adresses
  • Le registre CX sert généralement comme compteur dans des boucles
  • Le registre DX sert à stocker des données destinées à des fonctions

Il s'agit là de l'utilisation de base de ces registres, mais dans la pratique ils peuvent être utilisés à d'autres fins.

Les registres AX, BX, CX et DX peuvent être utilisés par bloc d'un octet (8 bits), la lettre X de leur nom est alors remplacée par L (comme Low pour désigner les bits de poids faible) et H (pour High afin de désigner les bits de poids fort). De plus, dans les architectures x86 32 bits, ces registres ont été étendus à 32 et ont vu leur nom précédé d'un E (pour Extended, en français « étendu »).

EAX (32 bits)
 
AX (16 bits)
  AH (8 bits) AL (8 bits)

Pourquoi utiliser l'assembleur ?

Pour faire exécuter une suite d'instructions au processeur, il faut lui fournir des données binaires (souvent représentées en notation hexadécimale pour plus de lisibilité, mais cela revient au même...). Or, les fonctions en notation hexadécimale sont difficiles à retenir, c'est pourquoi le langage assembleur a été mis au point. Il permet de noter les instructions avec des noms explicites suivis de paramètres.

Voici par exemple à quoi peut ressembler un programme en langage machine :
A1 01 10 03 06 01 12 A3 01 14

Il s'agit de la représentation hexadécimale d'un programme permettant d'additionner les valeurs de deux cases mémoire et de stocker le résultat dans une troisième case. Il est évident que ce type d'écriture est difficilement lisible par nous, humains.

Ainsi, puisque toutes les instructions que le processeur peut effectuer sont chacune associées à une valeur binaire, on utilise une notation symbolique sous forme textuelle qui correspond à chaque fonction, c'est ce que l'on appelle le langage assembleur. Dans l'exemple précédent la séquence A1 01 10 signifie copier le contenu de la mémoire à l'adresse 0110h dans le registre AX du processeur. Cela se note en langage assembleur :
MOV AX, [0110]

Toutes les instructions ont une notation symbolique associée (fournie par le fabricant du processeur). L'utilisation du langage assembleur consiste donc à écrire sous forme symbolique la succession d'instructions (précédées de leur adresse pour pouvoir repérer les instructions et passer facilement de l'une à l'autre). Ces instructions sont stockées dans un fichier texte (le fichier source) qui, grâce à un programme spécifique (appelé « l'assembleur ») sera traduit en langage machine.

Le programme précédent écrit en langage assembleur donnerait :

Adresse de l'instruction Instruction en langage machine Instruction en langage assembleur Commentaires sur l'instruction
0100 A1 01 10 MOV AX, [0110] Copier le contenu de 0110 dans le registre AX
0103 03 06 01 12 ADD AX, [0112] Ajouter le contenu de 0112 à AX et mettre le résultat dans AX
0107 A3 01 14 MOV [0114], AX Stocker AX à l'adresse mémoire 0114

L'écriture en langage assembleur, bien que restant rebutante, est beaucoup plus compréhensible pour un humain, car on a généralement les noms sont plus faciles à retenir que les nombres.

Dernière modification le mardi 14 octobre 2008 à 17:40:29.

Ce document intitulé « Introduction à l'assembleur » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Assembler un PC De l'assemblage d'un ordinateur Un ordinateur de type PC est modulaire, c'est-à-dire qu'il peut être monté en assemblant des éléments matériels de différents constructeurs, afin d'obtenir un ordinateur conforme à ses besoins. Les éléments... www.commentcamarche.net/contents/assemblage/monter.php3
Branchements en assembleur On appelle saut (ou branchement) en assembleur le fait de passer à une instruction autre que celle qui suit celle en cours en mémoire. En effet, en temps normal (c'est-à-dire sans instruction contraire) le processeur exécute les instructions... www.commentcamarche.net/contents/asm/saut.php3
Les procédures en assembleur La notion de procédure En langage assembleur, on appelle procédure un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la procédure. Cette notion de sous-programme est généralement appelée fonction dans d'autres... www.commentcamarche.net/contents/asm/procedure.php3
[Photofiltre]Réaliser un assemblage de 2 imagesPhotofiltre est un logiciel de retouche d'image. Cette astuce fonctionne aussi bien avec Photofiltre qu'avec Photofiltre Studio Dans ce cas précis, Photofiltre va permettre d'assembler un collage c'est-à-dire de coller une deuxième image (en... www.commentcamarche.net/faq/sujet-7719-photofiltre-realiser-un-assemblage-de-2-images
Exercice assembleur x86 nombre premierIntroduction Notions abordées dans cet exercice Enoncé Rappel Corrigé Explication Introduction Ce petit exercice d'assembleur vise les architectures x86 (Processeurs Intel et Amd 32 bits) et utilise la syntaxe de Nasm, un assembleur... www.commentcamarche.net/faq/sujet-9863-exercice-assembleur-x86-nombre-premier
Compiler un programme assembleur avec NasmAvec Linux Etape 1. Créer un fichier source Etape 2. Assembler le fichier source Etape 3. Création de l'executable Etape 4. Execution du programme Avec windows Etape 1. Installer les logiciels nécessaires Etape 2. Créer un fichier... www.commentcamarche.net/faq/sujet-9836-compiler-un-programme-assembleur-avec-nasm
Nouveau PC via un assembleur : bug écran bleu (Résolu)Bonjour à tous; je viens de faire monter par un assembleur un super PC sur mesure( 1400€)...mais ...qui ne fonctionne pas ! En effet , il a fonctionné quelques minutes , j'y ai installé Norton et un CPL et il s'est arrêté tout seul lors de... www.commentcamarche.net/forum/affich-2450909-nouveau-pc-via-un-assembleur-bug-ecran-bleu
Cours assembleur 8086 (Résolu)Bonjour, je voudrais avoir un lien où je pouurais trouver un cours d'assembleur 8086 pour debutants on a comencer le cours en classe et je n'y comprend rien du tout! www.commentcamarche.net/forum/affich-4180565-cours-assembleur-8086
Assembler fichier .avi puis .002 .003.... (Résolu)Bonjour, J'ai plusieurs fichiers dont j'aimerai bien les assembler. Le problème et que le 1er fichier est en .avi puis les autres en .002, .003, .004... J'ai utiliser hjsplit mais il reconnait pas les fichiers. Si quelqu'un pourait... www.commentcamarche.net/forum/affich-7842408-assembler-fichier-avi-puis-002-003
Télécharger NasmNasm est un logiciel assembleur libre et disponible sur plusieurs systèmes comme Linux ou Windows. Toutefois il ne fonctionne que sur les architectures x86. Il demande une syntaxe légère et compte donc parmi le choix de nombreux programmeurs. www.commentcamarche.net/telecharger/telecharger-34055381-nasm
Télécharger AVISplit ClassicAVISplit permet de découper et d'assembler des morceaux d'une vidéo au format AVI dans l'ordre souhaité, comme tout bon logiciel de montage. Très simple d'utilisation, AVI Split fait peu de choses, mais il le fait bien et gratuitement ! www.commentcamarche.net/telecharger/telecharger-34055030-avisplit-classic
Télécharger PDFLabPDFLab vous permet de diviser et assembler des documents PDF ainsi que d'y insérer des images, des pages blanches. Vous pourrez également très facilement créer des documents PDF à partir d'images. Télécharge une image disque (fichier... www.commentcamarche.net/telecharger/telecharger-34055028-pdflab
Medieval II: Total War Kingdoms ExpansionGenre:Straégie, Développeur:Creative Assembly, Description:Given the crazy popularity of Creative Assembly's Total War games, it was a foregone conclusion that the latest version, Medieval II: Total War would be getting a beefy expansion. What we... www.commentcamarche.net/guide-achat/medieval-ii-total-war-kingdoms-expansion-945888-fiche-technique
50 ans d'archives de l'Assemblée nationale sur Internet(Paris - Relax news) - A l'occasion du 50ème anniversaire de la première séance de la première législature de la Ve République, qui s'est tenue le 9 décembre 1958, l'Assemblée nationale met en ligne tous les comptes rendus de séance de ces cinquante... www.commentcamarche.net/actualites/50-ans-d-archives-de-l-assemblee-nationale-sur-internet-5847949-actualite.php3
Liste des instructions en assembleurTableau des principales instructions en assembleur Voici une liste (non exhaustive) des principales instructions en assembleur des processeurs 80x86, ainsi que du code machine qui leur est associé et de leur taille en mémoire. Les valeurs val et... www.commentcamarche.net/contents/asm/liste.php3
Segmentation de la mémoire en assembleurQu'est-ce que la segmentation de la mémoire ? En assembleur, on appelle segment de mémoire le mécanisme de base de la gestion des adresses pour des processeurs de type 80x86. Les instructions sont stockées dans le registre IP. Il s'agit d'adresses... www.commentcamarche.net/contents/asm/segmentation.php3
Pilote (Driver)Qu'est-ce qu'un driver? Un ordinateur est constitué d'un assemblage de périphériques. Pour pouvoir contrôler chacun de ses périphériques, le système d'exploitation a besoin d'une interface logicielle entre lui et le matériel, on appelle driver... www.commentcamarche.net/contents/drivers/drivers.php3