Visual Studio 中的外部汇编文件

问题描述 投票:0回答:1

我搜索并发现我无法在 Visual Studio 的 x64 中使用

__asm
。相反,我必须使用外部汇编文件。

如何将外部程序集文件添加到我的 Win32 控制台项目?

如何编译?

visual-studio assembly x86 x86-64 masm
1个回答
59
投票

如何在 Visual Studio 中使用 x64 程序集文件构建混合源 x64 项目:

1) 启动 Visual Studio (Community) 2015 并选择

FILE - New - Project

Screenshot

2) 在下一个窗口中选择

Win 32 Console Application

Screenshot

3) 您会收到确认信息。点击

Next >

Screenshot

4) 在下一个窗口中您可以接受默认设置。点击

Finish

Screenshot

5) 确保该项目在解决方案资源管理器中突出显示,然后从菜单中选择

PROJECT - Build Customizations...

Screenshot

6) 在下一个窗口中勾选

masm(.targets,.props)
并单击
OK

Screenshot

7) 选择

Build - Configuration Manager...

Screenshot

8) 将

Active solution platform
更改为 x64

Screenshot

9) 创建callee.asm:

PROJECT - Add New Item
.

Screenshot

10) 在下一个窗口中选择

C++File(.cpp)
并 - 重要! - 为其指定一个带有
.asm
扩展名的名称。点击
Add

Screenshot

10) 现在检查

.asm
文件是否具有正确的属性。在解决方案资源管理器中,右键单击该文件并选择
Properties

Screenshot

11) 在属性页中您至少应该看到:

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

Screenshot

Command Line
下确保选择
ml64.exe
作为汇编程序。

Screenshot

点击

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

Screenshot

并使用 CTRL-F5运行它。

申请将在新窗口中打开。

© www.soinside.com 2019 - 2024. All rights reserved.