论文部分内容阅读
汇编语言系统是硬件开发人员不可缺少的工具。由于工业应用的需求,在纯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. 完毕。
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. 完毕。