中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 转贴:解决DOS命令的版本不兼容问题
作者:
标题: 转贴:解决DOS命令的版本不兼容问题 上一主题 | 下一主题
mys
元老会员




积分 5170
发帖 1637
注册 2002-10-16
来自 广东佛山
状态 离线
『楼 主』:  转贴:解决DOS命令的版本不兼容问题

解决DOS的版本不兼容
发信站: 网易虚拟社区 (Mon Aug  9 22:12:11 1999), 站内信件

在报纸上曾得到一个解决DOS的版本不兼容的方法:
     C:\PAHT\DEBUG.COM PROGRAM
     由 R 指令可得寄存器 BX 与 CX 的数值,
     使用(S [BX] [CX] B4 30)语句可得到一个或多个[DS:IP]数值;
     对得到的[DS:IP]进行反汇编;可找到以下的类似句子:
             DS:IP  B430       MOV AH,30
             DS:IP  CD21       INT 21
             DS:IP  3Dxxxx     CMP AX,XXXX  <- XXXX为版本号,如1E03是3.
30版
DS:IP ..... JZ XXXX 可自行修改为其他版本.
^^ 其中03为主版本,1E为次版
本30
或是自己使用A | 的16进制代码.3Dxxxx则比
较AX
指令修改条件转| 内的数值是否为031E.
移语句. |

后来,发现这个方法太麻烦,我就改为这样修改:
DS:IP B430 MOV AH,30 <- 改为 MOV AH,XXXX
DS:IP CD21 INT 21 <- 改为 NOP
DS:IP 3Dxxxx CMP AX,XXXX
DS:IP ..... JZ XXXX
其中,原理相同.第1种是改条件语句,第2种是改获取版本为放入版本号.
再后来,用DEBUG实在是辛苦,我就用16进制编辑工具修改:
查找字串“B4 30 CD 21”,若后面跟着一串“0A 07”(WIN98的DOS版本是7.10)或
是“16 06”(DOS的版本6.22),就把字串“B4 30 CD 21”改为“B8 0A 07 90”
(WIN98的程序)或是“B8 16 06 90”(DOS622的程序);有时这样改后反而运行时出
现DOS版本错误的信息时,则应该把“B8 0A 07 90”或“B8 16 06 90”改为“B
8 07 0A 90”或“B8 06 16 90”,后就一定会成功的。
事实上,这种方法和第2种方法在本质上是一样的。



我的网志
http://hzmys.blog.163.com/
我的网盘
firststep.qjwm.com
fsmys.ys168.com
ssmys.ys168.com
www.brsbox.com/fsmys
www.brsbox.com/ssmys
www.brsbox.com/ccdos
2003-4-9 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (2664429)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: