Visual Studio中的外部程序集文件

use*_*147 15 x86 assembly x86-64 masm visual-studio

我搜索并发现我无法__asm在视觉工作室的x64中使用.相反,我必须使用外部程序集文件.

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

如何编译它们?

你能一步一步解释吗?

rkh*_*khb 39

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

1)启动Visual Studio(社区)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
Run Code Online (Sandbox Code Playgroud)

截图

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;
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

13)构建.exe

截图

并运行它CTRL-F5.

该应用程序将在新窗口中打开.

  • 一些问题:当在“解决方案资源管理器”窗口中选择项目本身(第二个条目)时,“构建自定义”仅显示在“项目”菜单中,而不是任何源文件等。您还可能遇到 [SAFESEH 错误](/sf/ask/1029740421/);尝试不在链接器中禁用它,而是在 MASM 属性中启用它。 (2认同)