Introduction à la programmation en assembleur (processeurs 64 bits de la famille 80x86)
Introduction

L'assembleur permet simplement de rendre le langage machine un peu plus lisible :

  • Chaque ligne d'assembleur contient une seule instruction, l'adresse d'une instruction est essentiellement constituée par son numéro de ligne.

  • Le programmeur peut donner des noms aux adresses importantes pour lui.

  • Les instructions s'écrivent sous la forme « mnémonique suite_d'opérandes » où la mnémonique est un mot qui rappelle le rôle de l'instruction.

    Par exemple, la mnémonique MOV indique une instruction de transfert de données (en anglais déplacer se dit move). Les opérandes elles aussi peuvent avoir des noms définis par le programmeur.

    Par exemple, l'instruction assembleur « MOV ORIGINE, DESTINATION » va copier la donnée qui se trouve à l'adresse ORIGINE dans le contenu de l'adresse DESTINATION .

Un exemple de programme assembleur est donné en figure 2. La première colonne contient les adresses symboliques (appelées aussi étiquettes , par exemple nb1).

Le programme chargé de l'assemblage (c'est à dire la translation assembleur vers langage machine) fera la transformation en adresses binaires.

Figure 2 : Programme en assembleur (syntaxe AT&T*)
Figure 2 : Programme en assembleur (syntaxe AT&T*)[Zoom...]

Les 2 principales syntaxes de l'assembleur sont la syntaxe Intel et la syntaxe AT&T. Dans ce cours, nous utilisons la syntaxe AT&T. C'est celle qui est utilisée par le compilateur-assembleur GCC/GAS de GNU (Free Software Foundation). Ceci nous permet de réaliser les travaux pratiques aussi bien sur GNU/Linux que sur Windows.

La deuxième colonne contient les mnémoniques (ex: movb) et les directives (ex: .data). Les directives sont des instructions qui s'adressent au programme d'assemblage et qui lui permettent de produire un code exécutable compatible avec le système d'exploitation ciblé.

Par exemple .data demande la création d'une zone de donnée, .byte demande la création d'un ou plusieurs espaces mémoire de 1 octet qui contiendront des nombres entiers pré-initialisés. Les colonnes suivantes contiennent les opérandes séparées les unes des autres, le cas échéant, par des virgules. Enfin, la dernière colonne contient généralement les commentaires du programme; ils décrivent instruction par instruction les opérations qui seront exécutées par le microprocesseur. L'exemple en figure 2 nous permet d'introduire plusieurs notions développées dans cette partie.