I. Introduction▲
J'ai fait ce tutoriel pour vous montrer que l'on peut faire une application 100Â % en Assembleur(x86) avec Visual C++.
Visual C++ est en fait livré avec MASM, le macro assembleur de Microsoft et qui plus est, dans sa dernière version. Avec donc les toutes dernières instructions des derniers microprocesseurs. Vous n'avez donc rien à installer (à part Visual C++ bien sûr). Ce n'est pas génial tout cela. Le mode opératoire de ce tutoriel sera basé sur Visual C++ express 2010.
II. Le mode opératoire ▲
Après avoir ouvert l'EDI de Visual C++, vous devrez créer un projet vide.
Dans le dossier du projet, vous devrez créer un fichier texte, que l'on va nommer « main.asm » (on aurait très bien pu lui donner un autre nom).
Ensuite, dans l'explorateur de solutions de Visual C++, faites un clic droit sur le projet, et dans le menu contextuel sélectionnez « Ajouter » puis « Élément existant ».
Ce qui nous ouvre une boîte de dialogue d'ouverture de fichier. Vous sélectionnez le fichier « main.asm » précédemment créé et faites « Ajouter ». Le fichier fait dorénavant partie du projet et est bien présent dans l'explorateur de solution de Visual C++.
Ce n'est pas terminé, il nous faut apporter des informations supplémentaires de configuration pour appeler masm et pour l'édition des liens.
Pour cela, dans l'explorateur de solutions, faites un clic droit sur le fichier « main.asm » puis, dans le menu contextuel, cliquez sur « propriétés ». Cela ouvre la fenêtre de propriétés du fichier.
Ensuite, dans la page de propriétés, sélectionnez « Général » dans l'arborescence, et positionnez la propriété « Type d'élément » à « Outil de génération personnalisé ». Ensuite, faites « Appliquer », ce qui a pour effet de rouvrir la page de propriétés avec des options supplémentaires.
Dans l'arborescence de la page de propriétés, sélectionnez « Outil de génération personnalisé » puis « Général ».
Dans cette section nous allons modifier deux propriétés :
- « Ligne de commande » avec : ml /c /coff « main.asm » (c'est la ligne de commande pour assembler main.asm avec masm) ;
- « Sortie » avec main.obj (c'est le nom du fichier de sortie à envoyer à l'éditeur de liens).
Validez les modifications par le bouton « Ok ».
Je vous mets un petit code pour vos tests. Ce code fait appel à deux fonctions de la libc, « puts » et « printf ».
Ces deux fonctions nécessitent d'ajouter la bibliothèque « msvcrt.lib » dans les dépendances du projet (option de l'éditeur de lien).
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
.386
.model
flat, C
EXTRN
_imp__puts:PROC
EXTRN
_imp__printf:PROC
.data
Ch1 DB
10
, 'Hello !'
, 10
, 0
Ch2 DB
'Le chiffre %d'
, 10
, 10
, 0
.code
main PROC
push
OFFSET
Ch1
call
DWORD
PTR
_imp__puts
pop
eax
push
100
push
OFFSET
Ch2
call
DWORD
PTR
_imp__printf
add
esp
, 8
xor
eax
, eax
ret
main ENDP
END
Vous pouvez dorénavant générer votre projet et main.asm sera assemblé par masm et le fichier .obj lié comme si cela était un fichier C ou C++.
Les messages d'erreur s'affichent dans la fenêtre de sortie comme pour un fichier C ou C++.
Faire un programme 100 % assembleur est d'un autre temps, par contre vous pouvez utiliser le même principe pour faire une bibliothèque de fonctions écrite en assembleur.
Bonne lecture,
CGi.
III. Conclusion et remerciements▲
Nous tenons à remercier FRANOUCH pour la relecture orthographique et Malick SECK pour la mise au gabarit.