摘要:為了方便教學,讓學生盡快掌握匯編語言程序設計的方法,開發了基于VC++的Windows下MASM集成匯編系統,該系統集成了微機匯編語言主要調試工具,實現了編程、編譯、聯接和動態調試等功能的一體化。實踐證明:MASM集成匯編系統界面友好、操作方便,有較好的應用價值。
關鍵詞:匯編語言;微機;教學;Visual C++;Windows
中圖分類號:G640文獻標識碼:A文章編號:1009-3044(2008)23-966-03
The Research and Development of MASM Integrated Assemble System in Windows
SU Jian-yuan, FANG Jian, WANG Ling-ling, LIANG Hong-yan, ZHAO Xin
(College of Electrical Engineering,Hehai University, Nanjing 210024, China)
Abstract: In order to satisfy the need of teaching and let students study the programs design method of assembly language, developed MASM integrated assemble system in windows based on VC++. This system included main debugging tools of microcomputer assembly language and its interface is friendly, its operation is simple. It has better application values.
Key words: Assembly language; microcomputer; teaching; visual C++; Windows
1 引言
匯編語言的優點是速度快,可以直接對硬件進行操作,這對諸如圖形處理等關鍵應用是非常重要的。作為最基本的編程語言之一,匯編語言雖然應用的范圍不算很廣,但重要性卻勿庸置疑,因為它能夠完成許多其它語言所無法完成的功能。但是,現有的宏匯編編譯工具主要還是工作在DOS環境中,雖然DVCC-8086H開發環境是Windows,但軟件不能獨立運行,必須連接仿真設備才行。該文運用Visual C++開發了一種Windows下MASM集成匯編系統。
2 系統主要功能及其實現
Windows下MASM集成匯編系統主要實現以下功能:
1)能在該系統中編寫程序并可以對程序進行編輯、保存、打印,自動提供微機匯編語言程序的分段框架結構;
2)對ASM文件進行編譯,可運用指令ShellExecute(NULL,\"open\",\" masm.exe的全路徑名\",m_strCmd,NULL,SW_HIDE)調用masm.exe應用程序完成編譯功能。為了方便用戶,編譯之后自動跳出編譯結果,還可以通過查詢List文件和Cross文件修改程序中的錯誤,為了邊看文件邊修改錯誤,將List文件和Cross文件的對話框設置成非模態對話框;
3)對OBJ文件進行聯接,調用link.exe文件,聯接后顯示提示信息;
4)對EXE文件或COM文件進行動態調試;
5)啟動畫面中顯示軟件名稱和版權等提示信息,使用動畫可以減少等待程序加載過程中的枯燥感;
6)其它設置。如字體設置,新建窗口、層疊、平鋪和排列圖標等窗口的設置,左縮進設置等。
下面重點討論啟動界面和編譯功能的實現方法。
2.1 啟動界面的實現
啟動界面如圖1所示。應用VC++制作系統啟動畫面基本步驟如下:
1)用Photoshop等工具制作啟動畫面圖象,保存為bmp格式。
2)用Appwizard建一個基于單文檔的Splash。
3)在資源中插入點陣圖資源。打開VC++的資源編輯器,用鼠標右鍵按一下Resources文件夾,選擇Import命令,插入所制作的點陣圖。如果點陣圖超過256色,VC++會彈出對話框,提示點陣圖已經插入但不能在點陣圖編輯器中顯示,將點陣圖ID改為IDB_SPLASH。
4)添加Splash Screen控件。選擇菜單“project”/“Add To Project”/“Conponents and Controls”打開對話框,在對話框中連續按兩下\"Visual C++ Conponents\"選項,選擇“Splash Screen”控件,然后按一下“Insert”。 確認或修改類名和點陣圖資源ID,按OK確認。 選擇、連接后,啟動畫面就顯示出來了。
5)如果需要改變啟動畫面的停留時間,就修改SetTimer()函數的第二個參數,默認是750毫秒。
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ SetTimer(1, 750, NULL); //修改第二個參數以調整畫面停留時間
return 0;}
2.2 編譯功能的實現
實現編譯功能的部分程序如下:
//編譯子函數,調用masm.exe
void CChildView::masm(CString lpfilename)
{
//構造全路徑命令行參數
……
//調用masm.exe進行編譯
ShellExecute(NULL,\"open\",strCmdLine,m_strCmd,NULL,SW_HIDE);
m_strRunFileName = filename;
//將文件名保存以便連接和運行使用
//等待0.1秒,等待匯編完成,產生*.CRF、 *.OBJ、 *.LST文件
Sleep(200);
BuildDlg();//彈出編譯結果匯報對話框
m_ListMenu = TRUE; //使能“查看LIST文件”菜單
m_CrossMenu = TRUE;//使能“查看CROSS文件”菜單
m_LinkMenu = TRUE; //使能“連接”菜單
//這時的菜單查看LIST文件、查看CROSS文件和連接都變黑。如圖2所示。
}
編譯完之后自動彈出對話框,顯示匯編結果,程序如下。
//彈出對話框子函數
void CChildView::BuildDlg()
{
CReportDlg m_ReportDlg;
CString m_strRunFileLst;
m_strRunFileLst = m_strRunFileName; //獲取被編譯文件的文件名
m_strRunFileLst += \".lst\";//加上擴展名LST以便尋找并打開LST文件
CFile file1(m_strRunFileLst,CFile::modeRead);//以讀方式打開LST文件
char* showBuf;
DWORD Buflen;
Buflen = file1.GetLength();
showBuf = new char[Buflen+1];
file1.Read(showBuf,Buflen); //讀出LST文件內容
file1.Close();//關閉LST文件
CString m_strResult = showBuf;
m_ReportDlg.m_strReport= \"\\r\ 匯編總結報告:\\r\\";
m_ReportDlg.m_strReport += m_strResult.Right(174); //截取文件最后幾行的編譯結果
m_ReportDlg.m_strReport +=\"\\r\\";
m_ReportDlg.m_strReport +=\"\\r\\";
m_ReportDlg.m_strReport +=\"\\r\\"; //加兩空白行,使背景面積擴大
m_ReportDlg.SetTitleName(\"Assembling Report\");
UpdateData();
m_ReportDlg.DoModal();//彈出編譯結果對話框
delete showBuf; //釋放緩存變量
}
3 結束語
該文用C++實現了MASM集成匯編系統,介紹了該系統的主要功能,重點給出了啟動界面、編譯功能的實現方法和部分程序。該系統的應用,消除了調試匯編語言程序時切換到DOS的麻煩,使學生學習匯編語言程序設計變得輕松愉快!
參考文獻:
[1] 蘇建元.主動學習——想學習?會學習?不斷學習[J].計算機教育,2007,(2):60-62.
[2] 蘇建元.大學計算機硬件技術課程啟發式教學要點[J].計算機教育(增),2005,(12):82-83.
[3] 蘇建元.計算機學習中邏輯思維和系統思維能力的培養[J].電腦知識與技術(學術交流),2007,(2):585-586.