目录 上一页 下一页 下一章

-208- PC机汇编语言实战精解

  这里还有几点我要提醒大家,凡是"[ ]"中的项都是可以省略的,DOS会按"当前情况"处理。另外,DOS不要求我们定义象"文件控制块"那样的数据结构,因此,ASCIIZ串可以放在内存中任意地方。同时,在存取文件时DOS也不需要我们定义DTA,不过DOS要求我们给出指向数据缓冲区的指针。简而言之,有关FCB功能的那一套并未"传染"给文件句柄功能。关于这些问题我们将在稍后做更深入的讨论。
  有了这些初步的认识,我们下面所做的工作就是研究文件句柄功能的具体应用方法。表7-1给出了DOS提供的最常用的文件句柄功能调用,仿照前半章的内容,我们仍按照"打开关闭--读出写入--其它功能"的顺序来分别讨论。
表7-1 文件句柄功能调用
功能用途参数返回
3CH建立文件CX=文件属性
DS:DX指向ASCIIZ串
成功:CF标志清0,AX=文件句柄
失败:CF标志置1,AX=错误代码*
3DH打开文件AL=访问方式
DS:DX指向ASCIIZ串
成功:CF标志清0,AX=文件句柄
失败:CF标志置1,AX=错误代码
3EH关闭文件BX=文件句柄成功:CF标志清0,AX=文件句柄
失败:CF标志置1,AX=错误代码
3FH读文件BX=文件句柄
CX=要读入的字节数
DS:DX指向缓冲区
成功:CF标志清0,AX=实际读入的字节数
失败:CF标志置1,AX=错误代码
40H写文件BX=文件句柄
CX=要写的字节数
DS:DX指向缓冲区
成功:CF标志清0,AX=实际写出的字节数
失败:CF标志置1,AX=错误代码
41H删除文件BX=文件句柄成功:CF标志清0 失败:CF标志置1
42H移动文件读写指针AL=方式代码
BX=文件句柄
CX:DX=偏移值
成功:CF标志清0,DX:AX=新的文件指针
失败:CF标志置1,AX=错误代码
  * 注:错误代码在后面讨论。
  在这一节我们主要讨论文件的打开与关闭功能,借此以加深对文件句柄功能的理解。请大家把我们的老朋友--DEBUG搬入内存,并用"A"命令输入下面这段小程序:
C:\ASM\>DEBUG[Enter]
-a100[Enter]
123D:0100
123D:0102
123D:0111
123D:0119
123D:0124
123D:0127
123D:012A
123D:012C
123D:012E
123D:0130
123D:0133
123D:0135
123D:0137
123D:0139
JMP
DB
DB
DB
MOV
MOV
INT
JB
MOV
MOV
MOV
INT
JMP
MOV
0124
'C:\COMMAND.COM',0
'OK...',0D,0A,24
'ERROR...',0D,0A,24
AX,3D00
DX,0102
21
0139
BX,AX
DX,0111
AH,09
21
0140
DX,0119
;跳过数据区
;定义一个ASCIIZ串
;程序执行正确的信息
;程序出错信息
;按读方式打开文件
;DX指向ASCIIZ串
;打开文件
;出错,转0139
;文件句柄送入BX寄存器
;显示程序正确执行的信息


;转0140结束进程
;显示程序出错信息

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章