48兆内存为何变成负十几兆

Author: 王琰 Date: 1998年 第41期 34版

#1  江西读者李平华问:1.我的电脑配置为:华硕TX97-E主板、K6-166 CPU、168线16M SDRAM(现代的10ns芯片),火球2.1G硬盘、丽台S600DX(4M)显卡。后来买了一条32M的SDRAM(也是现代的芯片),装上后,在WIN95中一切正常,但在DOS环境下(包括DOS6.22和DOS7.0)运行某些DOS游戏,设置时显示扩展内存为负十几兆(如-16230),导致游戏无法运行,系统总是提示“内存不够”,但以前只有16M内存时运行得很正常,不知道是游戏本身有问题,还是16M内存条与32M内存条不能混用?
#1  2.我单位有台电脑(Pentium 133 CPU、32M内存、1.7G硬盘),原来装有4条8M普通的DRAM内存条,后来因故换上一条8M的EDO内存,现在成了三条DRAM内存条和一条EDO内存条混装,在WIN95下,有时一些应用程序会运行失败,系统提示说该程序执行非法操作,但是用一些软件测试又没有问题,在DOS环境下用QAPLUS测试内存也没有问题,不知道是主板有问题(以前没混用时虽然WIN95也有些错误,但好像没有这么多),还是EDO内存和非EDO内存不能混用?
  答:1.一般来说,16M SDRAM和32M SDRAM是可以混用的,只要内存条质量没有问题,不会因此引起任何硬件方面的故障。从你叙述的情况来看,笔者认为可能是因为这些游戏软件在编制时考虑不周到,只用了一个16位字来表示内存的容量,如果以K为单位,一个16位字最多只能表示64M的内存,但如果把这个字作为有符号数来考虑的话(也就是说该字的最高位为符号位),它最多只能表示32M的内存,超过32M就会被解释成负数,你的48M内存正好会被显示成大约负的16M。你可按以下方法之一来解决此问题:1在DOS的Config.sys和Autoexec.bat中建立多重启动配置,在运行游戏的启动配置时为SMARTDRV指定16M以上的缓冲区,这样游戏可用的扩展内存就降到了32M以下,此方法为上策;2如果游戏软件显示的是扩展内存的总容量,那么第一种方法可能无法奏效,此时可在运行游戏的启动配置中为Himem.sys添加一个开关“/INT15=16384”,意思为保留16M的内存空间,这些空间不能按XMS规范来分配,也不会计入到扩展内存的总容量中,此为中策;3为了玩游戏而拔下16M条的SDRAM,玩完了再插上,或者勤学苦练SoftICE,跟踪游戏软件,把它测试内存容量处的有符号比较跳转指令修改为无符号比较跳转指令,此为下策。
  2.由于Pentium CPU与内存之间采用64位总线传输数据,586主板要求成对地使用72线的SIMM内存条,一对EDO内存条和一对非EDO内存条混用是允许的,各主板都支持这样的组合,而原则上在同一内存模组中混用一条EDO内存和一条非EDO内存也是可以的,但多数主板的说明书都指出同一内存模组应使用相同容量和相同型号的内存条,这表明后一种混用情况可能不被某些主板支持,或者混用后容易出现问题。笔者曾在第21期《电脑报》上分析过WIN95执行非法操作错误产生的原因,其中一种可能是硬件方面的缺陷,而内存则是最有可能引起非法操作的硬件,其原因包括质量差、CMOS设置不当或混用不当。你可检查CMOS中的内存存取速度是否设得太高,如果设为60ns,可改成70ns试试,或者再购买一条相同型号的EDO内存,替换原来与EDO内存条配对的非EDO内存条,或者把EDO内存条换回原来的非EDO内存条。