Sommaire

COURS N° 1 - Mon premier programme

Cours n° 2 - MsgBox

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


Le programme ci-dessus ne fait rien d'autre que terminer le programme en appelant la fonction particulière de MS-DOS : 4C00h (Exit).

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'"

La directive ORG indique au système d'exploitation que le code devra commencer à l'adresse spécifiée en operande et en l'occurence 256 (100h). C'est le cas des fichiers exécutables "com". Cette directive doit toujours être placée entre le nom du segment et la procédure principale.
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"

Idem pour le segment de code.

"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 !