中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 关于VTHZMK.COM 2.0D问个问题 上一主题 | 下一主题
fdsiuha
高级用户




积分 587
发帖 302
注册 2005-7-25
状态 离线
『楼 主』:  关于VTHZMK.COM 2.0D问个问题

我从来都没有试过启动时显示汉字

但是前几天反编译了一下VTHZMK.COM,有个小问题想问本是

下面是判断是否能够显示汉字的而进行的端口操作的例程,能否讲解一下呢?

0B29 BAC403                 mov dx, 03C4     //3C4 CGA, EGA, VGA sequencer index?
0B2C B002                    mov al, 02       //
0B2E EE                        out dx, al       //
0B2F BAC503                 mov dx, 03C5     //3C5 CGA, EGA, VGA sequencer?
0B32 EC                       in al, dx        //
0B33 3C03                    cmp al, 03       //这个子程序判断了一下,设置标志位后返回
0B35 C3                       ret              //

另外处理PSP命令行参数的过程缺陷好象非常大啊,没有写完吗..

[ Last edited by fdsiuha on 2006-1-1 at 13:48 ]



欢迎造访DOS的小屋!
http://risky.ik8.com
2006-1-1 13:47
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 2 楼』:  



  Quote:
Originally posted by fdsiuha at 2006-1-1 13:47:
判断是否能够显示汉字的而进行的端口操作的例 ...

  请参考“查寄存器值检测直接写屏汉字系统启动状态及汉字显示状态”(http://www.cn-dos.net/forum/viewthread.php?tid=18370&fpage=1)

  Quote:
Originally posted by fdsiuha at 2006-1-1 13:47:
命令行 ...

  命令行的处理是这样的:
  首先读完命令行,并对“-”和“/”引导的参数作命令行地址记录,然后分别处理参数设置(由-引导)和命令执行(由/引导),先处理完参数设置,再执行命令,省得乱了次序或判断命令行结尾时出错。前面几版中用的方法是学习龚成兵的汉化工具EDITER2的技巧,但觉得不太方便,通用性也不好,就重新写了命令行处理模块。你认为这样的方法有问题,还是具体的程序实现时有缺陷?请指正!如有必要,我可以把这部分源程序贴上来。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-1-1 14:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fdsiuha
高级用户




积分 587
发帖 302
注册 2005-7-25
状态 离线
『第 3 楼』:  

谢谢,刚才那个帖子看过了,还是不太明白...是端口操作做了什么不太明白,返回的参数也不太明白

命令行参数...好象还是调试阶段的名称,譬如-m9看起来就像BC编译器命令行参数,难以记住,另外下面有有一点点瑕疵

//读和判断PSP的分支循环
0B80 32E4                   xor ah, ah                 //清ah,al并无变化,还是命令行长度
0B82 8BD8                   mov bx, ax                 //
0B84 C6878100FF             mov byte ptr [bx+0081], FF //把命令行尾部写成FF标志
0B89 AC                     lodsb                      //开始读入第一个命令行字符到AL 执行后SI=82
0B8A A24F0B                 mov byte ptr [0B4F], al    //并将其写到DS:0B4F(之前该值为2C)
0B8D AC                     lodsb                      //把0081+i的值读出 执行后SI=83
--以下比较该字符是否FF,'/'或'-'
0B8E 3CFF                   cmp al, FF                 //如果是前面所写的结束符
0B90 743C                   je 0BCE                    //

这样如果参数的'-'或'/'紧接着程序的名字写的话,就会被忽略
后面还有一些问题,导致使用某些组合的参数直接就退出程序了

[ Last edited by fdsiuha on 2006-1-2 at 11:52 ]



欢迎造访DOS的小屋!
http://risky.ik8.com
2006-1-2 11:45
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 4 楼』:  

  谢谢你对我的程序这么仔细,你也应该是个认真的编程人,水平不错。
  你指出的命令行参数处理上,确实是有问题的(比如文件名中间的-也是有问题的,文件名中的.判断willsort版主也指出的问题,已纠正),我自己早已重写,只是尚未上传。
  另外,你说的“0B89 AC    lodsb     //开始读入第一个命令行字符到AL 执行后SI=82”是对的,但是在lodsb之前SI=81h,al中包含的是81h处的[si]值,所以不会跳过紧挨程序名的参数引导符。

[ Last edited by 本是 on 2006-1-2 at 14:19 ]



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-1-2 14:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fdsiuha
高级用户




积分 587
发帖 302
注册 2005-7-25
状态 离线
『第 5 楼』:  

0B89 AC                     lodsb                      //开始读入第一个命令行字符到AL 执行后SI=82

这里取到的字符是命令行可执行文件名后的第一个字符,只把这个字符放到了0B4F处

随后从0082处取得第二个字符,才开始判断这是否是'FF'、'/'、'-',于是前面的那个字符就忽略了...

你可以试一下
VTHZMK/I

VTHZMK /I
是不同

--
其实也不是什么问题



欢迎造访DOS的小屋!
http://risky.ik8.com
2006-1-2 15:18
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 6 楼』:  

  你说得很对!!!一字千金!!!我原先的程序确实没有考虑到xxx/I这样的情况,还不够严密。加了一个dec si。欢迎你继续说下去,我很要听!!!



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-1-2 18:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: