|
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 |
|