1. 程式人生 > >VS2015配置組合語言開發環境

VS2015配置組合語言開發環境

        一般情況下,大都數人都不會想用匯編這種古老的語言,但有時候想操控硬體或者想優化程式,又不得不用到組合語言。組合語言的編寫,除錯是一件非常麻煩的事,要是有一個整合的開發環境,那寫彙編就可以說是得心應手。就目前來看,似乎沒有哪個好的、免費的彙編IDE可以用,如果有的話,那微軟的VS(daoban的也算免費)算是一個吧。下面就講一講如何在VS2015中配置組合語言開發環境(純組合語言開發環境配置,而不是C語言內嵌組合語言)。

一、首先,安裝VS,這個不用說,2015,2017或者以後的版本,這裡用作例子的就是2015版。

二、安裝組合語言語法高亮外掛。這一步不是必須的,但如果有語法高亮和提示的話,開發起來會很爽!下面用圖來說明。

開啟VS2015,在選單欄上選擇“工具》擴充套件和更新”

聯機搜尋“asm”,可以看到兩個彙編高亮外掛,這兩個外掛都可以用,本人覺得第一個更好用一些。

選擇高亮外掛,下載安裝,然後重新啟動VS方可使用。

三、專案配置彙編開發環境。這一步是能否編譯組合語言的關鍵!

首先,建立專案,這個跟開發C語言是一樣的。任選一個專案都可以,這裡選擇“空專案”。

建立好專案後,對專案屬性進行配置。右擊專案名稱,然後在彈出的選單中選擇“生成依賴項》生成自定義”。這一步相當於告訴IDE,我要開發的是組合語言,而不是其他的。

在“生成自定義”中勾選“masm”,完成開發環境的配置。

四、新增組合語言源程式(.asm)檔案

右鍵asm檔案,選擇“屬性”,此步是為了設定asm檔案的屬性,根據自己需要做相應的更改。也可以不做更改,使用預設設定。

一般情況下,把“Use Safe Exception Handelers”項設為“是”,否則在“Release”模式下,生成解決方案會報錯。這個後面會說到。

五、彙編程式編寫、編譯和除錯

先寫一段小程式碼測試一下是否配置正確。很短的程式碼,就是兩個暫存器相加。start是標籤,用來定義程式碼的位置,end表示程式結束,end後面的start表明了程式的入口點為start處,相當於C語言的main函式的入口點是main。一個工程中可以有一個或多個asm檔案,要生成解決方案的話,就要指定一個入口點,讓系統知道,程式應該從哪裡開始。

將滑鼠放在關鍵字處,可以看到高亮外掛給出的提示,比如指令的用法、指令的效能,這給彙編開發帶來的極大的方便。

生成解決方案可以對程式進行除錯。“生成》生成解決方案”,“除錯》逐語句”。在“逐語句”除錯模式下,可以檢視暫存器的值。選擇“除錯》視窗》暫存器”

到此為止,VS純組合語言開發環境配置完畢。其實配置不算很麻煩,微軟的VS還是挺好用的。

六、彙編開發可能會遇到的一些問題

本人剛開始用VS開發組合語言時遇到不少問題。如果“編譯”報錯,很可能是語法不正確,檢查程式是否有寫錯的地方,或者有錯誤的指令用法。其他配置問題,主要有以下幾個:

1.生成解決方案時報錯:“無法匯出子系統,必須定義它”。如果是選擇“編譯”的話,沒有語法錯誤,一般都能通過。如果是“生成解決方案”的話,設定不對,有可能報錯。

解決方法:指定一個子系統。因為建立工程的時候選擇的是“空專案”,沒有指定是控制檯,還是win32。所以生成解決方案之前必須指明是那種型別的專案,也就是選擇“子系統”。如果一開始選擇“控制檯”或者“win32”專案,就不會出現這種報錯。

2.生成解決方案時報錯:“模組對於SAFESEH是不安全的”“無法生成SAFESEH映像”。這個問題是asm檔案屬性設定的問題。一般情況下,預設的asm屬性設定在debug模式下是不會報錯的,但在release模式下就會。這時,在asm檔案屬性中的“Use Safe Exception handlers”設為“是”,就可以解決這個問題。

3.生成解決方案時提示沒有入口點問題。如果是生成解決方案(生成exe檔案),那是一定要指定入口點的,就像C語言一定要有main函式一樣。彙編程式也要設定入口點,見下圖:

start定義入口位置,end 後面跟著start,是指明start為入口點。在一個工程中必須要有入口點,但入口點只能有一個,也就說end xxx這種情況只能出現一次,不能在每個asm檔案中都來一個end xxx。缺少入口點的報錯有多種,其中一種如下圖:

出錯總結:如果“編譯”報錯,很可能是語法有問題。如果“編譯”成功,而“生成解決方案”時報錯,那就看看asm屬性設定是否正確,是否指定了子系統,是否設定了入口點。