在Visual Studio中编译程序集

bob*_*obo 52 windows assembly visual-studio-2010

如何使用Visual Studio编译汇编代码?

我想在Visual Studio 2010中编译并运行程序集源文件.

我创建了一个Visual C++项目并在文件中插入了一些汇编代码code.asm:

.586              ;Target processor.  Use instructions for Pentium class machines
.MODEL FLAT, C    ;Use the flat memory model. Use C calling conventions
.STACK            ;Define a stack segment of 1KB (Not required for this example)
.DATA             ;Create a near data segment.  Local variables are declared after
                  ;this directive (Not required for this example)
.CODE             ;Indicates the start of a code segment.

clear PROC
   xor eax, eax 
   xor ebx, ebx 
   ret 
clear ENDP 
END
Run Code Online (Sandbox Code Playgroud)

但问题是当你尝试编译它时,你会得到:

LINK : error LNK2001: unresolved external symbol _mainCRTStartup
Run Code Online (Sandbox Code Playgroud)

我确实启用了构建自定义masm.targets(右键单击项目>构建自定义..),但无济于事.

Han*_*ant 62

听起来像是没有启用.asm文件的自定义构建规则.右键单击项目"自定义生成规则",勾选"Microsoft宏汇编程序".使用"END clear"指令并禁用增量链接,我得到了一个干净的构建.

VS2010开始有所不同:

  1. 右键单击" 项目"," 构建自定义 " ,勾选" masm ".
  2. 右键单击.asm文件Properties,将Item Type更改为" Microsoft Macro Assembler ".

  • 它在我的身上.倾向于使用Express版本的程序员询问. (4认同)
  • 在Visual Studio的后续版本(例如2015)中,您必须遵循以下路径:Project - >(右键单击) - > Build Dependencies-> Build Customizations ...->(check)masm (4认同)

bob*_*obo 11

命令行:

用以下代码编译代码:

ml /c /Cx /coff code.asm
Run Code Online (Sandbox Code Playgroud)

你得到code.obj作为输出.

链接:

link code.obj /SUBSYSTEM:console /out:go.exe /entry:clear
Run Code Online (Sandbox Code Playgroud)

您现在可以运行go.exe.

或者,一起完成所有操作:

ml /Cx /coff code.asm /link /SUBSYSTEM:console /link /entry:clear
Run Code Online (Sandbox Code Playgroud)

Visual Studio(未解决)


Mar*_*wis 9

Visual Studio包含MASM宏汇编程序.汇编代码的较小片段通常在C或C++程序中以内联汇编编写.

要在Visual Studio项目中集成汇编程序文件,请创建常规C/C++项目(命令行或GUI),然后只添加以.asm源文件列表结尾的文件.

要指定clear作为入口点,请按照以下说明操作:

  1. 打开项目的"属性页"对话框.有关详细信息,请参阅设置Visual C++项目属性.

  2. 单击"链接器"文件夹.

  3. 单击"高级"属性页.

  4. 修改Entry Point属性.

(它取自Visual Studio文档.)

我可以确认Hans Passant的指示.此外,根据本文,如果您首先添加"构建自定义"masm复选框,然后添加该文件,它将自动被识别为汇编程序文件.此外,不在END指令中指定入口点名称,而是在项目设置中指定它也适用于我.