首先,请看一下我的文章“如何使用独立的 x64/x86 汇编文件构建 x64/x86 项目”。
让我们一一浏览错误信息(您可以通过双击错误信息将光标移动到错误行):
A2008 syntax error : . test main.asm 1
指令.386仅允许在 32 位 MASM (ML.EXE) 中使用。在 ML64 (ML64.EXE) 中是不允许的。ML64“知道”它可以知道的所有指令。
A2008 syntax error : . test main.asm 2
指令.MODEL仅允许在 32 位 MASM (ML.EXE) 中使用。在 ML64 (ML64.EXE) 中是不允许的。ML64 默认使用平面模型和 x64 调用约定(不是C、BASIC、FORTRAN、PASCAL、SYSCALL 或 STDCALL)。
A2008 syntax error : . test main.asm 3
.STACK指令是 MS-DOS 时代的遗物。如果你用 ML for Windows 组装它是没用的(看这里)。在 ML64 中是不允许的。
A2008 syntax error : , test main.asm 4
在指令PROTO中,ML64 不喜欢 PROTO 关键字和第一个参数之间的逗号。去掉它。
A2008 syntax error : INVOKE test main.asm 16
ML64中不允许使用指令INVOKE(目前)。将 INVOKE 替换为 CALL 并根据Microsoft x64 调用约定填写寄存器:
mov ecx, 0
call ExitProcess
A2008 syntax error : main test main.asm 18
A2088 END directive required at end of file test main.asm 18
指令END不得包含 ML64 的附加入口点。删除“主要”。这也消除了第二个错误。根据我的文章在 Visual Studio 链接器选项中设置入口点。