web-dev-qa-db-fra.com

Fichier d'assemblage externe dans Visual Studio

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.

17
user3864147

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.

Screenshot

2) Dans la fenêtre suivante, choisissez Win 32 Console Application.

Screenshot

3) Vous obtenez une confirmation. Cliquez sur Next >.

Screenshot

4) Dans la fenêtre suivante, vous pouvez accepter les paramètres par défaut. Cliquez sur Finish.

Screenshot

5) Assurez-vous que le projet est mis en surbrillance dans l'Explorateur de solutions et choisissez PROJECT - Build Customizations... Dans le menu.

Screenshot

6) Dans la fenêtre suivante, cochez masm(.targets,.props) et cliquez sur OK.

Screenshot

7) Choisissez Build - Configuration Manager...

Screenshot

8) Changez le Active solution platform En x64

Screenshot

9) Créez callee.asm: PROJECT - Add New Item.

Screenshot

10) Dans la fenêtre suivante, choisissez C++File(.cpp) et - IMPORTANT! - donnez-lui un nom avec une extension .asm. Cliquez sur Add.

Screenshot

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.

Screenshot

11) Dans la page de propriétés, vous devriez voir au moins:

Excluded From Build    (empty) or No
Item Type              Microsoft Macro Assembler

Screenshot

Sous Command Line, Assurez-vous que ml64.exe Est choisi comme assembleur.

Screenshot

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

Screenshot

et l'exécuter avec CTRL-F5.

L'application sera ouverte dans une nouvelle fenêtre.

40
rkhb