首页 > 解决方案 > 试图在 VS2017 ml64 中编译 x64 程序集,给出奇怪的语法错误

问题描述

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

我已按照以下步骤操作:

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

  2. 右键单击项目>>构建依赖项>>构建自定义...>>启用masm

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

  4. 右键单击项目>>属性>> Microsoft宏汇编程序>>常规>>预处理器定义添加_WIN64

  5. 将构建目标设置为 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 =vc语言

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

标签: assemblyvisual-studio-2017

解决方案


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

评论

.MODEL 未在 MASM for x64 (ml64.exe) 中使用。

真的吗?在备注部分...MS 很高兴添加描述性错误消息。


推荐阅读