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开始有所不同:
.asm文件Properties,将Item Type更改为" Microsoft Macro Assembler ".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包含MASM宏汇编程序.汇编代码的较小片段通常在C或C++程序中以内联汇编编写.
要在Visual Studio项目中集成汇编程序文件,请创建常规C/C++项目(命令行或GUI),然后只添加以.asm源文件列表结尾的文件.
要指定clear作为入口点,请按照以下说明操作:
打开项目的"属性页"对话框.有关详细信息,请参阅设置Visual C++项目属性.
单击"链接器"文件夹.
单击"高级"属性页.
修改Entry Point属性.
(它取自Visual Studio文档.)
我可以确认Hans Passant的指示.此外,根据本文,如果您首先添加"构建自定义"masm复选框,然后添加该文件,它将自动被识别为汇编程序文件.此外,不在END指令中指定入口点名称,而是在项目设置中指定它也适用于我.