一般情况下,大都数人都不会想用汇编这种古老的语言,但有时候想操控硬件或者想优化程序,又不得不用到汇编语言。汇编语言的编写,调试是一件非常麻烦的事,要是有一个集成的开发环境,那写汇编就可以说是得心应手。就目前来看,似乎没有哪个好的、免费的汇编IDE可以用,如果有的话,那微软的VS(daoban的也算免费)算是一个吧。下面就讲一讲如何在VS2015中配置汇编语言开发环境(纯汇编语言开发环境配置,而不是C语言内嵌汇编语言)。
一、首先,安装VS,这个不用说,2015,2017或者以后的版本,这里用作例子的就是2015版。
二、安装汇编语言语法高亮插件。这一步不是必须的,但如果有语法高亮和提示的话,开发起来会很爽!下面用图来说明。
打开VS2015,在菜单栏上选择“工具》扩展和更新”
联机搜索“asm”,可以看到两个汇编高亮插件,这两个插件都可以用,本人觉得第一个更好用一些。
选择高亮插件,下载安装,然后重新启动VS方可使用。
三、项目配置汇编开发环境。这一步是能否编译汇编语言的关键!
首先,创建项目,这个跟开发C语言是一样的。任选一个项目都可以,这里选择“空项目”。
创建好项目后,对项目属性进行配置。右击项目名称,然后在弹出的菜单中选择“生成依赖项》生成自定义”。这一步相当于告诉IDE,我要开发的是汇编语言,而不是其他的。
在“生成自定义”中勾选“masm”,完成开发环境的配置。
四、添加汇编语言源程序(.asm)文件
右键asm文件,选择“属性”,此步是为了设置asm文件的属性,根据自己需要做相应的更改。也可以不做更改,使用默认设置。
一般情况下,把“Use Safe Exception Handelers”项设为“是”,否则在“Release”模式下,生成解决方案会报错。这个后面会说到。
五、汇编程序编写、编译和调试
先写一段小代码测试一下是否配置正确。很短的代码,就是两个寄存器相加。start是标签,用来定义代码的位置,end表示程序结束,end后面的start表明了程序的入口点为start处,相当于C语言的main函数的入口点是main。一个工程中可以有一个或多个asm文件,要生成解决方案的话,就要指定一个入口点,让系统知道,程序应该从哪里开始。
将鼠标放在关键字处,可以看到高亮插件给出的提示,比如指令的用法、指令的性能,这给汇编开发带来的极大的方便。
生成解决方案可以对程序进行调试。“生成》生成解决方案”,“调试》逐语句”。在“逐语句”调试模式下,可以查看寄存器的值。选择“调试》窗口》寄存器”
到此为止,VS纯汇编语言开发环境配置完毕。其实配置不算很麻烦,微软的VS还是挺好用的。
六、汇编开发可能会遇到的一些问题
本人刚开始用VS开发汇编语言时遇到不少问题。如果“编译”报错,很可能是语法不正确,检查程序是否有写错的地方,或者有错误的指令用法。其他配置问题,主要有以下几个:
1.生成解决方案时报错:“无法导出子系统,必须定义它”。如果是选择“编译”的话,没有语法错误,一般都能通过。如果是“生成解决方案”的话,设置不对,有可能报错。
解决方法:指定一个子系统。因为创建工程的时候选择的是“空项目”,没有指定是控制台,还是win32。所以生成解决方案之前必须指明是那种类型的项目,也就是选择“子系统”。如果一开始选择“控制台”或者“win32”项目,就不会出现这种报错。
2.生成解决方案时报错:“模块对于SAFESEH是不安全的”“无法生成SAFESEH映像”。这个问题是asm文件属性设置的问题。一般情况下,默认的asm属性设置在debug模式下是不会报错的,但在release模式下就会。这时,在asm文件属性中的“Use Safe Exception handlers”设为“是”,就可以解决这个问题。
3.生成解决方案时提示没有入口点问题。如果是生成解决方案(生成exe文件),那是一定要指定入口点的,就像C语言一定要有main函数一样。汇编程序也要设置入口点,见下图:
start定义入口位置,end 后面跟着start,是指明start为入口点。在一个工程中必须要有入口点,但入口点只能有一个,也就说end xxx这种情况只能出现一次,不能在每个asm文件中都来一个end xxx。缺少入口点的报错有多种,其中一种如下图:
出错总结:如果“编译”报错,很可能是语法有问题。如果“编译”成功,而“生成解决方案”时报错,那就看看asm属性设置是否正确,是否指定了子系统,是否设置了入口点。