1. 程式人生 > >彙編程式碼在vs上的使用方法(MSB3721錯誤)

彙編程式碼在vs上的使用方法(MSB3721錯誤)

{此處(還在探討)未完持續……}

還沒(已經)解決的錯誤(求指教):

嚴重性 程式碼 說明 專案 檔案行禁止顯示狀態
錯誤 MSB3721 命令“ml.exe /c /nologo /Zi /Fo"Debug\源.obj" /W3 /errorReport:prompt  /Ta"源.asm"”已退出,返回程式碼為 1。彙編C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\masm.targets50

(某位和我一樣迷惘的少年  https://www.zhihu.com/question/52125330/answer/129081156)

這個ml.exe,很煩啊,找到過幾個回答但都沒用,外文網上看的半懂不懂也沒搞好。

這個錯誤就是一旦不用2010那個教學帖的程式碼就出錯,很是詭異。

甚至我用正片前“vs生成彙編程式碼”的方法生成的程式碼一執行都出這個錯誤!

想輸出個helloworld呼叫data立刻就出這個錯誤

當前進展:

ml.exe的用法:

組合語言裡用ml.exe編譯和用masm.exe編譯有什麼區別

MASM.EXE 執行之後,還需要執行 LINK.EXE,才能生成可執行檔案。
ML.EXE,一個程式即可自動完成 MASM.EXE、LINK.EXE。
來自:https://zhidao.baidu.com/question/1494786055435745939.html

=============歷史分割線==2018.2.10=============

考研也涼了,工作也找了,玩了一個月,今天看到很多評論,那我今天就好好會會這個詭異的bug

(ps:我現在用的是vs2017,不過有可能2015也是一樣)

首先,放上我大三上學期時老師給的程式碼:

.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
HelloWorld db "Hello World!", 0
.code
start:
invoke StdOut, addr HelloWorld
invoke ExitProcess, 0
end start

出現了那個錯誤。

現在,連結masm32的庫(就是老師叫我們用的那貨,還得裝入、連線,齁麻煩)

這部分環境變數配置參考:http://blog.csdn.net/maguanzhan7939/article/details/78608345

在masm的安裝目錄中找到include資料夾和lib資料夾

在VS專案中配置
在這裡新增你的masm的include資料夾


記得結尾加分號!!!

配置lib
連結器-通用-附加庫目錄
在這裡新增你的masm的lib資料夾

由於已經配置好路徑了,現在把程式碼改一下(4-8行呼叫庫的):

.386
.model flat, stdcall
option casemap :none
include windows.inc
include kernel32.inc
include masm32.inc
includelib kernel32.lib
includelib masm32.lib
.data
HelloWorld db "Hello World!", 0
.code
start:
invoke StdOut, addr HelloWorld
invoke ExitProcess, 0
end start

執行成功,bug消除:

但是,有一點需要注意,當你再改程式碼之後,仍然是當前的輸出(我今天剛消了這bug挺高興結果改回去就沒bug了,搞得我一頭霧水,hello world改幾個字母之後還是hello world)。——當你改程式碼後,需要如下圖所示操作:

右鍵專案,重新生成。

小小歸納一下,當配置好變數以後,我試了試,當我把那三個.inc的路徑改好了沒有ml.exe的bug了,只會說找不到.lib的庫,.inc檔案是關鍵。