标签:调试 cal 搜索 end main 环境 dia 类型 x64
Microsoft Macro Assembler(MASA)宏汇编程序是一种x86汇编程序,它使用Intel的语法在MS-DOS和Microsoft Windows系统上运行。MASM由Microsoft维护,但是自从6.12版本之后,它就不再作为单独的产品出售了。相反,它与各种Microsoft sdk和C编译器一起被提供。MASM的最新版本包含在Microsoft Visual Studio中。
因此,我们可以轻松地在VS中进行配置开发环境。当然,是对已经下载了VS的同学来说,毕竟下载VS本就不轻松了??
依然选择C++文件,但在下方把文件后缀名改成.asm
)
在资源管理器中右键项目名,选择生成依赖项,点击生成自定义后选择第四个MASM。这一步相当于告诉IDE,我要开发的是汇编语言,而不是其他的。
接着点开我们创建的文件(不是项目)的属性页,在项类型中选择Microsoft Macro Assembler。
接下来输入一段简单的汇编代码来测试下我们是否配置成功。
;assm.asm
ExitProcess PROTO
.code
main PROC
mov rax,5
add rcx,6
mov rax,rcx
mov rcx,0
call ExitProcess
main endp
END
\[注意:上面的都是x64语法,上方的调试器也要对应使用x64的,用x86啥的会报错。毕竟不同的CPU寄存器名字都不一样\]
然后运行,结果报错了。
这是程序不知道程序入口在哪,与C语言不同。我们的C语言有main函数作为入口,编译器能很轻松地找到程序入口。
而在汇编程序中我们要自己设置入口标签。点开项目属性页\(链接器->高级\),在第一个入口点输入入口标签名,你想叫main想叫start都行,一个标签罢了。我们的代码中是main PROC
,所以在入口点输入main,确定后退出再运行。由于只是测试代码,为了便捷,没有啥输出,比较朴素。
当然入口点叫start也是运行成功的,无非是把之前代码里的main全换成start。
这一步不是必须的,但如果有语法高亮和提示的话,开发起来会很爽!
比如你输入个eax,它会自动提示你这是x86系列下的累加器。这种功能对新手可谓极其友好!
在菜单栏上选择工具->扩展和更新->联机,在右侧搜索栏中输入Asmdude,按照提示安装即可。
一开始为了生成列表文件,以便查看相关的程序信息
于是在顶部菜单中依次选择"项目"->"属性",弹出项目属性窗口。
左侧展开"Microsoft Macro Assembler"项,在展开项中选择"Listing File"。
右侧"Generate Preprocessed Source Listing"项,选择"是(/EP)"。
"List All Availabel Information"项,选择"是(/Sa)"。。
"Assembled Code Listing File"项,输入"$(ProjectName).lst"。
点击"应用"按钮,再点击"确定"按钮,关闭窗口。
结果程序就运行不了了。
便开始疯狂地查VS文档,搞了快一天。最后在StackOverflow上看到了答案。
Check also that you don't have this turned on: Configuration Properties -> C/C++ -> Preprocessor -> Preprocess to a File. Because for outputing preprocessed code and compiling, essentially it's a compiler option so it will do either but not both.
就是生成预处理头代码和编译,编译器只能择一进行,除非你设置了custom build config。我就猜也许是因为编译器先生成了列表文件,然后就歇菜了,没有去生成.obj目标文件。所以在链接运行时提示在对应目录下找不到.obj可执行文件。
于是把生成列表选项取消勾选再运行,果然运行成功了。看来下次只能手动切换了??
标签:调试 cal 搜索 end main 环境 dia 类型 x64
原文地址:https://www.cnblogs.com/dreamyt/p/vsAssemblyConfig.html