|
COURS N° 1 - Mon premier programme |
|
Un code écrit en langage Assembleur se présente comme suit :
En savoir plus sur le modèle mémoire TINY
Version 32 bits| ;Ce code peut être compilé et exécuté sous Windows XP. .8086 .MODEL TINY MonCode SEGMENT 'CODE' ORG 100h ;Adresse de début de code. Main = 100h Main: ;Fin de programme, rend la main au système d'exploitation mov ax, 4C00h ;Fonction Exit de MS-DOS int 21h ;MS-DOS 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é : ".8086"
Permet l'usage du mode 16 bits et l'utilisation du jeu d'instructions du 8086 seulement.
2) Modèle mémoire utilisé : ".model tiny, stdcall"
"tiny", indique qu'un fichier exécutable "com" sera généré. C'est le plus petit modèle mémoire utilisé sous MS-DOS.
"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) Déclaration d'un segment de code : "MonCode Segment 'code'"
Tout programme informatique sous MS-DOS 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.
4) 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 MASM16 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. En l'état cette adresse offset est : 100h (256) et correspond à "EntryPoint".
5) Fonction MS-DOS : "mov ax, 4C00h"
Cette instruction initialise le registre ax avec la valeur de 4C00h. Comme il s'agit d'une valeur de type WORD (16 bits) les sous registres de ax seront initialisés comme suit :
ah = 4Ch ;Fonction Exit
al = 00h ;Code retour
En programmation 16 bits MS-DOS, le registre ah sert à placer le numéro de la fonction de MS-DOS.
6) Fin de fonction "Main" :
Dans l'exemple ci-dessus la fin de la procédure se termine à l'instruction : "int 21h".
L'intéruption (int) exécute la fonction placée dans le registre ah en appelant le gestionnaire d'intéruption 21h qui correspond aux fonctions MS-DOS.
7)
Fin de segment de code : "CODE ends"
"ends", signifie : fin de segment.
8) Fin de fonction principale : "end Main"
Indique au compilateur la fonction principale à partir de laquelle MS-DOS 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 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\link16 /tiny 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 !