張景元, 任 菡
(山東理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 山東 淄博 255049)
基于VB的匯編語言集成開發(fā)工具設(shè)計(jì)
張景元, 任 菡
(山東理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 山東 淄博 255049)
針對(duì)匯編程序、連接程序和錯(cuò)誤調(diào)試程序只能在DOS操作系統(tǒng)上運(yùn)行的缺點(diǎn),利用可視化軟件開發(fā)工具研發(fā)了運(yùn)行于Windows的匯編語言集成開發(fā)工具,實(shí)現(xiàn)了匯編語言源程序的匯編、連接和調(diào)試等功能。全部程序模塊、DLL文件及幫助文檔都集成打包為可安裝的SETUP文件包,便于安裝使用。運(yùn)行結(jié)果證明,軟件功能齊全,界面友好,操作方便。
匯編語言; 集成開發(fā)環(huán)境; 數(shù)據(jù)管道; 重定向; API函數(shù)
匯編語言是一種面向機(jī)器的低級(jí)語言,可深入到計(jì)算機(jī)底層對(duì)硬件進(jìn)行操作。雖然C語言亦可對(duì)計(jì)算機(jī)硬件進(jìn)行操作,但功能有限,無法替代匯編語言。用匯編語言編寫的程序占用內(nèi)存空間小、運(yùn)行速度快,高級(jí)語言所能實(shí)現(xiàn)的功能,匯編語言皆可以實(shí)現(xiàn),而匯編語言能實(shí)現(xiàn)的功能,高級(jí)語言則無法全部實(shí)現(xiàn)。因此,盡管高級(jí)語言的功能越來越強(qiáng)大,開發(fā)平臺(tái)越來越好,但在用高級(jí)語言開發(fā)應(yīng)用軟件時(shí),有時(shí)不得不借助于匯編語言編寫某些模塊,或直接將代碼插入其中,或以動(dòng)態(tài)連接庫(kù)的形式供其調(diào)用。不僅如此,從教學(xué)的角度看,通過匯編語言的學(xué)習(xí)和實(shí)踐,才能夠充分了解CPU及其各接口芯片的工作原理、數(shù)據(jù)傳送方式等。因此,匯編語言仍然是計(jì)算機(jī)專業(yè)的必修課程之一,也是某些專業(yè)微機(jī)原理課程所涉及的重要內(nèi)容。
然而自Windows推出以后,關(guān)于DOS命令的教材已很少,在教學(xué)中對(duì)DOS命令的介紹也是簡(jiǎn)而又簡(jiǎn),甚至忽略。但EDIT、MASM5.0、LINK、DEBUG等都是基于DOS平臺(tái)的,對(duì)源程序的編輯、匯編,目標(biāo)文件的連接、調(diào)試等皆分散進(jìn)行,操作遠(yuǎn)不如高級(jí)語言集成開發(fā)環(huán)境方便。為方便教學(xué),筆者開發(fā)了運(yùn)行于Windows平臺(tái)的匯編語言集成開發(fā)工具軟件IDE(integrated development environment)。
VB(Visual Basic)是基于Windows的通用開發(fā)工具,控件多、種類全、API庫(kù)函數(shù)豐富,廣泛用于開發(fā)大型應(yīng)用軟件或控制軟件的前臺(tái)程序。閆民亮基于VB設(shè)計(jì)了網(wǎng)絡(luò)運(yùn)行狀態(tài)監(jiān)控程序[1],劉銀、桂曉兵利用VB開發(fā)了溫度監(jiān)控系統(tǒng)的前臺(tái)程序[2-3],余文坤、王建軍等將VB用于全球衛(wèi)星導(dǎo)航系統(tǒng)數(shù)據(jù)及地形圖數(shù)據(jù)的處理軟件設(shè)計(jì)[4-6],文獻(xiàn)[7-8]介紹了VB與Fortran、Matlab混合編程的接口方法,丁蓉則就“VB程序設(shè)計(jì)”課程的創(chuàng)新性實(shí)驗(yàn)進(jìn)行了有益的探索[9]。本文將VB用于匯編語言集成開發(fā)環(huán)境IDE的設(shè)計(jì),其中文本編輯器和調(diào)試平臺(tái)等基于VB實(shí)現(xiàn),將運(yùn)行于DOS下的Masm、Link 和Debug作為IDE的模塊掛接在后臺(tái)運(yùn)行,利用Windows管道技術(shù)和DOS命令重定向技術(shù)傳送Masm、Link和Debug調(diào)用、運(yùn)行結(jié)果等相關(guān)信息。IDE的組成結(jié)構(gòu)如圖1所示。
圖1 IDE組成結(jié)構(gòu)
2.1 源程序編輯
首先設(shè)計(jì)實(shí)現(xiàn)一個(gè)文本編輯器,用來編輯匯編語言源程序文件,它也是呈現(xiàn)給用戶的主要界面,需具備文本編輯的所有功能。在編輯過程中能顯示光標(biāo)所在的行列位置,能進(jìn)行復(fù)制、剪切、粘貼操作,能打開已有的文件,關(guān)閉、保存正在編輯的文件,能新建文件、打印文件等。
編輯窗口利用功能較強(qiáng)的RichTextBo控件產(chǎn)生。調(diào)用API函數(shù)Process()和SendMessage()捕獲當(dāng)前光標(biāo)所在位置的行列值,利用Clipboard.SetText和Clipboard.GetText實(shí)現(xiàn)復(fù)制、粘貼功能?!安檎摇睂?duì)話框是為方便修改而設(shè),可查找正在編輯的源程序文件中的任何字符。打印源程序文件是利用dlgCommonDialog.ShowPrinter實(shí)現(xiàn)的;新建文件、打開文件、保存文件的功能則通過調(diào)用公共對(duì)話框來實(shí)現(xiàn),保存的文件默認(rèn)后綴為“.asm”。其他編輯器的選單(菜單)以及各工具按鈕的代碼不一一列出。編輯器運(yùn)行界面如圖2所示,與Windows風(fēng)格完全一致。
圖2 編輯器界面
2.2 匯編模塊
匯編過程是通過調(diào)用Masm5.0實(shí)現(xiàn)的,匯編時(shí)自動(dòng)運(yùn)行Masm.exe文件,將源程序文件匯編成目標(biāo)代碼文件,默認(rèn)后綴為“.obj”,同時(shí)將匯編信息顯示在信息框中。通過Shell調(diào)用系統(tǒng)內(nèi)部命令模塊command.com/c(加參數(shù)/c以結(jié)束調(diào)用返回)調(diào)用Masm,通過管道“|”對(duì)源程序文件進(jìn)行匯編,匯編結(jié)果通過重定向“>>”輸出。Shell函數(shù)返回一個(gè)進(jìn)程ID號(hào),再通過OpenProcess函數(shù)返回該進(jìn)程的句柄,若獲得該句柄,調(diào)用WaitForSingleObject函數(shù)等待結(jié)束信號(hào),最后調(diào)用CloseHandle關(guān)閉句柄。產(chǎn)生輸出文件需要將無用的中間信息刪除,InStr函數(shù)為返回源串中指定無用字符串的位置,用Left和Mid函數(shù)截去無用的部分。為了顯示美觀,StrConv函數(shù)將指定字符串轉(zhuǎn)換為每個(gè)詞頭字母大寫。運(yùn)行結(jié)果如圖3所示。
圖3 運(yùn)行結(jié)果
部分代碼如下:
pId = Shell( ″command.com /c type _ input.txt|masm>output.txt″) pHnd = OpenProcess(SYNCHRONIZE, 0, pId) If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) Call CloseHandle(pHnd) End If Open ″output.txt″ For Input As #1 While Not EOF(1) Line Input #1, S If S <> ″″ Then S = S & vbCrLf res = S Do While InStr(res, ″Source filename [.ASM]:″) i=InStr(res, ″Source filename [.ASM]:″) res=Left(res, i-1) & Mid(res, i + 103) Loop S=res S=StrConv(S, vbProperCase) msgwin.SelColor = &HC00000 msgwin.SelText = S End If Wend
2.3 鏈接過程
將匯編生成的“*.OBJ”類型的目標(biāo)文件保存為lk.txt文件,lk.txt作為DOS命令下Link程序的管道輸入端,再重定向,將結(jié)果輸出到lko.txt文件里,最后將其輸出到文本編輯器的信息窗口中。部分代碼如下:
pId=Shell(″command.com/c type lk.txt|link>lko.txt″) pHnd = OpenProcess(SYNCHRONIZE, 0, pId) If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) Call CloseHandle(pHnd) End If Open ″lko.txt″ For Input As #1 While Not EOF(1) Line Input #1, S If S <> ″″ Then S=StrConv(S, vbProperCase) S=S & vbCrLf msgwin.SelColor = &HC00000 msgwin.SelText = S End If Wend
點(diǎn)擊源程序匯編后的錯(cuò)誤信息框,會(huì)自動(dòng)高亮顯示對(duì)應(yīng)的錯(cuò)誤所在行,以便于查找錯(cuò)誤。匯編、鏈接過程沒有錯(cuò)誤時(shí),可以運(yùn)行程序并查看運(yùn)行結(jié)果。
編輯器的選單條中設(shè)有一個(gè)運(yùn)行選項(xiàng),單擊此項(xiàng)可以同時(shí)完成匯編、鏈接、運(yùn)行的全部過程,若存在錯(cuò)誤,在匯編時(shí)就會(huì)顯示在信息框中。
2.4 單步、斷點(diǎn)、反匯編
通過調(diào)用Microsoft公司的Debug程序?qū)崿F(xiàn)斷點(diǎn)設(shè)置、單步運(yùn)行調(diào)試、反匯編等功能,具體做法是將一連串命令編寫成類似批處理文件的S1.txt文件,然后重定向到文件S1o.txt,最后在信息窗口中顯示出來。斷點(diǎn)同樣利用Debug的參數(shù)進(jìn)行設(shè)置,生成單步執(zhí)行輸入文件,也是用一個(gè)類似批處理的文件來實(shí)現(xiàn),用命令“RIP”更改確定開始運(yùn)行的地址,用變量St輸入開始運(yùn)行地址,命令“T”單步執(zhí)行,“Q”退出Debug。部分代碼如下:
MST = ″單步運(yùn)行″ MD = 0 BK = InputBox(MS, MST, MD, 100, 100) If Len(BK) = 0 Then Exit Sub End If St = CLng(BK) Open ″S1.txt″ For Output As #1 Print #1, ″RIP″ Print #1, St Print #1, ″T″ Print #1, ″Q″ Print #1, ″e(cuò)xit″ Close #1 pId = Shell(″command.com /c type _ S1.txt|debug fm.exe>S1o.txt″) pHnd = OpenProcess(SYNCHRONIZE, 0, pId) If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) Call CloseHandle(pHnd) End If Open ″S1o.txt″ For Input As #1 While Not EOF(1) Line Input #1, S
2.5 幫助文檔
一個(gè)完整的應(yīng)用軟件必須有在線幫助功能。本開發(fā)工具的具體做法是先將本IDE的使用方法寫成Word文檔,再利用工具軟件轉(zhuǎn)換成help.chm文件,在選單的幫助按鈕代碼中調(diào)用即可。
用打包工具將全部軟件和涉及的DLL文件打包制作成Setup安裝文件,安裝非常簡(jiǎn)單。本設(shè)計(jì)方案既發(fā)揮了Windows平臺(tái)的優(yōu)勢(shì),又使典型的“老軟件”得到了充分利用,而管道技術(shù)和重定向技術(shù)是很好的鏈接橋梁。從幾年的使用情況看,該軟件運(yùn)行可靠,界面友好,增強(qiáng)了學(xué)生的學(xué)習(xí)興趣,提高了教學(xué)質(zhì)量。
References)
[1] 閆民亮.VB編程在數(shù)字化網(wǎng)絡(luò)維護(hù)中的應(yīng)用[J].硅谷,2013(18):117-118.
[2] 劉銀,蓋書超,余楠,等.基于VB6.0的在線溫度檢測(cè)系統(tǒng)[J].儀表技術(shù)與傳感器,2013(8):41-43.
[3] 桂曉兵,王燕昌,楊柳斌,等.基于VB與單片機(jī)干燥溫度測(cè)控系統(tǒng)的實(shí)現(xiàn)[J].貴州農(nóng)業(yè)科學(xué),2013,41(2):170-172.
[4] 余文坤,戴吾蛟,楊哲.基于TEQC的GNSS數(shù)據(jù)質(zhì)量分析及預(yù)處理軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].大地測(cè)量與地球動(dòng)力學(xué),2010,30(5):81-85.
[5] 王建軍,吳北平,馮健.TEQC和QCVIEW32在GPS觀測(cè)數(shù)據(jù)預(yù)處理中的應(yīng)用[J].工程地球物理學(xué)報(bào),2010(7):634-638.
[6] 孟現(xiàn)彪,史雅茹,馮禹,等.應(yīng)用VB實(shí)現(xiàn)地形圖數(shù)據(jù)格式轉(zhuǎn)換[J].測(cè)繪與空間地理信息,2012,35(10):196-198.
[7] 李險(xiǎn)峰.VB和Fortran混合編程在工程計(jì)算中的應(yīng)用[J].鍋爐技術(shù),2011,42(2):62-66.
[8] 馬培勇,羅紅潤(rùn),周思柱.基于COM組件的MATLAB和VB混編方法在機(jī)械可靠性工程中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(7):189-191.
[9] 丁蓉,朱琳.“VB程序設(shè)計(jì)”課程的創(chuàng)新性實(shí)驗(yàn)教學(xué)[J].實(shí)驗(yàn)技術(shù)與管理,2012,29(8):163-165.
Design of integrated development tool of assembly language based on VB
Zhang Jingyuan, Ren Han
(College of Compute Science and Technology , Shandong University of Technology, Zibo 255049, China)
Aiming at the weakness of movement of editing collected material procedures, linking procedures, and mistaking to adjust the procedures, which can only operate on the DOS operation system, the exploitation can see to turn a software development tool to develop the language integrated development tool of editing collected materials of Windows. This article describes how to realize the functions of the source procedure editing, conjunction, and adjustment. All procedure modules, DDL documents and the help text files can integrate to pack to wrap for the SETUP document which can be installed, and easy to gearing use. The operational results show that the software function is well-found, the interface is friendly, and the operation is convenient.
assembly language; integrated development environment; data piping; redirection; API function
2014- 06- 10
張景元(1955—),男,山東濟(jì)南,工學(xué)碩士,教授,研究生導(dǎo)師,主要研究方向?yàn)槿斯ぶ悄?、模式識(shí)別和智能控制等.
P273.4
A
1002-4956(2015)1- 0142- 03