2012-04-16 48 views
4

只需閱讀一本C++書籍,只需使用asm關鍵字即可將彙編程序從字面上刪除到C++中。使用Visual C++環境和「Asm」關鍵字作爲Assembler IDE的替代品嗎?

這是否意味着,如果有人想使用Visual Studio編寫彙編程序,我可以簡單地創建一個C++主要方法,然後將彙編程序放入並執行它作爲C++程序?編譯器只需運行嵌入了彙編程序的C++就好像它只是一個彙編程序一樣?

我的問題源於缺乏一個體面的IDE彙編程序。

+0

http://msdn.microsoft.com/en-us/library/45yd4tzz%28v=VS.80%29.aspx – 2012-04-16 01:07:19

+0

好的,在我的問題中用「__asm」替換「asm」。 – user997112 2012-04-16 01:10:52

回答

4

當您使用C++編譯器時,它會將額外的代碼添加到您的程序中,該代碼不在int main()中。如果你曾經反編譯過一個簡單的Hello World程序,你會注意到它在int main()之前開始執行,調用一些函數,如_set_app_type_getmainargs,然後最終調用你的int main()。最有趣的事情可能是_getmainargs的調用,因爲它獲得程序的命令行參數。如果你要用匯編程序(如NASM,FASM甚至GAS)編譯你的程序集,它不會調用_getmainargs和其他程序,所以你作爲程序員必須實現你自己的方式來獲得命令行參數,這對於初學者。

只要您指定__asmvolatile關鍵字,編譯器不應該與你的彙編代碼修補,它會運行(即特定的代碼),就好像它是一個「 彙編語言程序」。

如果您正在尋找一個用於裝配的IDE,我可以告訴你我已經走過了同樣的道路。我使用FASM這是一個很棒的小IDE,但是Eclipse和甚至Visual Studio都有插件,儘管我不能說我有與他們的良好體驗。

編輯:我想補充一點,如果你正在學習彙編,你可能最好用匯編器學習它。當C++或更高版本的語言無法使用時,會使用匯編的常見用法,因此如果您依賴於C++編譯器和內聯彙編語法,那麼當您嘗試編寫原始彙編時可能會造成混淆。

+0

編譯器修改asm代碼嗎? – Mikhail 2012-04-16 02:23:48

+1

@Misha如果你使用'volatile'關鍵字,它不應該。關鍵字的意思是「離開這一個」。在一些編譯器上,你可能必須指定一個像'-force-volatile'這樣的編譯器標誌,或者你可能想要檢查你的編譯器。 – user99545 2012-04-16 02:25:14

+0

有人可以解釋FASM,NASM和MASM之間的區別嗎?一個英特爾,另一個AMD ......等等? – mezamorphic 2012-04-16 09:46:09