I searched and found I can not use __asm
in x64 in visual studio. Instead I have to use an external assembly file.
How can I add external assembly file to my win32 console project?
How can compile them?
Can you explain step by step.
How to build a mixed-source x64-project with a x64 assembly file in Visual Studio:
1) Start Visual Studio (Community) 2015 and choose FILE - New - Project
.
2) In the next window choose Win 32 Console Application
.
3) You get a confirmation. Click on Next >
.
4) In the next window you can accept the default settings. Click on Finish
.
5) Make sure, that the project is highlighted in the Solution Explorer and and choose PROJECT - Build Customizations...
from the menu.
6) In the next window tick masm(.targets,.props)
and click on OK
.
7) Choose Build - Configuration Manager...
8) Change the Active solution platform
to x64
9) Create callee.asm: PROJECT - Add New Item
.
10) In the next window choose C++File(.cpp)
and - IMPORTANT! - give it a name with an .asm
extension. Click on Add
.
10) Now check if the .asm
file has the right properties. In the Solution Explorer right-click on the file and choose Properties
.
11) In the Property Page you should see at least:
Excluded From Build (empty) or No Item Type Microsoft Macro Assembler
Under Command Line
ensure that ml64.exe
is chosen as the assembler.
Click on OK
.
12) Now you can fill the files with content.
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) Build the .exe
and run it with CTRL-F5.
The application will be opened in a new window.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With