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