1. 程式人生 > >在VS2015中編寫x86彙編

在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 [email protected]8 referenced in function _sum

需要對c程式碼做如下修改

 

extern "C" {
int __stdcall sum3(int a, int b) {
    //此函式給彙編子程式呼叫
    return a + b;
}
}

這樣,便可以順利通過編譯,進而執行專案檔案。