在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开始有所不同:
- 右键单击项目 , 生成自定义 ,勾选“ masm ”。
- 用鼠标右键单击
.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 :要指定清除作为入口点,请按照下列说明操作:
-
打开项目的“属性页”对话框。 有关详细信息,请参阅设置Visual C ++项目属性。
-
单击链接器文件夹。
-
点击高级属性页面。
-
修改入口点属性。
(取自VS文档 )
Edit3 :我可以证实Hans Passant的指示。 另外,根据这篇文章 ,如果你先添加“build customizations”masmcheckbox,然后添加文件,它会被自动识别为一个汇编文件。 而且,在END指令中不指定入口点名称,而是在项目设置中指定它也适用于我。
问题是你的汇编代码只是一个函数。 为了编译和链接,你需要在C / C ++中有一个像Main
一样的启动过程。 您可以通过在您的END
指令中指定开始符号。 喜欢
END clear
或者如果你想的话,你可以链接使用C / C ++生成的Obj生成的Obj。