在VMware16下,安装Dos6.22版本,Masm6.11版本,Vim7.3版本。在通过Vim编辑完成汇编程序后,通过Vim的:!进入Dos Shell后,ml first.asm 后会出现:Phar Lap err 83:DPMI lock of code/data for HW interrupt handlers failed的错误,再次进入会导致Dos死机。通过在Config.sys中加入Emm386内存管理后,问题解决。
Dos下的内存加载,常用的配置如下,如需学习详细的知识,可访问:http://manmrk.net/tutorials/DOS/msdos622/help/INDEX.HTM#y进行参考。
1、DEVICE=[drive:][path]HIMEM.SYS
参数:/TESTMEM:ON|OFF,是否进行内存测试。
参数:/VERBOSE,是否显示加载状态及相关细节。
2、EMM386 [ON|OFF|AUTO] [W=ON|W=OFF]
参数:RAM=mmmm-nnnn,本参数表示同时建立UMB和EMS存储器,不指定大小则默认占用剩余空间。
参数:NOEMS,提供UMB存储器,但不建立EMS存储器。
3、在Autoexec.bat中运行smartdrv.exe,建立磁盘读写缓存。
4、DOS=HIGH/LOW,表示把DOS核心部分装入UMB(选HIGH),还是装入基本内存(选LOW)。缺省值为LOW,一般应选HIGH。
DOS=UMB/NOUMB,表示DOS将与UMB建立联系(选UMB)或不准许使用UMB(选NOUMB)。一般应选UMB。可把两行命令合为一行,参数间用逗号间隔。
在系统启动时,DOS自动设置缓冲区数目Buffers的值为15,每个Buffers占523字节。随着DOS=HIGH的执行,Buffers也随DOS的核心程序移到HMA中,这当然是好事,但是如果用户自己设定的Buffers太大,如超过47个,则HMA装入DOS核心后的剩余空间无法容纳,就把全部Buffers移至基本内存中,这将得不偿失。
5、DEVICE=[drive:][path]RAMDRIVE.SYS [DiskSize SectorSize [NumEntries]]] [/E | /A] 用内存建立虚拟磁盘。
参数:/A 表示在EMS(expanded memory,扩充内存)中使用。
参数:/E 表示在XMS(extended memory,扩展内存)中使用。
EMS是最早突破1M内存的解决方案,但使用起来麻烦且效率不高,后来微软搞出XMS解决方案(HIMEM),但为了兼容使用EMS编写的软件,所以通过一些方法,如EMM386来模拟一个EMS来。