在VS2015中编写x86汇编
参考教程:
作者:上下求索
VS2015,C嵌套汇编 & C,汇编相互调用
http://ylqhust.github.io/blog/2016/04/17/vs-clanguage-asm-combine/
最近因为工作需要开始学习x86汇编,目的是使用c++调用汇编编写的代码,在网上找到的资料要么不对,要么是纯汇编编写的程序。这里分享一个很不错的在VS2015中调用x86汇编的地址,方便学习使用。
在实际实践中,发现该教程的有些地方并不能正常运行,需要根据实际情况稍微变动。
1、在新建控制台空项目后,添加.asm文件,并完善汇编,教程中提到是需要在命令行中先使用 ml /c /coff sum.asm 指令生成对应的汇编obj文件,然后把该文件添加到项目中,我出现的情况是,如果把obj文件加入到项目中,在编译阶段会报如下错误:
sum.obj : error LNK2005: _sumab already defined in sum.obj
出现这种情况的原因就在于项目中同时存在sum.asm和sum.obj,意思就是说编译器会自动编译汇编源代码,无需手动编译,所以上面那一步操作实际可以略去。
2、第二个问题是在汇编子程序中调用c代码。
教程给出的c代码如下:
extern int __stdcall sum3(int a, int b) { //此函数给汇编子程序调用 return a + b; }
同样在编译阶段会出现如下错误信息:
asmfile.obj : error LNK2019: unresolved external symbol _sum3@8 referenced in function _sum
需要对c代码做如下修改
extern "C" { int __stdcall sum3(int a, int b) { //此函数给汇编子程序调用 return a + b; } }
这样,便可以顺利通过编译,进而运行项目文件。