下载MASM32
下载后安装到D:\masm32
目录下。
头文件在D:\masm32\include
目录下。
静态库在D:\masm32\lib
目录下。

配置Visual Studio
新建一个工程,选择空项目。
选择生成依赖项
选择MASM32
创建一个main.asm
文件,输入以下代码:
.686.model flat, stdcalloption casemap:none
include windows.incinclude user32.incinclude kernel32.inc
.dataszText db "Hello World", 0
.codestart: invoke MessageBoxA, NULL, addr szText, addr szText, MB_OK invoke ExitProcess, 0
end start
配置头文件路径


此时就可以编译了。

使用C库函数配置
修改代码,静态链接CRT
库。
.686.model flat, stdcalloption casemap:none
include windows.incinclude user32.incinclude kernel32.inc
; 静态链接CRT库includelib libcmt.libincludelib libvcruntime.libincludelib libucrt.lib
.dataszText db "Hello World", 0
.codemain proc c invoke MessageBoxA, NULL, addr szText, addr szText, MB_OK invoke ExitProcess, 0main endpend
创建一个stdc.inc
头文件,用来声明CRT
函数。
.686option casemap :none
; 主要用来声明一些C运行时库的函数ifndef _stdc_inc_stdc_inc EQU 1
fgets proto c :DWORD, :DWORD, :DWORD fprintf proto c :DWORD, :DWORD, :VARARG ; 0:stdin, 1:stdout, 2:stderr __acrt_iob_func proto c :DWORD ; 因为没有stdin, stdout, stderr这些文件指针,所以需要通过这个函数获取
endif
完整代码:
.686.model flat, stdcalloption casemap:none
include windows.incinclude user32.incinclude kernel32.inc
include stdc.inc
includelib libcmt.libincludelib libvcruntime.libincludelib libucrt.lib
.dataszText db "Hello World", 0
.code
main proc c local @stdin:DWORD local @stdout:DWORD local @input_buf[100]: BYTE
invoke __acrt_iob_func, 0h mov @stdin, eax
invoke __acrt_iob_func, 1h mov @stdout, eax
invoke fgets, addr @input_buf, 100, @stdin invoke fprintf, @stdout, addr @input_buf
invoke ExitProcess, 0main endp
end
