J'ai cherché et trouvé que je ne peux pas utiliser __asm
en x64 dans visual studio. Au lieu de cela, je dois utiliser un fichier d'assemblage externe.
Comment puis-je ajouter un fichier d'assemblage externe à mon projet de console win32?
Comment les compiler?
Pouvez-vous expliquer étape par étape.
Comment créer un projet x64 à sources mixtes avec un fichier d'assemblage x64 dans Visual Studio:
1) Démarrez Visual Studio (Community) 2015 et choisissez FILE - New - Project
.
2) Dans la fenêtre suivante, choisissez Win 32 Console Application
.
3) Vous obtenez une confirmation. Cliquez sur Next >
.
4) Dans la fenêtre suivante, vous pouvez accepter les paramètres par défaut. Cliquez sur Finish
.
5) Assurez-vous que le projet est mis en surbrillance dans l'Explorateur de solutions et choisissez PROJECT - Build Customizations...
Dans le menu.
6) Dans la fenêtre suivante, cochez masm(.targets,.props)
et cliquez sur OK
.
7) Choisissez Build - Configuration Manager...
8) Changez le Active solution platform
En x64
9) Créez callee.asm: PROJECT - Add New Item
.
10) Dans la fenêtre suivante, choisissez C++File(.cpp)
et - IMPORTANT! - donnez-lui un nom avec une extension .asm
. Cliquez sur Add
.
10) Vérifiez maintenant si le fichier .asm
A les bonnes propriétés. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier et choisissez Properties
.
11) Dans la page de propriétés, vous devriez voir au moins:
Excluded From Build (empty) or No
Item Type Microsoft Macro Assembler
Sous Command Line
, Assurez-vous que ml64.exe
Est choisi comme assembleur.
Cliquez sur OK
.
12) Vous pouvez maintenant remplir les fichiers avec du contenu.
ConsoleApplication1.cpp:
#include <iostream>
using namespace std;
extern "C" void hello_from_asm();
int main()
{
cout << "Hello from CPP" << endl;
hello_from_asm();
return 0;
}
callee.asm:
PUBLIC hello_from_asm
EXTERN puts:PROC
.data
hello1 db "Hello from ASM.",0
.code
hello_from_asm PROC
Push rbp
mov rbp, rsp
sub rsp, 32 ; Shadow Space
and spl, -16 ; Align stack at 16
lea rcx, hello1
call puts
leave ; Restore stack (rsp) & frame pointer (rbp)
ret
hello_from_asm ENDP
END
13) Construisez le .exe
et l'exécuter avec CTRL-F5.
L'application sera ouverte dans une nouvelle fenêtre.