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