![]() | 第7章 文件控制块 | -179- | |||||||||||||||||||
请注意打开后的FCB中当前记录块设置为0,当前记录也是0,在这种情况下我们要是执行读操作那么必然读入这个文件的第一块中第一个记录。记录长度我们取默认值128,执行一次读操作后就会有128字节数据被读进内存: | |||||||||||||||||||||
-P | |||||||||||||||||||||
AX=1400 | BX=0000 | CX=005A | DX=0000 | SP=0000 | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=2589 | ES=2579 | SS=2589 | CS=258C | IP=0017 | NV UP EI PL ZR NA PE NC | ||||||||||||||||
258C:0017 | 0AC0 | OR AL,AL | |||||||||||||||||||
用P命令执行中断,如果被读取的CONFIG文件长度大于128字节,那么就应该看到AL寄存器返回了0,说明此时已有128字节数据正确地读入了内存中。那么这128字节读到内存的什么地方了呢?我们现在把ES:80H处的数据列出: | |||||||||||||||||||||
-DES:80 | |||||||||||||||||||||
2579:0080 | 5B 4D 45 4E 55 5D 0D 0A-4D 45 4E 55 49 54 45 4D | [MENU]..MENUITEM | |||||||||||||||||||
2579:0090 | 3D 47 45 4E 45 52 41 4C-2C 57 49 4E 44 4F 57 53 | =GENERAL,WINDOWS | |||||||||||||||||||
2579:00A0 | 39 35 20 43 4F 4E 46 49-47 55 52 41 54 49 4F 4E | 95 CONFIGURATION | |||||||||||||||||||
2579:00B0 | 0D 0A 4D 45 4E 55 49 54-45 4D 3D 44 4F 53 2C 44 | ..MENUITEM=DOS,D | |||||||||||||||||||
2579:00C0 | 4F 53 20 50 52 4F 4D 50-54 20 43 4F 4E 46 49 47 | OS PROMPT CONFIG | |||||||||||||||||||
2579:00D0 | 55 52 41 54 49 4F 4E 0D-0A 4D 45 4E 55 49 54 45 | URATION..MENUITE | |||||||||||||||||||
2579:00E0 | 4D 3D 45 4D 4D 2C 44 4F-53 20 26 20 45 4D 53 20 | M=EMM,DOS & EMS | |||||||||||||||||||
2579:00F0 | 4D 45 4D 4F 52 59 20 43-4F 4E 46 49 47 55 52 41 | MEMORY 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 |