刚才约略看了看,发觉某些解释未尽完善,下面挑一些重要的补充一下(红色):
(2)、功能02H
功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满
入口参数:AH=02H
DL=待输出字符的ASCII码
出口参数:无
并非没有出口参数,AL会传回最后成功印出的字符,亦即AL原值不保。
(10)、功能0CH
功能描述:清空当前的标准输入缓冲区,再读入字符。其输入操作可被重定向
入口参数:AH=0CH
AL=01H、06H、07H、08H或0AH
出口参数:若入口参数AL为0AH,则DS:DX=存放输入字符的起始地址,否则,出口参数AL=输入字符的ASCII码
AL若非(01H、06H、07H、08H或0AH),比如0,则函数只清空输入缓冲区,不等待而直接返回。
(5)、功能43H
功能描述:读取或设置指定文件的属性
入口参数:AH=43H
BX=文件句柄
DS:DX=文件名字符串的地址
AL=00H/01H——读取/设置文件属性
CX=文件属性: 位0=1——只读位1=1——隐含
位2=1——系统位3=1——卷标号
位5=1——归档其它位保留不用,并置为0
出口参数:CF=0——关闭成功,CX=文件属性,否则,AX=错误号(01H、02H、03H或05H),其含义见错误代码表
这句错误,功能43H不需文件句柄。想想,既有ds:dx指定档名,又要求句柄,岂不矛盾?
另外,经常看见一些程式用3Dh或4Eh函数检查档案是否存在,但3Dh麻烦在于又要关闭档案(不关也可以的,只是不规范);
4Eh麻烦在于须改动DTA(DTA参考4Eh说明)。
43H,al=0读取文件属性,成功读取表示檔案存在,比3Dh或4Eh方便和快速。
(8)、功能4EH
功能描述:获取第一个与给定的文件名相匹配的文件
入口参数:AH=4EH
DS:DX=给定文件名的字符串
CX=搜索时使用的文件属性: 位0=1——只读 位1=1——隐含
位2=1——系统 位3=1——卷标号
位4=1——目录 位5=1——归档
其它位保留不用,并置为0
出口参数:CF=1——操作失败,AX=错误号(02H、03H或12H),其含义见错误代码表,否则,操作成功,
DTA(Disk Transfer
Area)按下列方式填入数据: 字节00~14H保留
字节15H匹配的文件属性
字节16~17H压缩的文件名
字节18~19H压缩的文件日期
字节1A~1DH文件大小
字节1E~2AH文件名字符串
DTA是什么?DTA叫(data transfer area),是dos为操作档案保留的一块区域,原位置是PSP:80H,这块地址有两个用途。
1.程式参数区。
2.DTA。
若程式有这两种操作,须自行保留参数,或更改DTA。又,上面提到的文件名字符串在1E~2AH,应该是80h+1E~2AH(其余类推)。当然,
若改变了DTA,位置就是新DTA的起点+1E~2AH。
5、文件操作功能(FCB)(File Operation Function)
(6)、功能17H
功能描述:在指定的驱动器的当前目录中,把所有相匹配的文件换名
入口参数:AH=17H
DS:DX=指定文件控制块的地址
出口参数:AL=00H——换名成功,否则,AL=FFH
FCB是三叠纪年代的档案操作法,早被档案句柄方式取代,但有一项功能是句柄法也没法取代的,就是LABEL更名。
LABEL即卷名(volume name),亦即C盘D盘等卷名,除非利用window的API去改,若在dos下,还得靠FCB的17h去改
(函数56h只能更正常档名,不能改卷名)。
功能34H
功能描述:获得InDos标志的远地址,它由DOS维护表示DOS时活跃的
入口参数:AH=34H
出口参数:ES:BX=InDos标志的远地址
若该单元值为1,表示DOS功能在执行,否则,则不是。
dos设计之初没考虑到多工,亦即没有重进入的机制,重进入意即,在dos运作过程中又去呼叫dos,那只会是灾难。
驻留程式被触动之际,若要使用dos函数,可以先去检查InDos标志,若1则不动作,直至InDos标志=0才继续接下的代码。
(还有许多细节要考虑,比如函数在1h-0Ch,再呼叫dos是安全的,理由比较复杂,从略)
INT 28H
功能描述:DOS空闲中断
入口参数:无
出口参数:无
dos运行01-0ch函数会呼叫这中断,驻留程式拦截了int28h,若int28h被触动,表示在dos的1-1ch函數中,
那便可以尽情使用dos其他函数了。
[此贴子已经被作者于2016-7-13 08:16编辑过]