首先请看我的文章"How to build a x64/x86-project with a standalone x64/x86 assembly file"。
让我们一一浏览错误信息(您可以通过双击错误信息将光标移动到错误行):
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 调用约定(not C、BASIC、FORTRAN、PASCAL、SYSCALL 或 STDCALL)。
A2008 syntax error : . test main.asm 3
指令.STACK 是MS-DOS 时代的遗物。如果你用 ML for Windows 组装它是没用的(看看here)。在 ML64 中是不允许的。
A2008 syntax error : , test main.asm 4
在指令PROTO 中,ML64 不喜欢 PROTO 关键字和第一个参数之间的逗号。删除它。
A2008 syntax error : INVOKE test main.asm 16
指令 INVOKE 在 ML64 中是不允许的(目前)。用CALL代替INVOKE,按照Microsoft x64 calling convention填写寄存器:
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 入口点。删除“主要”。这也消除了第二个错误。根据my article在Visual Studio链接器选项中设置入口点。