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.
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...