在VS2015中編寫x86彙編
阿新 • • 發佈:2018-11-07
參考教程:
作者:上下求索
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; } }
這樣,便可以順利通過編譯,進而執行專案檔案。