我搜索并发现我无法在 Visual Studio 的 x64 中使用
__asm
。相反,我必须使用外部汇编文件。
如何将外部程序集文件添加到我的 Win32 控制台项目?
如何编译?
如何在 Visual Studio 中使用 x64 程序集文件构建混合源 x64 项目:
1) 启动 Visual Studio (Community) 2015 并选择
FILE - New - Project
。
2) 在下一个窗口中选择
Win 32 Console Application
。
3) 您会收到确认信息。点击
Next >
。
4) 在下一个窗口中您可以接受默认设置。点击
Finish
。
5) 确保该项目在解决方案资源管理器中突出显示,然后从菜单中选择
PROJECT - Build Customizations...
。
6) 在下一个窗口中勾选
masm(.targets,.props)
并单击 OK
。
7) 选择
Build - Configuration Manager...
8) 将
Active solution platform
更改为 x64
9) 创建callee.asm:
PROJECT - Add New Item
.
10) 在下一个窗口中选择
C++File(.cpp)
并 - 重要! - 为其指定一个带有 .asm
扩展名的名称。点击Add
。
10) 现在检查
.asm
文件是否具有正确的属性。在解决方案资源管理器中,右键单击该文件并选择 Properties
。
11) 在属性页中您至少应该看到:
Excluded From Build (empty) or No
Item Type Microsoft Macro Assembler
在
Command Line
下确保选择 ml64.exe
作为汇编程序。
点击
OK
。
12)现在您可以用内容填充文件。
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;
}
被调用者.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)构建.exe
并使用 CTRL-F5运行它。
申请将在新窗口中打开。