Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Le langage assembleur
  3. Interface avec le programmeur
Extrait - Le langage assembleur Maîtrisez le code des processeurs de la famille X86
Extraits du livre
Le langage assembleur Maîtrisez le code des processeurs de la famille X86 Revenir à la page d'achat du livre

Interface avec le programmeur

Le langage assembleur

La première interface avec le programmeur est le langage assembleur lui-même.

Ce langage consiste en des mnémoniques, abréviations du nom de l’instruction correspondante.

Une instruction en langage machine est une succession de 0 et de 1. Un pur nombre binaire, composé d’une suite d’octets plus ou moins longue, constituant un opcode (code opération), suivi ou non d’octets représentant les opérandes.

C’est pour cela qu’il est fait usage de mnémoniques, pour permettre au cerveau humain de comprendre ce code machine en un coup d’œil.

Par exemple, addition prend la forme du mnémonique add, et shift left (décalage à gauche) prend la forme abrégée de shl.

Un assembleur (compilateur) prend du code source sous forme de texte, et le convertit en une succession de bits lisibles par la machine. Un désassembleur fait l’inverse, il prend un fichier binaire, et le convertit en un texte plus ou moins lisible pour l’homme.

Certains logiciels sont protégés par une licence rendant illégale l’opération de désassemblage, ce qui ne l’empêche pas d’être possible dans un cadre strictement privé. Si vous envisagez de désassembler un logiciel de ce type, soyez avertis que ce n’est que pour un usage privé, vous ne pourrez en aucun...

Règles d’écriture

Cette section aborde les règles d’écriture d’un projet assembleur, en suivant les règles de la syntaxe du compilateur FASM.

Il a pour but de donner une base saine au débutant. La pratique faisant le reste.

1. Syntaxe d’une ligne de code FASM

Agencer les lignes de code selon une structure a pour but de faciliter la lecture.

Prenons comme contre-exemple un code avec une structure chaotique :

mov eax,L000432;charger la valeur de L000432 dans eax
L000432:iMul                    eAx,                ebx
;multiplier par ebx
      shl ecX,CL;décaler les biTS de ECX par la ValeuR dans Cl
; shr   dword   [eax+ebx*8+4323],3
L000457:    idiv         EcX    ;diviser par ecx

 

Ce bout de code est totalement illisible mais reste compilable par FASM, et s’exécutera normalement, mais il aurait pu être écrit plus clairement de sorte à être lisible par l’homme.

a. Une instruction par ligne

Une ligne de code assembleur est coupée en plusieurs parties et consiste en une seule instruction ; elle est constituée d’une suite de symboles.

Les symboles sont des suites de caractères, séparées par des caractères spéciaux ou des espaces.

La présence d’un point-virgule ; dans une ligne, en dehors des points virgules à l’intérieur des chaînes de caractères, rend le reste de la ligne invisible pour le compilateur qui l’ignore tout simplement car il s’agit de commentaires.

étiquette:   instruction opérandes     ;commentaires
init_eax:    mov eax,12345678h         ;eax = 1234567h 

L’instruction est généralement positionnée à une tabulation du début de la ligne, qu’il y ait ou non une étiquette, ce qui permet de rendre le code plus lisible.

Évidemment, cette partie peut être placée n’importe où sur une ligne étant donné que l’assembleur est un langage de programmation sans contrainte.

Il ne peut y avoir qu’une seule instruction par ligne.

Ce peut être soit une instruction, soit une directive, soit une macro.

étiquette:  instruction
            macro
            directive 

Par souci de lisibilité et de simplicité d’écriture, il est conseillé de n’utiliser que les minuscules et d’écrire comme indiqué dans ce chapitre.

Les majuscules servent à différencier...