本文寫給學匯編語言程序設計剛起步的吧友。適用Windows操作系統。已入門的吧友請繞道。
(1)masm32開發包的下載
要用匯編語言編程,首先得有個開發工具,匯編語言開發工具有多種,但本文僅介紹masm,介紹如何編寫符合masm語法規范的源代碼程序以及如何將源代碼程序進行編譯和鏈接,生成可執行的應用程序文件。
masm開發包包括匯編器、連接器等工具,版本有多種,本文選擇使用masm32,其下載地址如下:http://www.masm32au.com/masm32/masm32v11r.zip
注釋:masm32v11中的v11是masm32的版本號,而教科書上通常所說的masm版本指的是匯編器的版本號,這兩者之間是有區別的。masm32v11中的匯編器文件名是 ml.exe,其版本號是v6.14.8444。
(2)masm32開發包的安裝指南
masm32v11r.zip文件下載以后,使用解縮工具將文件解壓,釋放出里面的唯一文件install.exe。通過Windows資源管理器或控制台窗口執行install.exe以后,既可安裝開發包。install.exe執行后,中間會停下來問你是否重新配置開發包的安裝目錄。開發包安裝的默認目錄是c:\masm32,你可以重新配置安裝目錄,比如重新配置安裝目錄是d:\masm32 (以后我們就假定安裝目錄就是它)。安裝目錄配置好后按確認按鈕,安裝程序執行安裝。以后安裝過程只需要時間,其他沒有對話。
(3)masm32包中有關常用文件簡介
masm32包即可以支持開發在DOS操作系統下運行的16位應用程序,也可以開發在Windows操作系統下運行的32位應用程序。在d:\masm32目錄下有bin、include等多個子目錄,里面存放着開發不同程序所用的工具文件和公用庫文件。由於本文是介紹DOS操作系統下16位匯編語言程序設計,所以一開始我們只介紹與此相關的幾個最常用的工具文件給您。
將當前目錄切換到d:\masm32\bin,我們會看到該目錄下有下面幾個文件:
ml.exe——匯編器。我們編寫的源代碼文件就是通過它來匯編生成中間代碼文件,即通常擴展名為.obj的文件。
link16.exe——連接器。由ml.exe匯編生成的.obj文件還不能直接上機運行,必須通過連接器link16.exe將其連接制作成擴展名為.exe(或者.com)的可執行文件才能上機。
(4)配置環境變量
首先說說為什么要配置環境變量。不嚴格地說,環境變量是操作系統干活時用來參考的資源。還是結合我們剛剛安裝的開發包來說吧。請打開控制台窗口(可通過Windows附件里的“命令提示符”那個菜單打開),並輸入下面的指令:
d:回車 (注:將當前盤切換到d:盤。回車是要求你按回車鍵執行指令,下同)
cd \masm32\bin 回車 (注:將當前目錄切換到d:\masm32\bin)
ml 回車 (注:執行ml.exe程序)
此時你會看到ml執行后在控制台窗口回顯的提示信息。這說明操作系統找到了 ml.exe並執行。那操作系統是怎么尋找ml.exe的呢,我告訴你,在默認情況下操作系統只在當前目錄下尋找ml.exe,由於我們已將當前目錄切換為d:\masm32\bin,而ml.exe就在此目錄下,所以你輸入ml(或者輸入ml.exe全名)並回車后,操作系統就在當前目錄下找ml.exe文件(注:當只輸入ml時,操作系統不僅僅是找擴展名為 .exe的文件,還包括.com、.bat等其他擴展名的可執行文件,有機會再介紹),找到后就調入內存並執行,如果找不到,操作系統就會去找一個叫做path的環境變量中去查詢,沿着path所列的目錄(叫路徑)來查找。如果在path所列的目錄中找到了目標文件,操作系統就會將該目標文件調入內存並執行;如果path所列的目錄都找了仍沒找到,操作系統就認為查找失敗,並在控制台窗口顯示沒找到目標文件的相關信息,結束本次命令的執行。
真是這樣嗎?讓我們來檢驗一下。請您在控制台窗口輸入以下命令並執行:
cd .. 回車 (注:將當前目錄切換到d:\masm32)
ml 回車 (注:執行ml.exe)
此時控制台窗口會顯示沒有找到ml.exe的相關信息。為什么會出現這種情況?因為當前目錄下沒有ml.exe文件及以ml命名的其他可執行文件(如名為ml.com的文件和名為ml.bat的可執行文件等)。
由上文介紹可知,我們寫一個匯編源代碼程序如果不放在ml.exe所在的目錄,用ml.exe匯編它還會遇到找不到ml.exe的困難,怎么解決這個問題呢?當然有辦法,那就是配置環境變量path,讓環境變量包含ml.exe文件所在的目錄就可以了。
好了,現在我介紹如何配置環境變量。有幾種方法:
一是通過Windows桌面上[我的電腦]來配置。因為吧里帖圖比較麻煩,我就不介紹了,想弄清楚原理的話可以上網查查。
二是通過在控制台窗口輸入以下命令來配置:
set path=d:\masm32\bin;%path% 回車(這個不用太過理會,進行下面的步驟)
這種方法有個缺點,就是每打開一次控制台窗口,就要重新配置一回,因為操作系統不保存用這種方法配置的結果。
好了,現在控制台當前目錄還應該是d:\masm32,你再輸入下面的指令試試:
ml.exe
有了,ml.exe回顯的信息出現在屏幕上,說明本次環境變量配置成功,不管當前目錄是不是ml.exe所在的目錄,操作系統都能根據path找到ml.exe了。
(5)編寫第一個匯編語言程序: hello.asm
在沒有編寫程序之前,我們先在d:盤上建立一個名叫myasm的目錄,(不會使用DOS指令可以通過Windows的資源管理器創建),這個目錄就作為我們存放匯編語言開發項目的根目錄,在該目錄下再創建一個名為999的目錄,這個目錄就是我們放第一個匯編語言源代碼文件hello.asm的目錄。
masm32不是一個功能完善的集成開發環境(即IDE),我用過的比較好點的集成開發環境是RadASM,但限於篇幅本文不介紹它。不管怎樣,匯編語言源代碼的編寫總是需要借助文本編輯器的。文本編輯器有多種,其他我們暫都不用,有機會再說,現在我們就因陋就簡,使用Windows的記事本。請打開記事本,輸入下面的內容:
stack segment stack
byte 64 dup(0)
stack ends
data segment
msg byte 'hello world!$'
data ends
code segment
assume cs:code,ss:stack,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset msg
mov ah,9
int 21h
mov ax,4c00h
int 21h
code ends
end start
編輯完成后,將其保存名為hello.asm的文件,放在d:\myasm\999目錄下。這就是我們編寫的第一個匯編語言源程序。
(6)將hello.asm制作成可執行文件
請回到控制台窗口,輸入以下指令:
cd d:\myasm\999 回車 (注:將當前目錄切換到d:\myasm\999)
dir 回車 (注:查看當前目錄下都有什么子目錄和文件)
你應該從控制台窗口看到hello.asm文件在列表中。好,一切正常。
我們現在要匯編hello.asm然后連接。在控制台窗口輸入以下指令:
ml.exe /c hello.asm 回車 (注:此步為匯編)
hello.asm中的內容如果無錯誤,您會在控制台窗口看到下面的信息:
D:\myasm\999>ml /c hello.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: hello.asm
D:\myasm\999>
這說明編譯成功。通過dir指令,你可以看到當前目錄下多了一個hello.obj文件,這就是剛匯編生成的中間文件。
匯編成功了,第二步我們連接生成可執行文件。在命令行窗口輸入:
link16 hell.obj,,,,, 回車 (注:5個逗號,用途以后有機會再說)
連接成功會在控制台窗口顯示以下信息:
D:\myasm\999>link16 hello.obj,,,,,
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
D:\myasm\999>
通過在控制台窗口輸入dir命令,可以看到當前目錄下又多了一個名為 hello.exe的文件,它就是我們通過匯編、連接最終生成的可執行文件。在命令行窗口輸入命令執行它:
hello.exe 回車 (注:執行hello.exe文件)
再看控制台窗口,會出現以下信息:
D:\myasm\999>hello.exe
hello world!
D:\myasm\999>
這說明我們第一個入門程序開發成功了。