Tout d’abord, si vous n’avez pas d’assembleur 64 bits, je vous propose d’utiliser NASM (ML64.EXE) livré gratuitement avec Windows Software Development Kit (SDK) .
Ensuite je vous propose de tester ce petit programme, sorte d’hello world :
; Sample x64 Assembly Program ; Chris Lomont 2009 www.lomont.org extrn ExitProcess: PROC ; external functions in system libraries extrn MessageBoxA: PROC .data caption db '64-bit hello!', 0 message db 'Hello World!', 0 .code Start PROC sub rsp,28h ; shadow space, aligns stack mov rcx, 0 ; hWnd = HWND_DESKTOP lea rdx, message ; LPCSTR lpText lea r8, caption ; LPCSTR lpCaption mov r9d, 0 ; uType = MB_OK call MessageBoxA ; call MessageBox API function mov ecx, eax ; uExitCode = MessageBox(...) call ExitProcess Start ENDP End
2 fonctions externes relatives à l’API Windows sont référencées: ExitProcess et MessageBoxA. La première permet de terminer le programme proprement, et la seconde d’afficher une boite de dialogue avec un message.
Pour lancer la compilation et le linkage:
ml64 hello.asm /link /subsystem:windows /defaultlib:kernel32.lib /defaultlib:user32.lib /entry:Start
Voici les paramètres pour exécuter ML64 en ligne de commande. Si le linkage ne fonctionne pas, recherchez sur votre ordinateur kernel32.lib et user32.lib et copiez les dans le répertoire de votre fichier ASM.
Si vous avez du mal avec l’install et les librairies, je vous ai tout mis dans cette archive zip (47Ko).
Ce qui est intéressant dans ce programme, c’est qu’on ne fait pas appel à des macros externes pour s’adresser directement aux fonctions de l’API. On ne pousse pas non plus les paramètres dans la pile, non… directement, on met les paramètres dans les bons registres. Encore faut-il les connaitre ?
En fait, il s’agit d’une convention d’appel:
Ainsi, si nous reprenons la fonction MessageBoxA:
int WINAPI MessageBox( _In_opt_ HWND hWnd, _In_opt_ LPCTSTR lpText, _In_opt_ LPCTSTR lpCaption, _In_ UINT uType );
Elle prend 4 paramètres en entrée: Hwnd (dans rcx), lpText (dans rdx), lpCaption (dans r8) et uType (dans r9).
Voilà, si vous voulez utiliser l’assembleur dans vos programme C, je vous conseille cet article d’intel. Si cela vous intéresse, faites moi signe, je ferai d’autres articles sur l’assembleurx64 et notamment sur l’utilisation des fonctions accélératrices des processeurs modernes pour le calcul parallèle (SIMD) dans les moteurs 3D par exemple.
0 commentaires