Visual Studio中使用NASM编译汇编文件
NASM相对MASM和GAS而言,是一款比较中庸的汇编器,它语法简洁、功能强大,而且跨平台、免费,是外联汇编的不错选择。
使用Visual Studio开发项目时,如果需要外联NASM汇编,可以使用VS中集成的功能进行设定,让它自动编译相应的汇编文件。在VS2005以前的版本中,可以使用“生成事件”来设置汇编文件的编译工作;在VS2005及以上版本中,可以使用“自定义生成规则”来设定。这里主要说明一下后者。
在VS2005及以上版本中都有“自定义生成规则”功能,它使用一个扩展名为.rules的XML格式的文档来定义生成规则,VS自带一个MASM的生成规则文件masm.rules,在VS安装目录下的VC\VCProjectDefaults中可以找到。要在VS中使用NASM汇编器,也需要一个这样的文件,可以在 http://sourceforge.net/projects/nasm/files/Contributions/rules%20file%20for%20VS/下载,将之放在前面提到的目录中。这个文件只能生成Win32格式的文件。为了生成多种文件格式,需要自己添加相应的规则。下面是我修改后的,可以生成多种格式的规则文件。
1<?xml version="1.0" encoding="utf-8"?>
2<VisualStudioToolFile
3 Name="Netwide Macro Assembler"
4 Version="8.00"
5 >
6 <Rules>
7 <CustomBuildRule
8 Name="NASM"
9 DisplayName="Netwide Macro Assembler"
10 CommandLine="nasm.exe [AllOptions] [AdditionalOptions] [Inputs]"
11 Outputs="[$ObjectFileName]"
12 FileExtensions="*.asm"
13 ExecutionDescription="正在汇编..."
14 >
15 <Properties>
16 <StringProperty
17 Name="PreprocessorDefinitions"
18 DisplayName="宏定义"
19 PropertyPageName="常规"
20 Description="Defines a text macro with the given name. (-D[symbol])"
21 HelpURL="http://www.nasm.us/doc/"
22 Switch="-D[value]"
23 Delimited="true"
24 Inheritable="true"
25 />
26 <StringProperty
27 Name="UndefinePreprocessorDefinitions"
28 DisplayName="取消宏定义"
29 PropertyPageName="常规"
30 Description="Undefines a text macro with the given name. (-U[symbol])"
31 HelpURL="http://www.nasm.us/doc/"
32 Switch="-U[value]"
33 Delimited="true"
34 Inheritable="true"
35 />
36 <StringProperty
37 Name="IncludePaths"
38 DisplayName="包含路径"
39 PropertyPageName="常规"
40 Description="设置包含文件查找路径. (-I[path])"
41 HelpURL="http://www.nasm.us/doc/"
42 Switch="-I[value]"
43 Delimited="true"
44 Inheritable="true"
45 />
46 <BooleanProperty
47 Name="TreatWarningsAsErrors"
48 DisplayName="将警告视为错误"
49 PropertyPageName="常规"
50 Description="Returns an error code if warnings are generated. (-Werror)"
51 HelpURL="http://www.nasm.us/doc/"
52 Switch="-Werror"
53 />
54 <BooleanProperty
55 Name="GenerateDebugInformation"
56 DisplayName="生成调试信息"
57 PropertyPageName="常规"
58 Description="Generates Debug Information. (-g)"
59 HelpURL="http://www.nasm.us/doc/"
60 Switch="-g"
61 DefaultValue="true"
62 />
63 <EnumProperty
64 Name="Format"
65 DisplayName="目标格式"
66 PropertyPageName="常规"
67 Description="输出文件的格式(win32,win64,bin,obj,coff),(-f [format])"
68 >
69 <Values>
70 <EnumValue
71 Value="0"
72 Switch="-f win32"
73 DisplayName="WIN32"
74 />
75 <EnumValue
76 Value="1"
77 Switch="-f win64"
78 DisplayName="WIN64"
79 />
80 <EnumValue
81 Value="2"
82 Switch="-f bin"
83 DisplayName="BIN"
84 />
85 <EnumValue
86 Value="3"
87 Switch="-f obj"
88 DisplayName="OBJ"
89 />
90 <EnumValue
91 Value="4"
92 Switch="-f coff"
93 DisplayName="COFF"
94 />
95 </Values>
96 </EnumProperty>
97 <StringProperty
98 Name="ObjectFileName"
99 DisplayName="输出文件"
100 PropertyPageName="常规"
101 Description="Specifies the name of the output object file. (-o [file])"
102 HelpURL="http://www.nasm.us/doc/"
103 Switch="-o "[value]""
104 DefaultValue="$(IntDir)\$(InputName).obj"
105 />
106 <StringProperty
107 Name="AssembledCodeListingFile"
108 DisplayName="汇编代码列表文件"
109 PropertyPageName="常规"
110 Description="Generates an assembled code listing file. (-l [file])"
111 HelpURL="http://www.nasm.us/doc/"
112 Switch="-l "[value]""
113 />
114 </Properties>
115 </CustomBuildRule>
116 </Rules>
117</VisualStudioToolFile>
将此文件放在指定目录后,打开VS的“自定义生成规则”对话框,在“可用规则文件”中我们可以看到刚才添加的规则文件,把它前面的选择框勾上就可以在项目中编译NASM汇编代码了。
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2012/2012-07-12-Visual-Studio中使用NASM编译汇编文件/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。