目录 上一页 下一页 下一章

第7章 文件控制块 -175-

-d0 24当前驱动器文件名及扩展名
258A:000000 43 4F 4E 46 49 47 20-20 53 59 53 00 00 00 00.CONFIG  SYS....
258A:001000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00................
258A:002000 00 00 00 00.....
  用"P"命令跟踪INT 21指令,然后再观察打开之后的FCB,可以看到先前为0的项目域均由DOS填入了相应的数据:
-P (执行INT 21)
AX=0F00BX=0000CX=004FDX=0000SP=0000BP=0000SI=0000DI=0000
DS=258AES=257ASS=258ACS=258DIP=000C NV UP EI PL NZ NA PO NC
258D:000C0AC0OR AL,AL
-d0 24当前驱动器
258A:000003 43 4F 4E 46 49 47 20-20 53 59 53 00 00 80 00.CONFIG  SYS....
258A:00109B 02 00 00 38 21 4C 85-40 02 42 DE 02 97 01 0F....8!L.@.B.....
258A:002000 00 00 00 00.....
  FCB的改变是很明显的,首先驱动器号由00H变为03H,说明DOS查出当前驱动器是"C:"。当前记录块号与记录长度都填入了相应值。值得注意的是日期和时间域的填写,这个文件的建立日期是2138H,时间是854CH,这两个数据是如何表示真正的日期和时间的呢?
  MicroSoft在设计DOS时表现得很"小气",它仅给文件的日期域和时间域各分配了两个字节,所以年月日与时分秒都只能用这两个字节中的一些位来表示。日期域的16个位是这样分配的:
bit:FEDCBA9876543210
|年份||月(1-12)||日(1-31)|
2138:0010000100111000
|年份:1980+16=1996||月份:9||日:18|
  所以这个文件建立的日期是96年9月18日。年份占据了7个位,最大为127,也就是说我们可以在公元2107年前正常地建立文件,2107年之后建立的文件都将返回到1980年。好在这个限制还是很长的,我们有生之年不会遇到这个问题。但有个问题还是很有趣的,DOS在列目录时总是忽略"世纪",它总是给出96年而不给出1996年,所以如果我们在2000年还在使用DOS的话就会发现所有文件都是00年某月某日建立的。不知道DOS为什么被设计成这样,难道它已经预见到自己活不到21世纪了吗?
  时间域的分配也是如此:
bit:FEDCBA9876543210
|小时(0-23)||分(0-59)||秒/2(0-29)|
854C:1000010101001100
|小时:16||分:42||秒:24|
  这个文件建立的时间是16:42:24。

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章