-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 |