匯編語言系統(tǒng)是硬件開發(fā)人員不可缺少的工具。由于工業(yè)應(yīng)用的需求,在純DOS環(huán)境(DOS6.22及以下DOS操作系統(tǒng))下開發(fā)調(diào)試仍然是硬件開發(fā)者的日常工作。目前,純DOS下的常用匯編語言系統(tǒng)是微軟提供的宏匯編Masm系列及BORLAND公司提供的Tasm系列,其中以Masm6.11及Tasm5.0最為普及。但是,從事匯編程序設(shè)計的人都知道,這兩個都沒有很好地集成開發(fā)環(huán)境IDE。Masm6帶有一個pwb集成環(huán)境,但是該集成環(huán)境不提供高亮顯示、數(shù)字運算符分色顯示,跟人們喜歡的相去甚遠。
Asmedit與Alab分別是O Love Tels及kurtg開發(fā)的DOS環(huán)境下的匯編IDE,可配置多種匯編編譯器和鏈接器工作,具備高亮顯示、數(shù)字文本分色顯示,與經(jīng)典的Borland C++3.1環(huán)境十分相似,一直被國內(nèi)外匯編程序員喜愛。Asmedit與Alab以前需要注冊,現(xiàn)在已經(jīng)是免費軟件,在網(wǎng)上很容易搜索到。
我近來因項目開發(fā)所需,分別下載到這兩個軟件,卻發(fā)現(xiàn)它們在Tasm5.0下能夠很好工作,在Masm6.11下只能編譯而無法鏈接。每次執(zhí)行l(wèi)ink.exe鏈接程序時,系統(tǒng)均出現(xiàn)內(nèi)存段地址出錯或DOS保護模式錯的信息。經(jīng)過近一個月時間的調(diào)試、測試,終于解決了這個問題。本文給出有關(guān)的技巧,供廣大匯編程序愛好者分享。
我采用的操作系統(tǒng)為DOS6.22。經(jīng)測試在 Tasm3.0下出現(xiàn)問題,加上Asmedit/Alab均為依托BORLAND公司產(chǎn)品開發(fā)出來的,因此,我先考慮的問題是由BORLAND公司的DOS保護模式接口DPMI資源管理的問題。我首先利用1996年出版的隨Tasm5.0發(fā)行的DPMI資源管理工具DPMI16BI.OVL、RTM.EXE、RTMRES.EXE覆蓋Asmedit/Alab自帶的1992年出版的對應(yīng)文件,則發(fā)現(xiàn)對于Tasm系列,問題已經(jīng)解決。在Tasm系列下,Asmedit/Alab均能順利工作。但是仍然無法在Aasm6.11下工作。
我參考其文檔,還是認為問題在DPMI方面,于是采用QEMM虛擬內(nèi)存管理專用工具來進行操作系統(tǒng)配置管理,結(jié)果還是不能解決問題。
經(jīng)過長時間嘗試失敗后,我采用Masm5.1進行了測試,結(jié)果發(fā)現(xiàn)問題不再出現(xiàn)。于是意識到,問題在Masm6.11的鏈接工具Link.exe上。那么為什么Masm5.1沒有問題而Masm6.11會有問題呢?經(jīng)過思考,我得到這樣的結(jié)論:Masm5.1采用的鏈接工具是純16位的,Masm6.11是16位與32位兼容的,二者在內(nèi)存使用上的機制完全不同??磥硇枰粋€能夠與Masm6.11兼容的比Masm5.1性能更好的鏈接器。于是我在微軟的網(wǎng)站下載98DDK所提供的LNK563。一經(jīng)測試,問題立刻解決。至此,我將此過程整理如下:
1.下載Asmedit或Alab的匯編IDE;
2.下載98DDK之LNK563;
3.安裝Asmedit或Alab,用Tasm5.0的DPMI16BI.OVL、RTM.EXE、RTMRES.EXE覆蓋Asmedit/Aalab自帶對應(yīng)文件;
4.安裝Masm6.11,解壓LNK563.exe覆蓋Masm6.11的Link.exe
5. 完畢。