在Visual Studio中编译程序集

如何使用VS编译汇编代码?

我想要做的是在Visual Studio 2010中编译和运行程序集源文件。

我创build了一个VC ++项目,并在一个文件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 

然而,问题是当你尝试编译这个,你会得到

 LINK : error LNK2001: unresolved external symbol _mainCRTStartup 

我没有去启用构build自定义masm.targets (右键单击项目>构build自定义..),但无济于事

听起来像是.asm文件的自定义生成规则没有启用。 用鼠标右键单击该项目,自定义生成规则,勾选“Microsoftmacros汇编程序”。 使用“END清除”指令并禁用增量链接,我得到一个干净的版本。

VS2010开始有所不同:

  1. 右键单击项目生成自定义 ,勾选“ masm ”。
  2. 用鼠标右键单击.asm文件属性 ,将项目types更改为“ Microsoftmacros汇编程序 ”。

命令行:

编译代码:

 ml /c /Cx /coff code.asm 

你得到code.obj作为输出。

链接:

 link code.obj /SUBSYSTEM:console /out:go.exe /entry:clear 

您现在可以运行go.exe。

或者,一起去做:

 ml /Cx /coff code.asm /link /SUBSYSTEM:console /link /entry:clear 

Visual Studio(未解决)

Visual Studio包含MASMmacros汇编器。 汇编程序代码的较小片段通常以C或C ++程序的内联汇编编写。

编辑 :要将汇编文件集成到Visual Studio项目中,请创build一个常规的C / C ++项目(命令行或GUI),然后将一个以.asm结尾的文件添加到源文件列表中。

编辑2 :要指定清除作为入口点,请按照下列说明操作:

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

  2. 单击链接器文件夹。

  3. 点击高级属性页面。

  4. 修改入口点属性。

(取自VS文档 )

Edit3 :我可以证实Hans Passant的指示。 另外,根据这篇文章 ,如果你先添加“build customizations”masmcheckbox,然后添加文件,它会被自动识别为一个汇编文件。 而且,在END指令中不指定入口点名称,而是在项目设置中指定它也适用于我。

问题是你的汇编代码只是一个函数。 为了编译和链接,你需要在C / C ++中有一个像Main一样的启动过程。 您可以通过在您的END指令中指定开始符号。 喜欢

 END clear 

或者如果你想的话,你可以链接使用C / C ++生成的Obj生成的Obj。