參考教程:
作者:上下求索
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; } }
這樣,便可以順利通過編譯,進而運行項目文件。
