目录 上一页 下一页 下一章

第8章 文件句柄功能与磁盘 -225-

  如何将一个32位的二进制数据转换成十进制的形式显示出来?这个问题大家倒是可以深入思考一下,上面这个程序给出了一种算法,还有没有更好的方法呢?
  还有一个不常用的功能需要讨论一下,那就是文件的删除。DOS提供了41H号功能调用完成这个工作,这个功能可以参考表7-1中的有关说明,有关的程序例不再给出。需要提醒大家的是不要使用"*.*"这样的通配符,句柄功能不支持通配符;另外凡是具有"只读"、"隐含"等属性的文件也不能用此功能删除。
  在本节的最后我准备给出另一种处理命令行参数的方法,然后开始新一节的讨论。我们在讨论FCB功能时曾经给出过利用"缺省FCB"处理命令行参数的方法,那种方法缺乏灵活性,如果我们需要处理多个参数或树型目录使用缺省FCB就不行了。解决这个问题就要使用下面介绍的知识了。仿照前面的形式,我们先来看看在程序段前缀中还有什么值得注意的内容,我们还是要求助于DEBUG:
  C:\ASM\>debug tasm.exe aaa\bbb\ccc ddd[Enter]
  我们知道缺省的FCB在PSP的前128个字节中,后128个字节中有些什么内容我们还不清楚,现在就让我们列出后面的128个字节来看一看:
-d80[Enter]
0F6F:008010 20 61 61 61 5C 62 62-62 5C 63 63 63 20 64 64. aaa\bbb\ccc dd
0F6F:009064 0D 20 64 64 64 0D 00-00 00 00 00 00 00 00 00d. ddd..........
0F6F:00A000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
0F6F:00B000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
0F6F:00C000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
0F6F:00D000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
0F6F:00E000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
0F6F:00F000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
  这一下问题全清楚了,对于FCB功能来讲这后128个字节用作缺省的DTA空间,由于句柄功能不再使用DTA传输数据,所以DOS把命令行参数放在这个区域中供程序使用。与放在缺省FCB中的参数不同的是DOS会把整个参数字符串原样放在这个区域中,不对其进行任何的处理。
  从结构上大家可以看到参数字符串的起始地址不是0080H,位于0080H处的一个字节保存了一个8位的数据,这个数据反映了参数字符串的长度。实际的参数字符串从0082H开始,以回车符结束。偏移81H处有一个空格,在处理时通常将其忽略。下面给出了一个演示程序,这个是另一个版本的LIST程序,它可以显示任意目录下的文本文件,只需给出路径名:
LIST.ASM
code


main

msg
line
start:

segment
assume
org
proc
jmp
db
db



cs:code,ds:code
100h
far
start
'Press any key to continue...',0dh,0ah,24h
?


Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章