MASM32是一個免費的軟件程序,讓您編輯Microsoft宏匯編程序(MASM)代碼從一個基本的文本界面。它強調MASM代碼各部分以不同的顏色,使其更容易掃描和檢測錯誤。它提供了一個簡單的布局程序員手動編輯代碼,沒有任何花哨的功能或選項的常規Microsoft宏匯編。注意MASM32編輯器實際上並沒有讓你運行或編譯的代碼。對於這一點,你仍然需要Microsoft宏匯編程序
1,下載並安裝MASM32。
2,MASM32文件夾中打開的editor.exe文件。
3,點擊“瀏覽”。
4,選擇的的MASM代碼文件,你想編輯,然后單擊“打開”。“這將顯示你的代碼,自動突出顯示根據MASM32計划(命令一個顏色,文本另一種顏色,等等)。
5,進行更改,然后單擊“保存”。
這幾天讀了CSDN上人氣相當旺的《
瘋狂的程序員》,有感於匯編語言入門之難,特寫此文,以飱眾多熱心的網友,以邀更多的有心人共同探索充滿神秘光環的匯編編程。
1.1 安裝MASM32
到
http://www.masm32.com/下載MASM32。指定一個盤符后,其將被安裝至該盤的一個名為“masm32”的路徑中。下文介紹了如何在MASM32自帶的編輯器及VC6 IDE中編寫Hello World的匯編程序。
1.2 Quick Editor環境
MASM32自帶一個Quick Editor的編輯器,位於masm32目錄下,名為qeditor.exe。
作為一個IDE,Quick Editor讓我們很方便地在其中進行編輯源碼,連接並運行程序。
注意:盡管Quick Editor支持拖放操作,但不推薦這樣做。因為這種作法不能使Quick Editor自動地將當前目錄設為所打開文件所在的目錄,其結果,就是在連接時,提示找不到.obj文件。正確的作法是,先運行Quick Editor,再通過菜單File->Open打開相應的源碼。
在Quick Editor修改代碼后,一定要記得先存盤,才編譯及連接。否則,所生成的執行文件還依舊是未保存之前的舊版本。
新建一個文件夾HelloWorld,打開Quick Editor,輸入下面的源碼,並將其存至HelloWorld文件夾中,名為“HelloWorld.asm”。
1 ; HelloWorld.asm 2 3 comment * ---------------------------------------------- 4 The First Assemble Application 5 ---------------------------------------------- * 6 7 .386 8 .model flat, stdcall 9 option casemap:none 10 11 include /masm32/include/windows.inc 12 13 include /masm32/include/user32.inc 14 include /masm32/include/kernel32.inc 15 16 includelib /masm32/lib/user32.lib 17 includelib /masm32/lib/kernel32.lib 18 19 .data 20 szCaption db 'System Information', 0 21 szText db 'Hello, World!', 0 22 23 .code 24 start: 25 invoke MessageBox,/ ; 調用函數名 26 NULL,/ ; 父窗口句柄 27 offset szText,/ ; 文字 28 offset szCaption,/ ; 標題 29 MB_OK ; 按鈕類型 30 31 invoke ExitProcess, NULL 32 end start
代碼中,“/masm32/include/”及“/masm32/lib/”分別限定了Quick Editor所能識別的包含文件及庫文件的路徑。這樣,即使我們沒有在操作系統的環境變量中設置相應的路徑,Quick Editor也能找到這些文件。
下面是匯編、連接及運行程序的方法。
Quick Editor的菜單Project->Assemble ASM file,可匯編源碼,並生成HelloWorld.obj文件。Project->Link OBJ File連接obj文件,並生成HelloWorld.exe文件。Project->Assemble & Link則是上面兩步的組合。Project->Console Assemble & Link是在控制台下進行匯編及連接。其結果是,在運行程序時,先打開一個控制台,再由控制台來負責裝載及運行程序。也就是說,控制台是程序運行的平台。如果關閉控制台,則程序也被自動地關閉了。
這里選擇Assemble & Link,生成可執行文件。然后點擊工具欄上的“Run Program”圖標,彈出“Run Program or Help File”窗口,選擇生成的HelloWorld.exe文件,點擊“打開”按鈕,將彈出一個窗口,顯示“Hello, World!”。這就是我們的第一個Win32匯編程序!
Visual C++下的一個類似於此的Win32應用,其.exe文件約150KB。而我們這個HelloWorld.exe有多大?2.50KB,是前者的1/60。
1.3 Visual C++環境
下面,我們不使用Quick Editor,而是使用Visual C++6的IDE來編寫這個匯編程序。
在VC6中新建一個Project,類型為Makefile,項目名稱為“VCHelloWolrd”。在接下來的Wizard窗口中,均點擊”Next”或”Finish”按鈕,接受默認設置。
為此項目新增一個VCHelloWorld.asm文件,內容如下:
1 ; VCHelloWorld.asm 2 3 comment * --------------------------------------------- 4 The First Assemble Application 5 --------------------------------------------- * 6 7 .386 8 .model flat, stdcall 9 option casemap:none 10 11 include windows.inc 12 include user32.inc 13 include kernel32.inc 14 15 includelib user32.lib 16 includelib kernel32.lib 17 18 .data 19 szCaption db 'System Information', 0 20 szText db 'Hello World in Visual C++!', 0 21 22 .code 23 start: 24 invoke MessageBox,/ ; 調用函數名 25 NULL,/ ; 父窗口句柄 26 offset szText,/ ; 文字 27 offset szCaption,/ ; 標題 28 MB_OK ; 按鈕類型 29 30 invoke ExitProcess, NULL 31 end start
共有2個地方與上例不同,均已用加粗字體標出。一是include及includelib指令語句沒有了路徑,只留下具體的文件名(下面將在VC中為其指定具體的路徑)。二是szText的內容改為”Hello, World in Visual C++!”。
再為此項目新增一個名為“VCHelloWorld.mak”的文件,內容如下:
1 OUTDIR=./Debug 2 3 all : VCHelloWorld.exe 4 5 VCHelloWorld.exe : VCHelloWorld.obj 6 link /nologo /DEBUG /incremental:no /subsystem:windows 7 /out:$(OUTDIR)/VCHelloWorld.exe $(OUTDIR)/VCHelloWorld.obj 8 9 VCHelloWorld.obj : VCHelloWorld.asm 10 ml /nologo /coff /c /Fo $(OUTDIR)/VCHelloWorld.obj VCHelloWorld.asm
VC的NMAKE調用此文件來生成VCHelloWorld.obj及VCHelloWorld.exe文件。首先定義了名為Debug的輸出路徑。其次,all是一個默認的target名,其依賴於名為VCHelloWorld.obj的target。link任務負責將Debug路徑下的VCHelloWord.obj連接成該路徑下的VCHelloWorld.exe。接下來,定義了VCHelloWorld.exe的target,其依賴於VCHelloWorld.asm文件。下面的ml任務,負責在Debug路徑中生成VCHelloWorld.obj文件。
下面在VC中設置所需的頭文件及庫文件所在的路徑。單擊菜單Tools->Options,在彈出的窗口中選擇Directories標簽,在Show directories for的下拉列表框中分別選擇Executable files, Include files及Library files,分別為它們增加F:/MASM32/bin,F:/MASM32/INCLUDE, F:/MASM32/LIB的路徑。這樣,即使代碼中沒有指定具體的路徑,VC也知道如何找到它們。
最后,告訴VC,當我們按下Build按鈕(F7)時,將.exe文件存放在何路徑下。單擊菜單Project->Settings, 在彈出的窗口中,選Win32 Debug,選Debug標簽,選General Category,在Executable for debug session的文本框中輸入具體的路徑,如“F:/CodeTest/ASM/VCHelloWorld/Debug/VCHelloWorld.exe”。
執行完上面的步驟后,按Build按鈕(F7),再按Execute Program(Ctrl+F5),Hello World in Visual C++!的消息窗口出來了。此時,VCHelloWorld.exe的大小為16.0KB,依舊遠遠小於150KB。