
Pour concevoir un petit “Hello World” en invite de commandes en assembleur x86, on peut utiliser le couple NASM-GoLink
- nasm pour compiler
- golink pour lier
Il faut donc d’une manière ou d’une autre trouver sur la Toile Électronique Géante et télécharger les fichiers nasm.exe et golink.exe, et les installer sur le disque dur.
Pour afficher Hello sur la console i.e. sous invite de commandes, on peut utiliser le code assembleur suivant. Il suffit de faire un copier-coller de ce programme dans le petit Notepad et de le sauvegarder avec l’extension .asm (hello.asm) dans un répertoire préalablement créé à cet effet e.g. asm1.
bits 32
extern GetStdHandle
extern WriteConsoleA
extern ExitProcess
STD_OUTPUT_HANDLE equ -11
section .data
msg db "Hello", 13, 10
msglen equ $ - msg
written dd 0
section .text
global start
start:
push STD_OUTPUT_HANDLE
call GetStdHandle
push 0
push written
push msglen
push msg
push eax
call WriteConsoleA
push 0
call ExitProcess
On se rend maintenant sous invite de commandes dans le répertoire asm1, ce qui se fait par la commande cd (change directory).
cd C:\chemin\vers\asm1
Si certains noms intermédiaires comportent des espaces, le chemin doit alors être écrit entre guillemets, ce qui donne quelque chose de ce genre.
cd "C:\chemin vers\asm1"
On est maintenant dans le répertoire asm1 où se trouve le fichier hello.asm, ce qu’on peut vérifier par la commande dir qui affiche le contenu du dossier courant. Pour compiler le programme hello.asm, on entre ceci sous invite de commandes dans ce répertoire de travail asm1
C:\chemin\vers\nasm -f win32 hello.asm
étant supposé que nasm.exe se situe dans le répertoire
C:\chemin\vers
ce qui a pour effet de créer le fichier hello.obj, ce qu’on peut vérifier par la commande dir.
Pour lier ce fichier .obj, on écrit ceci, toujours dans ce répertoire de travail asm1
C:\chemin\vers\golink /entry:start /console hello.obj kernel32.dll
ce qui va créer l’exécutable hello.exe qui affichera Hello en mode console. Pour exécuter hello.exe, on entre simplement hello c’est-à-dire le nom de l’exécutable sans son extension .exe, ce qui va donner ceci.
C:\chemin\vers\asm1>hello
Hello
C:\chemin\vers\asm1>
Autre exemple de programme en assembleur x86
Pour écrire bonjour dans un fichier texte, on peut utiliser le code assembleur suivant. Appelez par exemple ce fichier bonjour.asm et placez-le dans un autre répertoire e.g. asm2 que vous aurez préalablement créé sous Windows pour le distinguer du premier.
BITS 32
GLOBAL start
EXTERN CreateFileA
EXTERN WriteFile
EXTERN CloseHandle
EXTERN ExitProcess
%define GENERIC_WRITE 0x40000000
%define CREATE_ALWAYS 2
%define FILE_ATTRIBUTE_NORMAL 0x80
%define INVALID_HANDLE_VALUE 0xFFFFFFFF
SECTION .data
filename db "texte.txt",0
msg db "bonjour",13,10
msg_len equ $ - msg
written dd 0
hFile dd 0
SECTION .text
start:
push dword 0
push dword FILE_ATTRIBUTE_NORMAL
push dword CREATE_ALWAYS
push dword 0
push dword 0
push dword GENERIC_WRITE
push dword filename
call CreateFileA
mov [hFile], eax
cmp eax, INVALID_HANDLE_VALUE
je .quit
push dword 0
push dword written
push dword msg_len
push dword msg
push dword [hFile]
call WriteFile
push dword [hFile]
call CloseHandle
.quit:
push dword 0
call ExitProcess
Compilez et liez dans ce nouveau répertoire de travail asm2 en remplaçant hello par bonjour des commandes précédentes, ce qui donne ceci.
C:\chemin\vers\nasm -f win32 bonjour.asm
C:\chemin\vers\golink /entry:start /console bonjour.obj kernel32.dll
Puis exécutez le .exe en entrant bonjour, toujours sous invite de commandes, dans le répertoire où a été réalisé ce développement, en l’occurrence
C:\chemin\vers\asm2
dans notre exemple. Le fichier texte.txt a été créé, il contient le mot bonjour, ce qui peut se vérifier en utilisant la commande type, ce qui donne ceci.
C:\chemin\vers\asm2>type texte.txt
bonjour
C:\chemin\vers\asm2>
Notez que le petit Notepad enregistre le fichier, en l’absence d’extension exprimée, avec l’extension .txt qui est celle par défaut de cet utilitaire, mais crée le fichier avec extension si celle-ci est précisée au moment de sa sauvegarde, ce qui explique la possibilité d’avoir eu immédiatement hello.asm et bonjour.asm précédemment. Si vous ne le sauvegardez sous Notepad que sous le nom simple hello, vous obtiendrez hello.txt. Il faudrait alors modifier son extension, et donc le renommer par la commande ren sous invite de commandes, ce qui donnerait ceci.
ren hello.txt hello.asm
Car le compilateur nasm ne prend en charge qu’un fichier texte d’extension .asm (assembleur). Pour éviter ces détours, on enregistre directement sous Notepad le programme assembleur avec son extension .asm pour qu’il puisse être ensuite traité par le compilateur nasm.exe.