有关vs2008在x64下编译.asm汇编文件

时间:2022-09-12 11:08:58
环境:vs2008 
平台:win7  X64
内容:利用vs2008自身集成的masm编译器,将asm文件编译成obj文件

描述:由于汇编文件只能在x86模式下才能嵌入进C++工程中,而x64下只能采取将asm文件编译成obj文件,然后在链接到工程中,也就是C++调用独立汇编asm文件中的函数。

问题:为了直接在vs2008下编译asm文件,我右键点击工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”,但是我发现asm编译器还是ml.exe而非ml64.exe,请各位大神指点!!

13 个解决方案

#1


自己先顶一下,另再补充一下问题:我在是vs2013下在做如上的动作时,asm编译器就会根据平台的选择而做相应的改变,如:选择win32,编译器就会改变为ml.exe;选择x64,编译器就会改为ml64.exe。在线等各位大神的解答,谢谢!!

#2


自己新建一个生成规则呗

#3




引用 2 楼 adlay 的回复:
自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

#4


在MSDN里面搜MsBuild

#5


引用 3 楼 guhzh 的回复:
Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的

#6


引用 4 楼 zhao4zhong1 的回复:
在MSDN里面搜MsBuild


首先谢谢您的答复,不过设置编译前事件的话,对我这个菜鸟来说写那个批处理文件有点困难,所以不想采用这种方法。还是谢谢你!

#7


引用 5 楼 adlay 的回复:
Quote: 引用 3 楼 guhzh 的回复:



Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的


就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。

#8


asm编译为obj
link时添加该obj

网上搜一个asm64+CPP64的博客文章应该不难吧。我猜。

#9


右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”

我猜。

#10


引用 7 楼 guhzh 的回复:
Quote: 引用 5 楼 adlay 的回复:

Quote: 引用 3 楼 guhzh 的回复:



Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的


就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。


我不知道你具体怎么操作的,我用新建的规则测试是可以的:
有关vs2008在x64下编译.asm汇编文件

#11


注意楼上截图中“窗口(W)”下面的“x64”

#12


引用 9 楼 zhao4zhong1 的回复:
右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”

我猜。



我是在x64模式下工程选择的“Custom Build Rule”,只是vs2008本身不自带编译64位汇编的规则,需要自己去配置,不知道别人是什么情况,不过我安装的vs2008是这样的情况。

#13


引用 10 楼 adlay 的回复:
Quote: 引用 7 楼 guhzh 的回复:

Quote: 引用 5 楼 adlay 的回复:

Quote: 引用 3 楼 guhzh 的回复:



Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的


就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。


我不知道你具体怎么操作的,我用新建的规则测试是可以的:
有关vs2008在x64下编译.asm汇编文件




看到你的提示有感,我试着去再创建一个新的规则才发现,原来编译器所依赖的masm.rules文件是通过配置自动生成的!问题已解决,很感谢 adlay 的耐心解答! 有关vs2008在x64下编译.asm汇编文件

#1


自己先顶一下,另再补充一下问题:我在是vs2013下在做如上的动作时,asm编译器就会根据平台的选择而做相应的改变,如:选择win32,编译器就会改变为ml.exe;选择x64,编译器就会改为ml64.exe。在线等各位大神的解答,谢谢!!

#2


自己新建一个生成规则呗

#3




引用 2 楼 adlay 的回复:
自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

#4


在MSDN里面搜MsBuild

#5


引用 3 楼 guhzh 的回复:
Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的

#6


引用 4 楼 zhao4zhong1 的回复:
在MSDN里面搜MsBuild


首先谢谢您的答复,不过设置编译前事件的话,对我这个菜鸟来说写那个批处理文件有点困难,所以不想采用这种方法。还是谢谢你!

#7


引用 5 楼 adlay 的回复:
Quote: 引用 3 楼 guhzh 的回复:



Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的


就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。

#8


asm编译为obj
link时添加该obj

网上搜一个asm64+CPP64的博客文章应该不难吧。我猜。

#9


右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”

我猜。

#10


引用 7 楼 guhzh 的回复:
Quote: 引用 5 楼 adlay 的回复:

Quote: 引用 3 楼 guhzh 的回复:



Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的


就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。


我不知道你具体怎么操作的,我用新建的规则测试是可以的:
有关vs2008在x64下编译.asm汇编文件

#11


注意楼上截图中“窗口(W)”下面的“x64”

#12


引用 9 楼 zhao4zhong1 的回复:
右键点击Debug | Win64或Release | Win64工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”
而不是
右键点击Debug | Win32或Release | Win32工程选择“Custom Build Rule”,将其设置为“Microsoft Macro Assembler”

我猜。



我是在x64模式下工程选择的“Custom Build Rule”,只是vs2008本身不自带编译64位汇编的规则,需要自己去配置,不知道别人是什么情况,不过我安装的vs2008是这样的情况。

#13


引用 10 楼 adlay 的回复:
Quote: 引用 7 楼 guhzh 的回复:

Quote: 引用 5 楼 adlay 的回复:

Quote: 引用 3 楼 guhzh 的回复:



Quote: 引用 2 楼 adlay 的回复:

自己新建一个生成规则呗


我查看过ml.exe这个规则的依赖文件masm.rules,这个根本没法将其改为ml64.exe;我也试过只将出现ml.exe的地方修改成ml64.exe,但是这样会报错。

新建一个,不是修改原有的


就是新建,那其中的文件依赖都搞得不是很清楚的话 ,我想也不会成功吧,我试过没有新建,直接在原文件上改动,其他的依赖文件都不动,结果编译的时候会报错啊,asm文件我有在其他地方编译成功过,所有应该不是asm文件本身的问题。


我不知道你具体怎么操作的,我用新建的规则测试是可以的:
有关vs2008在x64下编译.asm汇编文件




看到你的提示有感,我试着去再创建一个新的规则才发现,原来编译器所依赖的masm.rules文件是通过配置自动生成的!问题已解决,很感谢 adlay 的耐心解答! 有关vs2008在x64下编译.asm汇编文件