在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;
}
}

这样,便可以顺利通过编译,进而运行项目文件。


posted @ 2018-10-21 14:13  北小白  阅读(1631)  评论(0编辑  收藏  举报