Le programme doit être saisi dans un fichier texte non formatté (c'est-à-dire sans caractères en gras, souligné, avec
des polices de caractères de différentes tailles, ...) appelé fichier source. En effet, l'assembleur
(le programme permettant de faire la traduction du langage assembleur en langage machine) permet uniquement
de créer un fichier assemblé à partir du fichier source (il devra comporter l'extension .ASM, en s'appelant par exemple source.asm
ou n'importe quel autre nom suivi de l'extension .asm).
L'assembleur va fournir un fichier objet (dont l'extension est .obj) qui va contenir l'ensemble des instructions traduites
en instructions machines. Ce fichier .OBJ ne pourra toutefois pas s'exécuter directement car il faut encore lier les différents fichiers.
Comment ça les différents fichiers?
En effet il est possible de construire un exécutable à partir de plusieurs fichiers sources (à partir d'un
certain niveau de programmation il devient intéressant de créer des fichiers contenant des fonctions...). Ainsi, même si
vous avez un seul fichier objet il vous faudra utiliser un programme (appelé éditeur de liens) qui va vous permettre
de créer un fichier exécutable (dont l'extension sera ".exe").
|
Note d'un visiteur :
Les fichiers de sortie ne sont pas obligatoirement des
fichiers object, ni même un exécutable !
Il est en effet possible de générer un fichier binaire ne comportant
que la traduction exacte du fichier source.
Ce fichier binaire pourra par exemple être utilisé comme programme
d'amorçage (boot) d'un ordinateur lorsqu'il sera placé sur le
secteur d'amorçage (MBR) d'une disquette
ou d'un disque dur.
|
Comme dans tout programme le fichier source doit être saisi de manière rigoureuse. Chaque définition
et chaque instruction doivent ainsi s'écrire sur une nouvelle ligne (pour que l'assembleur puisse différencier les différentes intructions)
Le fichier source contient:
- Des définitions de données déclarées par des directives (mots spéciaux interprétés par l'assembleur, nous les étudierons plus tard, le but est ici de donner une idée de ce à quoi ressemble un fichier source)
Celles-ci sont regroupées dans le segment de données délimité par les directives SEGMENT et ENDS
- Puis sont placées les instructions (qui sont en quelque sorte le coeur du programme), la première devant être
précédée d'une étiquette, c'est-à-dire par un nom qu'on lui donne. Celles-ci sont regroupées dans le segment d'instructions
délimité par les directives SEGMENT et ENDS
- Enfin le fichier doit être terminé par la directive END suivi du nom de l'étiquette de la première instruction (pour permettre au compilateur
de connaître la première instruction à exécuter
- (Les points-virgules marquent le début des commentaires, c'est-à-dire que tous les caractères situés à droite d'un point virgule seront ignorés)
Voici à quoi ressemble un fichier source (fichier .ASM):
donnees SEGMENT; voici le segment de données dont l'étiquette est donnees
;Placez ici les déclarations de données
donnees ENDS; ici se termine le segment de donnees
ASSUME DS:donnee, CS: instr
instr SEGMENT; voici le segment d'instructions dont l'etiquette est instr
debut:
;placez ici votre premiere instruction (son etiquette est nommée debut)
;Placez ici vos instructions
instr ENDS; fin du segment d'instructions
END debut; fin du programme suivie de l'etiquette de la premiere instruction
Comme nous le verrons plus loin, les données sont regroupées dans une
zone de la mémoire appelé segment de données, tandis que les instructions se situent dans un segment d'instructions.
Le registre DS (Data Segment) contient le segment de données, tandis que le registre CS
(Code Segment) contient le segment d'instructions. C'est la directive ASSUME qui permet
d'indiquer à l'assembleur où se situe le segment de données et le segment de code.
Puis il s'agit d'initialiser le segment de données:
MOV AX, nom_du_segment_de_donnees
MOV DS, AX
|