尝试在VS2017 ml64中编译x64程序集,给出奇怪的语法错误

时间:2018-09-22 06:53:00

标签: assembly visual-studio-2017

我正在尝试将在此处找到的DXT解压缩库构建为x64 DLL: http://www.matejtomcik.com/Public/KnowHow/DXTDecompression/#x64

我已按照以下步骤操作:

  1. 创建了一个空的Windows DLL项目。

  2. 右键单击项目>> Build Dependencies >> Build Customization ... >>启用masm

  3. 将所有src asm / c / h文件添加到项目中

  4. 右键单击项目>>属性>> Microsoft宏汇编程序>>常规>>添加了_WIN64

  5. 的预处理程序定义
  6. 将构建目标设置为Release x64

现在,当我尝试编译项目时,它会遇到第一个asm文件:

ifndef _WIN64
.model FLAT, C
endif
.data
EXTERNDEF aAlphaDxt3Lookup:DWORD
aAlphaDxt3Lookup DD 0h,011000000h,022000000h,033000000h,044000000h,055000000h,066000000h,077000000h
DD 088000000h,099000000h,0aa000000h,0bb000000h,0cc000000h,0dd000000h,0ee000000h,0ff000000h
end

并给出此错误:

  

A2008语法错误:。 (第2行)

我假设我错过了一些设置步骤或VS中某个地方的选项不正确。我尝试切换几个设置,添加.586等无济于事。

编辑:问题澄清:Removing .model FLAT, C修复了语法错误,并且asm文件正确编译。 ml64仍然使用.mode吗?

从这里:https://social.msdn.microsoft.com/Forums/vstudio/en-US/f4c79dbc-7048-4513-bd63-70352186512f/64bit-compile-error-language-type-must-be-specified?forum=vclanguage

  

x64汇编器(ML64)不接受许多较旧的x86   指令。不允许所有CPU模型指令,因为它们不   对于64位代码有意义。而且,该模型现在一直处于FLAT状态   因为我们不需要担心分段内存。另外,要警告   当前PROC / INVOKE指令不会自动   生成展开指令...

1 个答案:

答案 0 :(得分:0)

确定,所以找到了它: https://msdn.microsoft.com/en-us/library/ss9fh0d6.aspx

  

备注

     

.MASM不用于x64(ml64.exe)。

真的吗?在备注部分... MS可以添加一个描述性的错误消息。