目录 上一页 下一页 下一章

第7章 文件控制块 -179-

  请注意打开后的FCB中当前记录块设置为0,当前记录也是0,在这种情况下我们要是执行读操作那么必然读入这个文件的第一块中第一个记录。记录长度我们取默认值128,执行一次读操作后就会有128字节数据被读进内存:
-P
AX=1400BX=0000CX=005ADX=0000SP=0000BP=0000SI=0000DI=0000
DS=2589ES=2579SS=2589CS=258CIP=0017 NV UP EI PL ZR NA PE NC
258C:00170AC0OR AL,AL
  用P命令执行中断,如果被读取的CONFIG文件长度大于128字节,那么就应该看到AL寄存器返回了0,说明此时已有128字节数据正确地读入了内存中。那么这128字节读到内存的什么地方了呢?我们现在把ES:80H处的数据列出:
-DES:80
2579:00805B 4D 45 4E 55 5D 0D 0A-4D 45 4E 55 49 54 45 4D[MENU]..MENUITEM
2579:00903D 47 45 4E 45 52 41 4C-2C 57 49 4E 44 4F 57 53=GENERAL,WINDOWS
2579:00A039 35 20 43 4F 4E 46 49-47 55 52 41 54 49 4F 4E95 CONFIGURATION
2579:00B00D 0A 4D 45 4E 55 49 54-45 4D 3D 44 4F 53 2C 44..MENUITEM=DOS,D
2579:00C04F 53 20 50 52 4F 4D 50-54 20 43 4F 4E 46 49 47OS PROMPT CONFIG
2579:00D055 52 41 54 49 4F 4E 0D-0A 4D 45 4E 55 49 54 45URATION..MENUITE
2579:00E04D 3D 45 4D 4D 2C 44 4F-53 20 26 20 45 4D 53 20M=EMM,DOS & EMS
2579:00F04D 45 4D 4F 52 59 20 43-4F 4E 46 49 47 55 52 41MEMORY CONFIGUR
  大家应该看到自己的CONFIG文件的内容。笔者在前言中说过,学习汇编语言对读者的记忆力是有要求的,这并非是笔者没事找事,如果现在问大家一句:"ES寄存器指向的段内有什么重要的数据?"大家能否不加思索地说出来呢?
  如果大家能马上反应出ES寄存器指向PSP所在段,那么下面的讨论就很容易被大家所接受了。我们前面说过,PSP是DOS调入一个可执行程序时在内存中预存的一些重要的数据,PSP共有256个字节,其中后面的128个字节就是提供给文件处理功能使用的,我们把这128个字节的空间称为"缺省的DTA"。
  所谓DTA,英文全文为"Data Trastor Area",翻译过来就是"数据传输区"。当我们进行文件读写操作时这操作系统就要使用DTA和应用程序交换数据,操作系统对DTA的要求是至少能够容纳下一个记录的数据。由于DOS默认一个记录长度为128字节,所以在我们这个示例程序中我们使用了系统默认的DTA。如果程序改变了记录的长度,那么就必须设定新的DTA。相应的系统功能我们将在讨论完这个示例程序后介绍。
  执行了"顺序读"操作后我们来看看FCB有什么变化:

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章