彙編程式碼在vs上的使用方法(MSB3721錯誤)
阿新 • • 發佈:2019-01-27
{此處(還在探討)未完持續……}
還沒(已經)解決的錯誤(求指教):
嚴重性 程式碼 說明 專案 檔案行禁止顯示狀態
錯誤 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檔案是關鍵。