Во-первых, пожалуйста, взгляните на мою статью "Как создать проект x64 / x86 с помощью отдельного файла сборки x64 / x86" .
Давайте через go пройдем сообщения об ошибках одно за другим (вы можете переместить курсор на строку ошибки, дважды щелкнув сообщение об ошибке):
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, BASI C, FORTRAN, PASCAL, SYSCALL или STDCALL).
A2008 syntax error : . test main.asm 3
Директива .STACK является версией c эпохи MS-DOS. Бесполезно, если вы соберетесь с ML за Windows (посмотрите здесь ). Это не разрешено в ML64.
A2008 syntax error : , test main.asm 4
В директиве PROTO ML64 не любит запятую между ключевым словом PROTO и первый параметр. Удалите его.
A2008 syntax error : INVOKE test main.asm 16
Директива INVOKE не разрешена в ML64 (пока). Замените 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 в соответствии с моей статьей .