VS配置匯編語言開發環境
MASM簡介
Microsoft Macro Assembler(MASA)宏匯編程序是一種x86匯編程序,它使用Intel的語法在MS-DOS和Microsoft Windows系統上運行。MASM由Microsoft維護,但是自從6.12版本之后,它就不再作為單獨的產品出售了。相反,它與各種Microsoft sdk和C編譯器一起被提供。MASM的最新版本包含在Microsoft Visual Studio中。
因此,我們可以輕松地在VS中進行配置開發環境。
第一步打開VS新建一個空項目
第二步在源文件出添加一個新建項
依然選擇C++文件,但在下方把文件后綴名改成.asm
第三步進行項目配置
在資源管理器中右鍵項目名,選擇生成依賴項,點擊生成自定義后選擇第四個MASM。這一步相當於告訴IDE,我要開發的是匯編語言,而不是其他的。
接着點開我們創建的文件(不是項目)的屬性頁,在項類型中選擇Microsoft Macro Assembler。
第四步程序調試
接下來輸入一段簡單的匯編代碼來測試下我們是否配置成功。
;assm.asm
ExitProcess PROTO
.code
main PROC
mov rax,5
add rcx,6
mov rax,rcx
mov rcx,0
call ExitProcess
main endp
END
\[注意:上面的都是x64語法,上方的調試器也要對應使用x64的,用x86啥的會報錯。畢竟不同的CPU寄存器名字都不一樣\]
然后運行,結果報錯了。
這是程序不知道程序入口在哪,與C語言不同。我們的C語言有main函數作為入口,編譯器能很輕松地找到程序入口。
而在匯編程序中我們要自己設置入口標簽。點開項目屬性頁\(鏈接器->高級\),在第一個入口點輸入入口標簽名,你想叫main想叫start都行,一個標簽罷了。我們的代碼中是main PROC
,所以在入口點輸入main,確定后退出再運行。由於只是測試代碼,為了便捷,沒有啥輸出,比較朴素。
當然入口點叫start也是運行成功的,無非是把之前代碼里的main全換成start。
安裝匯編語言語法高亮插件。
這一步不是必須的,但如果有語法高亮和提示的話,開發起來會很爽!
比如你輸入個eax,它會自動提示你這是x86系列下的累加器。這種功能對新手可謂極其友好!
在菜單欄上選擇工具->擴展和更新->聯機,在右側搜索欄中輸入Asmdude,按照提示安裝即可。
錯誤記錄
列表文件生成和編譯的沖突
一開始為了生成列表文件,以便查看相關的程序信息
於是在頂部菜單中依次選擇"項目"->“屬性",彈出項目屬性窗口。
左側展開"Microsoft Macro Assembler"項,在展開項中選擇"Listing File"。
右側"Generate Preprocessed Source Listing"項,選擇"是(/EP)"。
"List All Availabel Information"項,選擇"是(/Sa)"。。
"Assembled Code Listing File"項,輸入”$(ProjectName).lst"。
點擊"應用"按鈕,再點擊"確定"按鈕,關閉窗口。
結果程序就運行不了了。
便開始瘋狂地查VS文檔,搞了快一天。最后在StackOverflow上看到了答案。
Check also that you don’t have this turned on: Configuration Properties -> C/C++ -> Preprocessor -> Preprocess to a File. Because for outputing preprocessed code and compiling, essentially it’s a compiler option so it will do either but not both.
就是生成預處理頭代碼和編譯,編譯器只能擇一進行,除非你設置了custom build config。我就猜也許是因為編譯器先生成了列表文件,然后就歇菜了,沒有去生成.obj目標文件。所以在鏈接運行時提示在對應目錄下找不到.obj可執行文件。
於是把生成列表選項取消勾選再運行,果然運行成功了。看來下次只能手動切換了