external assembly file in visual studio
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.
Related videos on Youtube
user3864147
Updated on July 10, 2022Comments
-
user3864147 almost 2 years
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.
-
Peter Cordes over 5 yearsRelated: Assembly programming - WinAsm vs Visual Studio 2017 for pure asm projects. (I've added this and the other link to the x86 tag wiki)
-
tenghiz over 4 yearsWorks fine on VS 2015. However, VS 2017 shows message: A1000, cannot open file: x.asm.
-
mirabilos over 2 yearsSome gotchas: Build Customisation only shows up in the Project menu when the project itself (second entry) is selected in the Solution Explorer window, not any of the source files or so. You might also run into SAFESEH errors; try to not disable it in the linker but _en_able it in the MASM properties instead.