|
COURS N° 1 - Mon premier programme |
|
Un code écrit en langage Assembleur se présente comme suit :
Version 16 bits| .386 .MODEL FLAT, STDCALL INCLUDE \masm32\include\kernel32.inc INCLUDELIB \masm32\lib\kernel32.lib MonCode SEGMENT 'CODE' Main: push 0h call ExitProcess MonCode ENDS END Main |
Rien de bien compliqué !
Mais il a le mérite d'être court et d'être compris aisément.
| EXPLICATIONS |
1) Type de machine utilisé : ".386"
Permet l'usage du mode 32 bits et l'utilisation du jeu d'instructions du 386 et ascendant.
2) Modèle mémoire utilisé : ".model flat, stdcall"
"flat", signifie plat. C'est le modèle mémoire utilisé sous win32 (windows 32 bits).
"stdcall", signifie : appel standard c'est-à-dire la façon dont sont transmis les paramètres à la fonction. Les paramètres sont transmis de la droite vers la gauche.
3) Inclusion : "include C:\masm32\include\kernel32.inc"
"Include" signifie inclusion. Il permet l'usage de la fonction qui est incluse dans le fichier librairie.
Le fichier "Kernel32.inc" contient les déclarations de toutes les fonctions comprises dans "Kernel32.lib".
Pour pouvoir utiliser une fonction d'une librairie il faut informer le compilateur du nom et de ses paramètres.
Ce fichier est donc très important au moment de la compilation.
La fonction utilisée est : "ExitProcess" et se trouve dans la librairie "Kernel32.lib".
4) Inclusion de librairie : "includelib C:\masm32\lib\kernel32.lib"
"Includelib" signifie inclusion d'une librairie.
Le fichier "Kernel32.lib" contient le code de la fonction "ExitProcess".
Le compilateur extraira la fonction et la joindra au fichier ".obj" qui en résultera.
5) Déclaration d'un segment de code : "CODE Segment 'code'"
Tout programme informatique sous Windows nécessite qu'il soit logé dans une zone mémoire appelée segment.
Un segment de code est l'enveloppe principale du programme.
Cette déclaration permet de signifier au compilateur et au lieur que nous voulons créer un segment mémoire qui contiendra notre code.
6) Déclaration d'une fonction : "Main:"
Le code doit-être contenu dans une enveloppe appelée procédure qui est elle même contenue dans le segment de code. Avec MASM32 une procédure peut être déclarée de façon basique comme dans ce code.
Le code de la procédure débute à l'adresse représentée ici par "Main:". Lors du liage Main sera remplacé par une adresse offset. Une adresse offset est une valeur relative par rapport au début du code.
7)Paramètre de fonction : "push 0"
Enfin nous y voilà !
Cette instruction du jeu d'instructions du microprocesseur, demande au microprocesseur de mettre sur la pile le paramètre qui suit, c'est-à-dire la valeur numérique 0.
Si une fonction est appelée et nécessite le passage d'un paramètre il faudra utiliser l'instruction "push" puis appeler la fonction. La syntaxe est la même pour tout passage de paramètres à une fonction.
8) Fonction Windows : "call ExitProcess"
Cette instruction appelle la fonction "ExitProcess" de Windows qui se trouve dans la librairie "Kernel32.lib".
Elle termine le programme.
9) Fin de fonction "Main" :
Dans l'exemple ci-dessus la fin de la procédure se termine à l'instruction : "call ExitProcess".
10) Fin de segment de code : "CODE ends"
Idem pour le segment de code.
"ends", signifie : fin de segment.
11) Fin de fonction principale : "end Main"
Indique au compilateur la fonction principale à partir de laquelle Windows débutera le programme et la fin de l'application. L'adresse de la première instruction d'un programme exécutée par le processeur s'appelle : EntryPoint (point d'entrée).
| COMPILATION |
Copiez le code puis collez le (il est recommandé de le réécrire afin d'assimiler plus rapidement) dans un nouveau document au format texte avec l'extension ".asm".
Nommez ce fichier par exemple : "Cours1.asm" et enregistrez le dans le répertoire "C:\Exemple".
Puis en ligne de commandes tapez :
C:\masm32\bin\ml /c /coff c:\Exemple\Cours1.asm
La compilation aura généré le fichier "Cours1.obj" que vous copierez dans le répertoire "C:\Exemple".
Ensuite, utilisez le lieur de la façon suivante :
C:\masm32\bin\link /subsystem:windows /out:Cours1.exe c:\Exemple\Cours1.obj
Les fichiers "Cours1.obj" et "Cours1.exe" sont générés dans le répertoire courant. Copiez les dans le répertoire "C:\Exemple" si il n'est pas le répertoire courant.
Maintenant, vous pouvez être fier d'avoir écrit votre premier programme en Assembleur et sans trop de peine.
C'est excitant n'est-ce pas ?
Ca donne envie d'aller plus loin !