添加环境变量 YASMPATH=G:\yasm-1.3.0-win64\ 注意结尾的\不要漏 Or: mkdir D:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\bin\ copy yasm-1.3.0-win64\yasm.exe D:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\bin\ https://github.com/ShiftMediaProject/VSYASM 下载 yasm.props yasm.targets yasm.xml 拷贝到 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations 或者 Visual Studio 2015: C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations Visual Studio 2017: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\BuildCustomizations Visual Studio 2019: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations Open VS2022 Project 项目右键 - 生成依赖项 - 生成自定义 - 查找现有的 Add C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\yasm.targets 右键单击 asm 文件,属性 - 项类型 - Yasm Assembler Debug模式生成调试信息: 项目属性 - Debug - Yasm Modular Assembler - Generate Debug Information: 是(-g cv8) 报错: 无法解析的外部符号 _mainCRTStartup 或 无法解析的外部符号 _main,函数 "int __cdecl __scrt_common_main_seh(void)" 解决方法: 项目属性 - 链接器 - 高级 - 入口点: x86: main x64: _main 由于 yasm 并不能在汇编代码里区分是 Win32 还是 x64 模式,所以同一个项目里如果同时具有 Win32 和 x64 两种模式的汇编代码,是不能同时都编译的,会报错的。解决方法是,我们可以使用自定义生成工具里提供的排除功能,在 Win32 模式下排除所有 64 位汇编文件的生成,在 x64 模式下排除所有 32 位汇编文件的生成 Test Code: global _main ;extern _printf section .text _main: mov eax,01H add eax,02H ;push message ;call _printf ;调用C的printf ;add esp,4 ret message: db 'hello,world',10,0