摘要:為了方便教學(xué),讓學(xué)生盡快掌握匯編語(yǔ)言程序設(shè)計(jì)的方法,開(kāi)發(fā)了基于VC++的Windows下MASM集成匯編系統(tǒng),該系統(tǒng)集成了微機(jī)匯編語(yǔ)言主要調(diào)試工具,實(shí)現(xiàn)了編程、編譯、聯(lián)接和動(dòng)態(tài)調(diào)試等功能的一體化。實(shí)踐證明:MASM集成匯編系統(tǒng)界面友好、操作方便,有較好的應(yīng)用價(jià)值。
關(guān)鍵詞:匯編語(yǔ)言;微機(jī);教學(xué);Visual C++;Windows
中圖分類號(hào):G640文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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 引言
匯編語(yǔ)言的優(yōu)點(diǎn)是速度快,可以直接對(duì)硬件進(jìn)行操作,這對(duì)諸如圖形處理等關(guān)鍵應(yīng)用是非常重要的。作為最基本的編程語(yǔ)言之一,匯編語(yǔ)言雖然應(yīng)用的范圍不算很廣,但重要性卻勿庸置疑,因?yàn)樗軌蛲瓿稍S多其它語(yǔ)言所無(wú)法完成的功能。但是,現(xiàn)有的宏匯編編譯工具主要還是工作在DOS環(huán)境中,雖然DVCC-8086H開(kāi)發(fā)環(huán)境是Windows,但軟件不能獨(dú)立運(yùn)行,必須連接仿真設(shè)備才行。該文運(yùn)用Visual C++開(kāi)發(fā)了一種Windows下MASM集成匯編系統(tǒng)。
2 系統(tǒng)主要功能及其實(shí)現(xiàn)
Windows下MASM集成匯編系統(tǒng)主要實(shí)現(xiàn)以下功能:
1)能在該系統(tǒng)中編寫程序并可以對(duì)程序進(jìn)行編輯、保存、打印,自動(dòng)提供微機(jī)匯編語(yǔ)言程序的分段框架結(jié)構(gòu);
2)對(duì)ASM文件進(jìn)行編譯,可運(yùn)用指令ShellExecute(NULL,\"open\",\" masm.exe的全路徑名\",m_strCmd,NULL,SW_HIDE)調(diào)用masm.exe應(yīng)用程序完成編譯功能。為了方便用戶,編譯之后自動(dòng)跳出編譯結(jié)果,還可以通過(guò)查詢List文件和Cross文件修改程序中的錯(cuò)誤,為了邊看文件邊修改錯(cuò)誤,將List文件和Cross文件的對(duì)話框設(shè)置成非模態(tài)對(duì)話框;
3)對(duì)OBJ文件進(jìn)行聯(lián)接,調(diào)用link.exe文件,聯(lián)接后顯示提示信息;
4)對(duì)EXE文件或COM文件進(jìn)行動(dòng)態(tài)調(diào)試;
5)啟動(dòng)畫面中顯示軟件名稱和版權(quán)等提示信息,使用動(dòng)畫可以減少等待程序加載過(guò)程中的枯燥感;
6)其它設(shè)置。如字體設(shè)置,新建窗口、層疊、平鋪和排列圖標(biāo)等窗口的設(shè)置,左縮進(jìn)設(shè)置等。
下面重點(diǎn)討論啟動(dòng)界面和編譯功能的實(shí)現(xiàn)方法。
2.1 啟動(dòng)界面的實(shí)現(xiàn)
啟動(dòng)界面如圖1所示。應(yīng)用VC++制作系統(tǒng)啟動(dòng)畫面基本步驟如下:
1)用Photoshop等工具制作啟動(dòng)畫面圖象,保存為bmp格式。
2)用Appwizard建一個(gè)基于單文檔的Splash。
3)在資源中插入點(diǎn)陣圖資源。打開(kāi)VC++的資源編輯器,用鼠標(biāo)右鍵按一下Resources文件夾,選擇Import命令,插入所制作的點(diǎn)陣圖。如果點(diǎn)陣圖超過(guò)256色,VC++會(huì)彈出對(duì)話框,提示點(diǎn)陣圖已經(jīng)插入但不能在點(diǎn)陣圖編輯器中顯示,將點(diǎn)陣圖ID改為IDB_SPLASH。
4)添加Splash Screen控件。選擇菜單“project”/“Add To Project”/“Conponents and Controls”打開(kāi)對(duì)話框,在對(duì)話框中連續(xù)按兩下\"Visual C++ Conponents\"選項(xiàng),選擇“Splash Screen”控件,然后按一下“Insert”。 確認(rèn)或修改類名和點(diǎn)陣圖資源ID,按OK確認(rèn)。 選擇、連接后,啟動(dòng)畫面就顯示出來(lái)了。
5)如果需要改變啟動(dòng)畫面的停留時(shí)間,就修改SetTimer()函數(shù)的第二個(gè)參數(shù),默認(rèn)是750毫秒。
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ SetTimer(1, 750, NULL); //修改第二個(gè)參數(shù)以調(diào)整畫面停留時(shí)間
return 0;}
2.2 編譯功能的實(shí)現(xiàn)
實(shí)現(xiàn)編譯功能的部分程序如下:
//編譯子函數(shù),調(diào)用masm.exe
void CChildView::masm(CString lpfilename)
{
//構(gòu)造全路徑命令行參數(shù)
……
//調(diào)用masm.exe進(jìn)行編譯
ShellExecute(NULL,\"open\",strCmdLine,m_strCmd,NULL,SW_HIDE);
m_strRunFileName = filename;
//將文件名保存以便連接和運(yùn)行使用
//等待0.1秒,等待匯編完成,產(chǎn)生*.CRF、 *.OBJ、 *.LST文件
Sleep(200);
BuildDlg();//彈出編譯結(jié)果匯報(bào)對(duì)話框
m_ListMenu = TRUE; //使能“查看LIST文件”菜單
m_CrossMenu = TRUE;//使能“查看CROSS文件”菜單
m_LinkMenu = TRUE; //使能“連接”菜單
//這時(shí)的菜單查看LIST文件、查看CROSS文件和連接都變黑。如圖2所示。
}
編譯完之后自動(dòng)彈出對(duì)話框,顯示匯編結(jié)果,程序如下。
//彈出對(duì)話框子函數(shù)
void CChildView::BuildDlg()
{
CReportDlg m_ReportDlg;
CString m_strRunFileLst;
m_strRunFileLst = m_strRunFileName; //獲取被編譯文件的文件名
m_strRunFileLst += \".lst\";//加上擴(kuò)展名LST以便尋找并打開(kāi)LST文件
CFile file1(m_strRunFileLst,CFile::modeRead);//以讀方式打開(kāi)LST文件
char* showBuf;
DWORD Buflen;
Buflen = file1.GetLength();
showBuf = new char[Buflen+1];
file1.Read(showBuf,Buflen); //讀出LST文件內(nèi)容
file1.Close();//關(guān)閉LST文件
CString m_strResult = showBuf;
m_ReportDlg.m_strReport= \"\\r\ 匯編總結(jié)報(bào)告:\\r\\";
m_ReportDlg.m_strReport += m_strResult.Right(174); //截取文件最后幾行的編譯結(jié)果
m_ReportDlg.m_strReport +=\"\\r\\";
m_ReportDlg.m_strReport +=\"\\r\\";
m_ReportDlg.m_strReport +=\"\\r\\"; //加兩空白行,使背景面積擴(kuò)大
m_ReportDlg.SetTitleName(\"Assembling Report\");
UpdateData();
m_ReportDlg.DoModal();//彈出編譯結(jié)果對(duì)話框
delete showBuf; //釋放緩存變量
}
3 結(jié)束語(yǔ)
該文用C++實(shí)現(xiàn)了MASM集成匯編系統(tǒng),介紹了該系統(tǒng)的主要功能,重點(diǎn)給出了啟動(dòng)界面、編譯功能的實(shí)現(xiàn)方法和部分程序。該系統(tǒng)的應(yīng)用,消除了調(diào)試匯編語(yǔ)言程序時(shí)切換到DOS的麻煩,使學(xué)生學(xué)習(xí)匯編語(yǔ)言程序設(shè)計(jì)變得輕松愉快!
參考文獻(xiàn):
[1] 蘇建元.主動(dòng)學(xué)習(xí)——想學(xué)習(xí)?會(huì)學(xué)習(xí)?不斷學(xué)習(xí)[J].計(jì)算機(jī)教育,2007,(2):60-62.
[2] 蘇建元.大學(xué)計(jì)算機(jī)硬件技術(shù)課程啟發(fā)式教學(xué)要點(diǎn)[J].計(jì)算機(jī)教育(增),2005,(12):82-83.
[3] 蘇建元.計(jì)算機(jī)學(xué)習(xí)中邏輯思維和系統(tǒng)思維能力的培養(yǎng)[J].電腦知識(shí)與技術(shù)(學(xué)術(shù)交流),2007,(2):585-586.