DOS程序员手册(十)

By admin in 天文学 on 2018年11月19日

终于到(十)了~~~

503页

                ES:DI       指于非更新都非打开的FCB的指针

    注释:该功能初期用来起命行中析取文件,并因科学的格式来保存之文件

    以便打开FCB。为了实现这个目的,可首先以指针指向文件名字符串,并继

    将另外一个指南针指向打算用的FCB。没有必要运用另外类型之格式来保存

    FCB,单用外存块就能好使得地保存好它们。

       
在装有版本被,分隔符无非就是之类几种植:句号(.)、冒号(:)、分号(;),等

    号(=)、加号(+)、标记和空格。在DOS版本1受到,还有以下几栽标志为可用

    作分隔符:双引号(”)、斜线(/)、左括声泪俱下([)和右括号(])。

        该功能返回一个用以所愿意之文书之FCB,这个FCB不仅尺寸适当而且

    是休打开的,同时,该意义还回一个对该文件的文本称自此第一个字符的

    指针(如果当几独公文称中的某某文件名内分析命令执行,那么该功能的图

   
是殊显眼的)。在尽该意义时,系统会自行地把星辰号字符,转换成一个或者多独

    问号字符,以寝文件称或扩大名。

        由于该功能是同样栽FCB功能,它不可能跟途径名兼容,因此,在文书名中

    不能够出现有目录。该意义可但分析当前目录中的文件,并且可经表明16.4

    中给来底解析表明来控制文件称的讲。

                            表16.4解析控制标志

            位

                                    含    义

    76543210

    . . . . . . . 0         停止分析,表明已找到文件分隔符

    . . . . . . . 1         忽略前导分隔符

    . . . . . . 0.         如果字符串中莫含有驱动器字母,则拿FCB中之驱动

                            器ID置为0

    . . . . . . 1.         如果字符串中莫含驱动器字母,则吃FCB中的叫

                            器ID保持不转换

    . . . . . 0. .          如果字符串中不含文件称,就将FCB中之文书名设

                            置为8个空格(20H)

    . . . . . 1. .          如果字符串中莫包含文件称,就于FCB中之文书名保

                            持不变

    . . . . 0. . .          如果字符串中莫含有扩展名,就拿FCB中的壮大名字

                            设置为3独空格字符

    . . . . 1. . .          如果字符串中无分包扩展名,就于FCB中的扩大名保

                            持不变

      一旦采取FCB功能,就可用该意义来是地设置FCB。该功能的图是

然地格式化FCB、并且也其作打开的备。要惦记利用FCB的开辟或创办功

能够,必须用ES中之指针动及DS:DX上。

      如果所分析的靶子中不分包非法的文书称,该意义就是会见回来指针ES:DI,

以便ES:DI+1指于空白字符。

 

504页

时钟

Int 21h           功能2Ah                               版本1

                  获取系统日期

从今系统被获取年、月、日和星期几

调用寄存器: AH              2Ah

回来寄存器: CX             年份(1980-2099)

                DH          月份(1-12)

                DL          日期(1-31)

                AL          星期几(0=星期天,1=星期一,等等)

                            DOS版本1.1还是重新胜似之本子中才起

                            这同功效

    注释:该功能返回DOS计算出底当下系统日期。这仅是针对性DOS内部时钟的

   
检查,而非是访问已设置之实时时钟/日历。按照惯例,如果系统设置有时钟/

    日历,那么当起步该网时,或者人工地在系统受到安装分隔时,就只能从AU-

    TOEXEC.BAT文件被检查时钟或日历。

      有时候,计算日期的系或者会见按部就班难以预料的点子去准确的工夫。此

    时系统日期或时刻尽管出或不获取正确的创新,或者经过来或干扰或转移

    内部系统时。该意义就是会为此归不科学的日子(并且,不聘时钟或日期

    芯片,是未可能检查到这个日期的)。

        影响该意义准确性的一个大面积错误表现在叫系统连接跨越24时地应用

   
行或非动(例如,超过同样周)。由于只有当DOS检测及都安装的零点标志时,

    日期才能够望前进,并且只有在调用有限的几个效益之一时才能够实现者历程,

   
因此,在非动系统时,日期无容许向前进。在生同样次等采用该体系不时,虽然可检

   
测到零点(midnight)标志,但是系统可不曾记录这段时光就经过了几乎次零点,

    因而就拿日子为后加同上。注意BIOS功能1Ah(获取时钟计数)的天职有 

    就是再安装零点标志。当系统经过一段时间的停用后,最简便易行的日期比正

    办法是在再度以该网时,首先检查并转移系统记录日期。

        为了便于使用,该功能及效果2Bh(设置系统日期) 使用同样的寄存器格

    式。

时钟

Int 21h           功能2Bh                                版本1

                  设置系统日期

以无转系统时之前提下,把系统日期设置也有指定的价值

调用寄存器: AH            2Bh

505页

                CX            年份(1980-2099)

                DH            月份(1-12)

                DL            日期(1-31)

    返回寄存器: AL            00h,成功地设置了日期

                              FFh,日期无效,未安装

注:该意义使用和收获系统日期功能雷同的格式。如果已经装了钟/日

    历,那么通过采用该功能就是能访问该时钟/日历,以获取当前日期并更新系

统日期。在无装时钟/日历的前提下,则可揭晓用户输入日期并当操作系

    统中针对那个进行校正,这样,调用获取系统日期功能就是会回去正确的日子。

      在文件操作过程中,可应用通过该意义设置的日期来遮掩文件。

      如果计算机体系包含CMOS时钟,该意义就能让其设置它好的日子。

时钟

Int 21h         功能2Ch                             版本1

                获取系统时

得到按小时、分、秒和百分之一秒计算的网时

调用寄存器: AH          2Ch

回去寄存器: CH         小时(0-23)

            CL          分(0-59)

            DH          秒(0-59)

            DL          百分之一秒(0-99)

注:同获系统日期同一,获取系统时功能是平等栽特别有因此,但却不需要自己

等提交大多注意力的意义。常常使就此到拖欠意义为报发生时间或者在屏幕及显示

发生时间。但是,在利用该意义时,应留神如下两接触:

        该功能不从时钟/日历芯片中获得时间。它独自取得DOS内部时间,这

        个日子是唯一一种植如DOS的安装同一准的时刻。

        在多体系上,系统的实时时钟精确度都未高,不可知辨别出百分之一

        秒的年华。在这种状况下,该意义返回一栽不连续的年月价值来代表百

        分之一秒时。

      使用用于非实际系统时的辰功能的应用程序没有必要去担心时间使

购景。在多少程序中,也可用先将DOS时间设置也0然后又检查所经过的

时间的应用程序如计时器等。但是,在描绘副这类程序时,应预防其他程序于时

钟内获得当天之日,如果先将DOS的时设置为0,再用应用程序来记录

由此的时空,那么当其他程序返回错误的体系时时,正在使用这种程序的之所以

户就见面遭受打扰。

      该功能利用的寄存器格式和用功能2Dh(设置系统时)的寄存器格式是

 

506页

相同的。

时钟

Int 21h         功能2Dh                               版本1

                设置系统时

每当不转移系统时之前提下,把系统时设置成指定的小时、分、秒和百分之

一秒

调用寄存器: AH                2Dh

                CH            小时(0-23)

                CL            分(0-59)

                DH            秒(0-59)

                DL            百分之一秒(0-99)

回来寄存器: AL                00h,时间设置成

                              FFh,日期无效,未设置

诠释:在下列情况下,设置系统时是有益处的:

      ·程序配备有时钟/日历,并且能够起芯片时钟准确地安装有日期以及岁月

      ·程序要求用户安装有具体时刻

      ·用时钟记录通过的时间;先拿钟调整呢零星,然后用它来展示或记录

        经过的工夫而休是系时

    这种寄存器格式(与用于功能2Ch——获取系统时的寄存器格式相同)

兴用户得到时间,寻问有关时间的题材,并且随着更新都改变之日。在有

专员使用的景象下,最好用日标准到上下波动不超越1秒的限定外。应尽可

会地本百分之一秒来计量经过的工夫,典型的用户还要下这种精确度。设

进更胜似的时光精确度,例如用于天文学方面的应用程序)要求用到特别的一块

化技术。

    从时钟/日历芯片中或者由日服务器如果WWV无线电链络中计算产生时间

的次第能够把日准确到百分之一秒。在务求一律的功底及,一些电脑不克回

回装有这种精确度的工夫,因为实时时钟的精确度不够。

    如果计算机拥有CMOS时间,该意义就不过抓住CMOS时钟设置它好之

时间。

时钟

Int 21h         功能2Eh                             版本1

                设置检查标志

激活DOS检验标志;在描写给磁盘时打开这种标志会引导另外的CRC检查(周

期性冗余检查)并追加磁盘传送时间

507页

调用寄存器: AH              2Eh

                AL           00h,关掉检验标志

                            01h,打开检查标志

                DH           00h(早于3.0的DOS版本)

    返回寄存器:无

    注释:怎样才能不经过检验磁盘写如证实她是没错的也罢?虽然能够对具备写

    给磁盘的数量强制履行磁盘检验,但是,同平常之操作相比,这种操作过程要

    花去两倍增以上的时刻。在稍非IBM的BIOS分支系统及,甚至无支持这种控制

    作。

        那么究竟为什么未这样做吧?很肯定,是由于时间上的来头。在并未必要

绝对保证每个磁盘写都是的时光,就应允密闭检验标志。仅仅当当生要

    的功力时,才发必不可少装这同标志,但下后为应拿该关闭。

        即使打开查看标志,也无克绝对保证所勾画的数据都是不错的,因为检察过

    程不是管所形容的数码以及支持写的数码开展逐字节地比较而实现的。在及时无异于了

    程中,系统等交成功一个周期才读来所勾画副的数,并通过磁盘控制器计算产生

    CRC值,然后重新管计算产生的CRC同第一潮将多少勾勒于磁盘时所计算出底值

    进行比。

        这无异进程未可知保证数据在内存和磁盘控制器之间的传递时未会见起其它

    错误;该过程只能证明控制器写为磁盘的价和用于计算起第一个CRC的值相

    等,然后又用同样计算过程更同一不折不扣。但是,由于大部分磁盘出错都见面促成介

    质失效,这种串阻止了系统由写入的正确数据中回读CRC,因此,这种考查

    毫无稗益。但是,对那个重要的劳作使数据的存档传送并继于硬盘中摩除该数

    据,就务须用唯一会担保绝对可靠之数据传送途径,即:把复制的数量和新

    始数据开展逐字节的于。

        可用功能54h来规定检查标志的即安装情况。

磁盘

Int 21h           功能2Fh                               版本2

                  获取DTA地址

    获取用于文书决定块(FCB)文件操作的磁盘传送(DTA)指针的目前价。

    调用寄存器: AH        2Fh

    返回寄存器: ES:BX  指向DTA的指针

    注释:缺省DTA是于先后段前缀(PSP)中在偏移值80h处的一个持有

    128单字节的缓冲区。在实质上用中,这种DTA的深浅对大多数先后来说都

    够用。但是,若使处理大型的记录或程序提出特殊之磁盘传送要求,那便许还

    设置一个DTA。

      功能1Ah的意图是安DTA;功能2Fh则能告您DTA位于什么地

 

508页

    方。但是,功能2Fh可非克告诉您DTA有差不多要命(这种信息是得有)。在实

    际操作中,如果无能够确定DTA的轻重是否足够用,那么唯一的抉择就是投机将

    一个能够处理特定操作的非常外存块设置也DTA。

系统

Int 21h             功能30h                                     版本2

                    获取DOS版本号

    返回DOS版本号作为参考,以便应用程序确定软件系统的容量;早于2.0缘

    前之DOS版本都回来版本号0。

    调用寄存器: AH            30h

                AL            版本标志

                00h           OEM号

                01h            DOS版本标志

    返回寄存器: AL           主版本号(2.3)

                AH            次版本号(2.1=10)

                BH             OEM号或DOS版本标志

                BL: CX       24位的层层号

    注释:对于直跟DOS打交道的程序员来说,知道DOS版本号是十分起得

    要之,它同意程序员为早已安装的网版本定制程序。把该功能返回的版本号加

    上DOS版本2.0便可能够检验系统是否支持我们所急需的DOS调用。(注

    意:若使用Microsoft C和Borland C++,这些价值就是会当全局变量)。

        如果程序运行的DOS版本早于2.0,该意义返回的主、次版本号都为0。

    这样的值会立时报您如下的基本点信息,即:无路径名、无目录并且无硬盘支

    持。如果在呢DOS版本2.0编写程序,但随即倒发现你所有单是DOS的1.x

    版本,那么这必须使用以下方法:

        1.经过Int 21h,功能09h返回一个错误信息。

        2.透过Int 21h,功能00h退出该次。

        如果打算支持早于2.0底DOS版本,上述信息将限制而使用一些DOS

    功能。

        在编写程序时,要小心的不一味是DOS 1.X提供的限量。因为程序员们已经

习以为常给采取各种功能来扩大他们之力量,就仿佛这些效应还能够因此得及。DOS

    版本3.3搭了部分力量,并同意多打开文件之数据,以及清除磁盘的文件

    缓冲区。在数据库程序中,使用这些效应而使数据库更易于写。但是,没有

    DOS版本3.3的用户如果无能够找到另外路线来化解DOS早期版本被有的

    各种题材,他们便只能步别人的后尘(并且有或未是DOS将来版本的买

    主)。

        如果回去了DOS版本标志,那么个3置位表明MS-DOS是在ROM中运

509页

履;否则,表明其是当RAM中运行的,其余的各项都不定义。如果回去了OEM

号,是与OEM相关的系列号都起于BL:CX中,如果没用OEM,BL:

CX的值为0。

      DOS版本号通过MS-DOS SETVER命令而设置的,与效果3306h返

的版本号相比,这个价值可能出出入。

系统

Int 21h             功能31h                                   版本2

                    终止并进驻留

终止程序并拿控制权返回给父亲进程

调用寄存器: AH              31h

                AL        返回代码

                DX          要封存的内存大小(按节计算)

回寄存器:无

诠释:终止并进驻留实用程序是这样的广阔,以致我们蛮为难找有有谁系统不

采用一个要多单如此的实用程序。除了可用作诸如弹出式计算器、日历与便笺

(notepad)之类的实用程序之外,还可用TSR来吗顺序序列提供正常的子例

程服务。建成了同样栽而经过调用指定的中止来激活的功力库后,就能啊此程

次提供标准的实用程序例程,而毋庸直接将例行程序与程序进行连接。这种功

会减了模块的深浅,并加速了装模块的长河。

      TSR的意向是停止程序的操作(像功能4Ch一样)但也未将程序占用的

内存返回到由DOS管理之外存库。这样就算允许程序继续保存活性并且当它们用

温馨联结上某种中断时就会让再度激活。例如,将某种程序统一上时钟中断时

哪怕能激活该次并于屏幕上出示有钟。并且,如果依照下有个键或者程序调用

了顿功能,同样也能激活该次。

      该意义而替最初出现在DOS版本1遭受之Int 27h TSR意义。这种初始

的TSR功能就同意最多64K底外存供自己享受,并且不提供返回代码。而功

能31h则允许其和谐用过64K的内存并能决定返回代码,通过功能

4Dh,这种返回代码就会供程序的父程序使用。这样就是允许批处理文件决定从

身内ERRORLEVEL参数变量的施行情况。

      在启动程序时,这种TSR功能就是准备把经过DX寄存器请求的内存分配

给就进驻留之顺序。但该功能不处理通过调用功能48h而分红都经过的内存。功

克31请勿闭馆程序打开的别样文件,而是叫程序打开的文书连续维持开拓状

状态。通过序段前缀(PSP)中某个不明之区域就能将词柄功能和目前活动

的经过联系在并。当该TSR功能未以倒的长河面临不时,它就是会见通过采取当

前面挪动之经过所打开的语句柄来引用文件。但是这种方式无适用于文件决定块

(FCB)功能,因为这种功效是经进程本身的区域来缓冲的。(关于FCB的有

 

510页

体情况可参见第9回“目录及文书”。)

      所有以句柄功能来拍卖文件和装备(并且在弹时要相反以走经常索要

一经采取句柄功能)的TSR,在动句柄之前务必经过动用非明的职能50h

暨51h来转换DOs关于当前走过程的概念。否则,就会现出我们不指望来

现的结果,并且还可能严重地摔其他程序要数量。

系统:

Int 21h             功能32h                                     版本2

                    获取驱动器参数块

    获取为指定磁盘驱动器定义字符特征的驱动器参数片;在DL=0时,该功能

    的意图以及作用1Fh之图一样。

调用寄存器: AH              32h

                DL          驱动器号(0=缺省;1=A;以此类推)

    返回寄存器: AL         如果驱动器无效则为FFh

                DS:BX     驱动器参数块的地址

    注释:使用该意义时,DS:BX便会返回磁盘参数片(DPB)的地方,这时所说

    的磁盘参数块是DOS用来规定以输入DL时,由DL指定的驱动器内磁盘的

    特定组织信息之参数块。

      表16.3吃出了DPB的构造(参见功能1Fh)。注意,不同的DOS版本有

不同的DPB结构,而且,表中于来的各个一样件后面还注明了独家的用途,使用时

应先看看用说明。

      由于该功能通过DS寄存器来为出返回值,因此,在调用该功能前必须

先保存DS的值。

系统

Int 21h             功能33h     子功能00h                       版本2

                    获取Ctrl-Break标志

得到Ctrl-Break检验标志的状态

调用寄存器: AH              33h

                AL           00h,获取标志状态

回到寄存器: DL              00h,关掉Ctrl-Break检验标志

                            01h,打开Ctrl-Break检验标志

注解:除了用于少数底I/O功能外(参见字符I/O功能01h-0Ch),在Int 21h

功用的处理过程中,大部分时日不针对Ctrl-Break或Ctrl-C字符进行自我批评。一旦

开班检查,除了个别几只纯设置或取标志数的效用外,对其它的Int 21h功

能够还如拓展检查。子功能00h通过DL返回Ctrl-Break标志的眼前状态、至于

511页

什么样转Ctrl-Break检验标志的状态,可参见子功能01h。

    在兴检验的前提下,如果找到了Ctrl-Break或Ctrl-C,那么程序的控制

权就深受传送让用于Int 23h的处理程序。此时,可用你自己之某功能来替换

生Int 23h处理程序,并拍卖Ctrl-Break或Ctrl-C,而休是不准Int23h处理程

序。

    这里值得注意的凡,Ctrl-Break/Ctrl-C标志是平种系统的全局性标志,它

可知影响于DOS系统上运行的装有程序。由于是均等栽系统全局标志,因此在针对

彼进行拍卖的长河遭到,必须加以小心,因为她起或影响至其它的进程、却无

潜移默化使该功能激活或失活的长河。

系统

Int 21h           功能33h   子功能01h                   版本2

                  设置Ctrl-Break标志

设置Ctrl-Break/Ctrl-C检验标志的状态

调用寄存器: AH            33h

              AL           01h设置标志状态

              DL           00h,已终止对Ctrl-Break的自我批评

                             01h,正在开展Ctrl-Break检查

回来寄存器:无

注:除了用于少数几乎种植I/O功能外(这种例外情况可参见字符I/O功能

01h-0Ch),在Int 21h功效的处理过程中,很少检查Ctrl-Break/Ctrl-C字符。

当检查开始经常,除了少数几种纯粹只设置或取标志数据的机能外,对另外的

Int 21h意义都使拓展自我批评。子功能01h则能够建立从Ctrl-Break检验标志的当

面前状态;关于检查其状态的信息可参见子功能00h。

      在同意检查时,如果找到了Ctrl-Break/Ctrl-C,那系统的控制权就吃转送

给了用来Int 23h的处理程序。可以为此你协调的先后来替换出Int 23h处理程

次第并拍卖Ctrl-Break/Ctrl-C,而不用去禁止这种处理程序。

      值得注意的是Ctrl-Break/Ctrl-C标志是一样种系统全局标志,它能影响

在DOS系统及运行的全体经过。由于是平等栽系统全局标志,因此,在对她进行

处理常承诺加以小心,因为它来或影响其它进程,却对激活或禁止该功能的上

路不起作用。

系统

Int 21h         功能33h     子功能05h                 版本2

                获取引导驱动器代码

回去一种植代码,该代码能反映出以来凡于哪一个驱动器中带系统的

512页

调用寄存器: AH                33h

                 AL            05h,获取引导驱动器代码

返寄存器: DL               引导驱动器代码(1=A,2=B,3=C如此等等)

注解:通过本4蒙才出的这种效应,程序就算会确定最近凡是由哪个驱动器

遇带系统的。每当系统开展自身之初始化时,这种消息就是受封存在DOS内

审批区域外。

系统

Int 21h             功能33h     子功能06h                     版本2

                    获取MS-DOS版本号

归来MS-DOS版本号修订版本号以及本标志

调用寄存器: AH              33h

              AL             06h,获取MS-DOS的版本号

回到寄存器: BL             主版本号

              BH            次版本号

              DL          位0-2负呢修订版本号;其余的各还是保留位,

                            并且值为0

              DH            版本标志。位3置个,表明MS- DOS在ROM中

                            运行;否则表明MS-DOS在RAM中运作。位4

                            置位,表明MS-DOS在高位内存区(HMA)内

                            运行;否则表明MSDOS在常规内存中运行。

                            其余的个还用作保留,其值都为0。

诠释:通过SETVER不克改变MS-DOS的版本号

系统

Int 21h             功能34h                                     版本2

                    返回InDOS标志的地点

同样种中的DOS标志用于表明DOS何时在处理Int 21h效

调用寄存器: AH              34h

归来寄存器: ES:BX       指为InDOS标志的指针

注:一旦DOS进入了Int 21h成效,DOS就见面添加InDOS标志,当DOS退

有时,它而见面去这种标志。 DOS和停止并进驻留(TSR)实用程序都用这种标

志来确定DOS是否在基本中同时是否当拍卖Int 21h效。当TSR实用程序

规定DOS在拍卖其他功能时,它而卜做以下简单业务有:

      ·继续这无异过程,因为这时不需要利用Int 21h效益。

513页

          拒绝处理,因为需要用到Int 21h作用。

        值得注意的是操作系统内核不净是不过重入的。因此,当操作系统正处在

    内核中时如果起了顿,服务例程就非可知运用Int 21h力量来拍卖搁浅,因

    为对平栽功能的调用可能同前方的调用发生冲突。在这种气象下,稍不小心就

    会冲毁系统,不过,也断没有必要失去翻来暂停处理程序来处理这底中止。

        出于操作及之需,小一些DOS内核代码的确可由此Int 21h接口来要

    用别样部分的代码,并且将InDOS标志用作防止代码出错的信号。此时In-

    DOS标志还而保证正式的TSR程序如PRINT.COM及其类似之先后会正常

    运转。但是,这种标志也常常出现错误引导的图景。

        当DOS在等键盘输入时,它当循环过程被凡是悠闲之,并且使有字符

    输入进去它就是见面读取这些字符。因此,只要DOS尚处等候状态,就能够平安地

    使用文件处理以及外一些作用,即使InDOS标志指示的是另外情况。为了让

    你懂得不过无恙地行使这些职能,DOS在它们的输入循环中不间歇地调用Int 28h

    (键盘忙碌循环)。TSR能收获Int 28h,这样,当Int
28h缺省不时,它便改为一个

    指为IRET的指针,并且只要尚以正规运转,它就是见面检讨如果召开的事体。

        例如,如果依照下有热键启动了TSR之后,但它可发现DOS正在实践

    Int 21h力量,因为就设置了InDOS标志,此时,TSR就会装同样栽中的标号

    志来表明“我一度受调用,但自己不能够举行其他工作”。无论何时,只要调用Int
28h,

    就可知检测及InDOS标志。反过来,如果设置InDOS标志,处理程序就会及时

    转向TSR部分因落实叫求的效力。

        在钟计数期间,TSR还能够截取时钟中断,并检讨InDOS和TSR引用标

    志。这样做的目的是为着防备以首浅调动用TSR时,出现Int 21h职能(而不是

    字符I/O功能)是走之情形。因为如果出现这样的情状,时钟中断就可知检测

    到InDOS标志的破和TSR引用标志的置位。然后,时钟中断根据实际内容

    况确定可以实现的伸手功能。

        但是,在DOS版本2被以Int 28h仍然会莫名其妙地导致系统冲毁。究

    其原因在于版本2在不来得及拿控制权调度给任何被请的机能前都先切

    换到其好之里边堆栈上;这样,当DOS在拍卖00暨0Ch范围外之某意义

    时(在调用Int 28h时,DOS几乎都在拍卖这个范围外之之一意义),如果起

    了调用其它力量的情景,那么第二单仓库就见面切换出,其结果是坏了开

    功能调用所急需之音。

        防止的主意很简约而也尽有意思:即由此操纵DOS的显要出错

    (CritErr)标志,令DOS相信其着处理同种植重点的不当。在调用某个意义

    之前,先安装CritErr标志能强迫DOS改变从而其自己之内堆栈。但每当脱离该

    功能下,必须用即时同一表明恢复到其的初始值。

        在DOS版本3受,系统以进行任何堆栈切换之前,首先修改DOS调度代

    码以检测起作用的作用;如果调用程序要这些职能受到的其他一个DOS都见面

    使用调用者自己的库,从而可避免出现问题。在DOS版本4丁,这种调度代

 

514页

堆依然维持无移。

      CirtErr标志只是一个字节,它标志DOS已撞了深重失误的场面,并且

在处理Int 24h(关键出错)处理程序例程。为了为这种处理程序尽可能地承诺

    用到又多的DOS功能受到失去,就不过设置CritErr标志并招致DOS调度代码以要

    用备用的中堆栈而未是日常的库空间。虽然调度代码的方法和全只是另行

抱的编码方式不同,但这么做能允许有限的效果重新以调度的代码。

      在本子2至本4中间的拥有版本被,CirtErr标志及InDOS标志是毗邻

    的。遗憾之是,在版本2和本3以内,CritErro标志的职出现了改动。在本

    本2中,它是置身紧挨在InDOS标志之上的一个字节,而以本3暨版本4

    中,它可变成了紧跟以InDOS标志之下的一个字节。

    注意:若从Int 28h处理程序中开展调用,该意义就会促成出现一些题材。该

          功能的是用法应是于她变成常驻功能前,先安装TSR。基于这无异于

          点可运所有的DOS功能来确定适用于CritErr的没错位置。使用即时

          种功能可得到与保留InDOS标志的地方,确定DOS版本号,并依据

          要求相应地多还是免除CritErr标志,并把该标志的地址保存在一个

          单独的指针外。

      这样,当TSR弹出时,它便会下它们和谐之InDOS指针以确定DOS是

    否为运动之,并且只要出必要,它还可用它好之CritErr指针来博该标志

   
的目前价值。然后用该值保存起来,并安装CritErr标志为强制行使备用的堆栈、

    着手处理任何急需处理的工作,并于脱前恢复起来的标志值。

系统

Int 21h           功能35h                                 版本2

                  获取中断向量

获取用于指定中断的暂停处理程序地址

调用寄存器: AH              35h

              AL            中断号

回到寄存器: ES:BX       指为中断处理程序的指针

注解:对某指定的中断来说,中断处理程序地址虽然是绝对可用的,但是,

拖欠功能也是抱中断向当前装的绝无仅有可靠的路径。该功能可确保顺利地终结

成为获工作并也向量返回一个可靠的值,其他的主次例如终止驻留(TSR)实

为此程序则只是在该功能顺利地回来了价值后更改这同一中断向量。当单用户、单任

致力操作的系统出现于拖欠意义的运范围外时,上述过程倒会有。

      当装一道程序以便从某个中断处理开始工作经常,就应承采取效益35h来

规定拖欠中断的开端设置,以便在成就工作经常只是将欠中断还原。在举行这项工作经常

非得密切,因为起或出现同TSR或外中断处理程序发生冲突的情形。如

515页

果能记住有中断值,并且就TSR的启用设改变了这价,那么就使盖收集

为此同一种能禁止该TSR的方式来替换出立刻等同中断。

      为了防止出现冲突,应直接打算恢复的中断向量同程序最初在拖欠向量中

安装的价值进行对照。如果发现这些价值不平等,那么证明从保存了是价为

后,其他的次已经修改了这价值,并且这既无力回天安然地促成恢复操作还是无

可知安全地从内存中撤走程序。如果手上价与初始值相抱,就得安全地将中

决恢复到其初始值。

磁盘

Int 21h             功能36h                                   版本2

                    获取自由磁盘空间

    除了生取舍地取磁盘的关于消息,还沾该驱动器上有效之磁盘空间

    调用寄存器: AH          36h

                DL        磁盘驱动器(0=缺省驱动器;1=A,如此等等)

    返回寄存器: AX         每簇的扇区数(如果驱动器无效,则为FFFFh)

                BX          有用之簇数

                CX          每扇区的字节数

                DX          驱动器上之簇数

    注释:该意义及功能1BH暨1Ch相似,其用意是回可用来确定磁盘上中

    空间的骨干信息。

      使用该功能时,可打指定要反省的磁盘驱动器着手。此时,可取得如下的

原来信息:

        ·每簇的扇区数

        ·可用的簇数

        ·每扇区的字节数

        ·驱动器上之毕竟簇数

      得到这些消息后,就不过按照下的算式计算出可用的空间量:

(有用之簇数)*(每簇的扇区数)*(每扇区的字节数)

所得的结果就凡该驱动器上可用的字节数。将即时同一数字除以1024可获千字

节数,或除以记录长度得到可用以数据库等之记录数。

      要拿走磁盘上中之半空中总量,可遵循下的算式计算:

(驱动器上之终究簇数)*(每簇的扇区数)*(每扇区的字节数)

得生结果后,就不过写来一致栽功效来打印出如下信:

          xxxx bytes free out of yyy

 

516页

功用1Bh暨1Ch可归跟上述类似之音。

STOP

Int 21h         功能37h   子功能00h                   版本2

                获取开关字符(Switchar)

取当前开关字符

调用寄存器: AH              37h

              AL           00h

回去寄存器: AL              FFh,表示AL子功能未以0-3以此限制外

              DL            开关字符

注:开关字符是DOS在拿字符串分析成指定的授命开关时所用的字符。

一般说来情况我们还拿开关字符设置成斜线(/),但是,根据应用程序的求我们

呢可是将她装成外字符。

STOP

Int 21h           功能37h     子功能01h

                  设置开关字符

兴以目前开关字符复位

调用寄存器: AH              37h

              AL           01h

              DL            开关字符

返回寄存器: AL              FFh,表示AL子功能未在0-3应声同克外

注解:开关字符是为DOS在把字符串分析成指定的命开关时所用的字符,

普通情况尚且因此斜线(/)来代表,但也可是依据应用程序的内需,将其装成任何

的字符。

      如果应用这种效果,首先须确定当前底开关字符(子功能0)并以其保险

满怀起来,以便在成功了次之后,能拿眼前开关字符恢复到其的初始化状态。

STOP

Int 21h           功能37h   子功能02h                     版本2

                  读取设备的可用性

    指出设备名称前有管必要加上借用路径名/DEV/

    调用寄存器: AH          37h

                AL         02h

    返回寄存器: AL          FFh,表示AL子功能未以0-3夫界定外

                DL        0,/DEV/必须加以在配备名前

 

517页

                              <>0,不必把/DEV/加在装置名的面前

    注释:设备可用性标志(仅仅以本2负采取)控制一样种植和UNIX类似的功夫

    能,这类功能通过强迫为各种设备加上假目录DEV从而令文件及设施拥有

    有一致的称,当该标志吧00时不时,表示只能当DEV目录中开辟或关闭设备;

    若为非零表明,则象征同意设备领先于文件称,这代表当系外,所有文件

    都无见面产生与装备相同之讳。在本3舅,这种标志被永远地安装为免零值,

    并且禁止子功能3底利用。

STOP

Int 21h              功能37h     子功能03h                 仅用于版本2

                    设置设备的可用性

    确定以装置名前来管必要加上借用路径名/DEV/

    调用寄存器: AH            37h

                AL           03h

                DL          0,必须管/DEV/加在配备名前

                              <>0,没有必要把/DEV/加在装置名前

回到寄存器: AL             FFh,表示AL子功能未以0-3斯限制外

                DL          设备的可用性标志(同输入一样)

注:设备可用性标志(仅用于版本2)控制正在同样种植和UNIX类似的功能,该

意义通过强制地为持有装备加上假目录DEV;从而允许文件和设备具备同等

    的名。该标志为00时时,表示只能以DEV目录内开辟或关闭设备;任何不零

    标志还允许设备领先于文件称,这便表示在方方面面体系外并未任何公文拥有

同装备相同之名。版本3早已以立即同一标志永久地设置成了非零值,并且一度禁止

    了分功能3的行使。

系统

Int 21h             功能38h                                     版本2

                    获取/设置当前国家信息

赢得当前国家信息;在DOS 3.0跟更强之本子中尚允许设置当前国家信息

调用寄存器: AH              38h

              AL           00,获取当前国家信息

                            在DOS  3.0暨再胜似之本子中

                            01-FEh,规定之小于255之国代码

                            FFh,国家代码出现在BX寄存器中

              BX            如果AL=FFh则也国代码

              DS:DX      指向信息缓冲区的指针

              DX            为FFFFh以安国家代码(以DOS3.0暨

 

518页

                              更胜的本子)

    返回寄存器:进位标志清除表示成功

                BX            国家代码(仅用于DOS版本3)

                DS:DX       指向返回的国度信息的指针

                  进位标志置位表示出错

                  AH          错误代码

                              02h,无效的国家(文件不找到)

    注释:由于DOS是平等种植国际性的磁盘操作系统,因此,为DOS设计的顺序一定

    须能在国际性的安装中行事。该意义的来意是打招呼顺序对各种用于显示信息

    的国参数应各自采取什么样的呈现方法。例如,日期格式类型的国参数用

    字节0和1开展编码。

        当该意义博得了跟国有关的音信经常,它就是见面经这种信息返回一个负

    向32个字节的缓冲区的指针。在DOS版本3同更强之本子被,该功能还只是

    用来安装供其他程序行使的国家信息。

        国家代码通常也国际性的对讲机前缀代码。一些比突出的代码(例如,

    American Samoa为684,Portugal为351)几乎可每当富有电话号码簿的前部找

    到。值得注意的凡,这些号码可以过255。为了适应这种景象,当AL寄存器

    被装置也FFh时,该功能可采用BX寄存器来保存这些代码。

        表16.5排有了江山信息表的格式,这些消息都是DS:DX指针所对

    的信息。

                        表16.5国家信息缓冲区中之始末

位偏移值              长度          意    义

    DOS版本2

    00h                   字              日期和日格式

                          0=美国          月日年,时时:分分:秒秒

                          1=欧洲          日月年,时时:分分:秒秒

                          2=日本         年月日,时时:分分:秒秒

    02h                   字节            货币符号

    03h                   字节            零

    04h                   字节            千分隔符

    05h                   字节            零

    06h                   字节            小数分隔符

    07h                   字节            零

    08h                    18字节         保留

    Dos版本3或版本4

    00h                   字              日期格式

                          0= 美国         月日年

519页

位偏移值              长度            意    义

                        1= 欧洲          日月年

                        2= 日本         年月日

02h                      5配节          货币符号串(ASCIIZ)

07h                     字节            千私分隔符

08h                     字节            零

09h                     字节            小数分隔符

0Ah                     字节            零

0Bh                     字节            日期分隔符

0Ch                     字节            零

0Dh                     字节            时间隔符

0Eh                     字节            零

 0Fh                字节              货币格式

                                       
00h=在泉前面的标志,中间无距离

                                        01h=在泉后面的号,中间无距离

                                       
02h=在钱前面的号子,间隔一个空格

                                       
03h=在钱币后面的记,间隔一个空格

                                        04h=代替小数分隔符的记号

10h                   字节              小数点之后的位数

11h                   字节              时间格式

                                        位0=0,12小时钟

                                        位0=1,24小时钟

12h                   双配              大小字变换调用地址

16h                     字节            数据列表分隔符

17h                     字              零

18h                      8字节          保留

DOS版本5

00h                     字              日期格式

                        0=美国         月日年

                        1=欧洲         日月年

                        2=日本         年月日

02h                      5字节          货币符号串(ASCIIZ)

07h                      2字节          千瓜分隔符(ASCIIZ)

09h                      2字节          小数分隔符(ASCIIZ)

0Bh                    2许节           日期分隔符(ASCIIZ)

0Dh                      2字节          时间隔符(ASCIIZ)

0Fh                     字节            货币格式

                                        
00h=在泉前面的标记,中间无距离

                                        01h=在钱后面的号,中间无距离

                   
                    02h=在钱币前面的号子,间隔一个空格

                                       
03h=在钱币后面的符,间隔一个空格

                                        04h=代替小数点分隔符的记号

10h                   字节              小数点之后的位数

520页

位偏移值              长度            意    义

11h                   字节              时间格式

                                      位0=0,12钟头时钟

                                        位0=1,24钟头时钟

12h                 双字            大小字变换调用地址

16h                    2字节            日期列表分隔符(ASCIIZ)

18h                   10字节            保留

      表中偏移值12h处的深浅写变换调用地址是格式化过程的远地址(段:

偏偏移值),这里所说之格式化过程是负实现国家专用的,大于7Fh的轻重缓急写字

符值变换的进程。必须通过在AL寄存器中进行字符变换才会调用这无异经过,

调整后底值可通过AL寄存器来回到。

磁盘

Int 21h             功能39h                                     版本2

                    创建子目录

当指定的驱动器和路线位置及创造建子目录

调用寄存器: AH              39h

              DS:DX      指向ASCIIZ路径说明的指针

返回寄存器:进位标志清除表示成功

              进位标志置位表示有错

              AX            出错码

                            03h,路径未找到

                            05h,访问为拒

注:除了通过该意义和其他目录功能(功能3Ah与3Bh)来决定目录项

他,DOS没有用别的艺术。这种不同寻常之效力允许创建新目录,新的目录采用

目路径名,必要经常累加驱动器符号。

      如果目录就是,或如路径名受到的别样因素不存在,或者使目录为

绝望目录并且根目录就满的语,该意义就会回到一个误而不见面去创造所求

恳请之目。

      在网络环境中,必须持有创建权限才能够创建子目录。

磁盘

Int 21h             功能3Ah                                     版本2

                    删除子目录

如果子目录是空的,就用那除去

521页

    调用寄存器: AH          3Ah

                DS:DX    指向ASCIIZ路径说明的指针

    返回寄存器:进位标志清除表示成功

                进位标志置位表示来错

                AX          出错码

                            03h,路径未找到

                            05h,访问给驳回

                            10h,当前目录

    注释:该功能是三种植能说了算其他目录中目录项的功力之一。它同意删除指定

    的目,但前提是该目录项存在而是空的,而且要去的目录不克是少省目

    录。

        在网环境遭受必须有创建权限才会删除子目录。

磁盘

Int 21h           功能3Bh                                  版本2

                  设置目录

装当前目录或缺省目录,以便同特定的字符串匹配

调用寄存器: AH       3Bh

              DS:DX    指向ASCIIZ路径字符串的指针

回寄存器:进位标志清除表示成功

              进位标志置位表示来错

              AX            出错码

                          03h,路径未找到

                          05h,访问于驳回

                          10h,当前目录

注解:该意义允许将程序放置在目录系统受到的某个指定位置。

      对于以异常目录中运作的次来说,一种有效的技巧是以运该功

可知来设置新的目录区域之前,先用功能47h来确定当前目录,并将当时无异信保管

抱起来。这样,当程序运行完毕后,它能够把目录返回到起来状态。不过,很少发

程序实现这无异步。

磁盘

Int 21h           功能3Ch                                   版本2

                  创建/截短文件(句柄)

一旦文件不存时时可创造指定的公文,或者当文件的确存在时时不过把欠文件长

过截短到散。

522页

    调用寄存器: AH            3Ch

                CX            文件属性

                  DS:DX     指向ASCIIZ文件证明的指针

    返回寄存器:进位标志清除表示成功

                  AX          文件句柄

                  进位标志置位表示有错

                  AX          出错码

                              03h,路径未找到

                              04h,无可用的句柄

                              05h,访问于拒

    注释:该功能是文件操作过程的平等种很基本的效力。它当面向句柄功能中之

    作用就是如功能16h在文书决定块(FCB)功能所起的意图一样。其作用是当文

    件不设有时时,可创有命名文件或者当文件在时时亦可将该尺寸截短到散。所梦想

    的文书是故ASCIIZ字符串来命名的,其中好蕴涵驱动器以及路径标识符。

    该意义返回的是16各类的文本句柄。文件句柄用于更对文本进行走访。新

    创建的文书都出文件属性,这无异属性通常为装以CX寄存器中。下表列出了

    各种不同之价与同她相互兼容的文件类型。

    值                相匹配的文件类型

    00h               普通文书

    02h                 隐藏文件

    04h                 系统文件

  06h                 系统跟潜伏文件

      一旦不待截短功能,那么根据所运行的DOS版本可相应地作出如下三

种选择:

      ·若使用的凡DOS版本2,则可由此功能3Dh来开辟文件,如果效果

        3Dh砸,就调用功能3Ch来创造文件。

      ·若所使用的啊DOS版本3,则可用功能5Bh来创造文件。如果效果

        5Bh失败,就调用功能3Dh来开辟文件。

      ·对于DOS版本4,还可以利用功能6Ch,这等同效会以单项功能受到被

        出全方位底文书打开选项。

      无论选用的凡啊种方法,都亟需细致考虑一下这种效应的使办法。曾有

成百上千的程序员在不适用的时刻里调用了这种功能,其结果是磨损掉了广大要命重复

设若之数额。

      导致拖欠意义失败的原故除了如下几种:即路径名受缺乏路径元素;正

每当绝望目录中开创文件同时根目录就满;以及虽有雷同的文件名但却为单读文

523页

    件等。

        使用该功能来创造文件时,往往通过返回读/写许可权、把文件作为日常

    文件来创造。如果起必不可少,还可用功能43h来转文件的特性。不可知用该意义

    来创建子目录和卷标。

        在网环境遭受,必须拥有创建权才会创造或者截短文件。

磁盘

Int 21h             功能3Dh                                 版本2

                    打开文件(句柄)

开拓指定的文书并回到一个可用来引用该打开文件的文本句柄(16个之累

字)。

调用寄存器: AH            3Dh

              AL        访问模式(DOS版本2)

                          访问与文件共享模式(DOS版本3以及

                          更强的本)

              DS:DX     指向ASCIIZ文件证明的指针

返寄存器:进位标志清除表示成功

              AX          文件句柄

            进位标志置位表示有错

              AX          出错码

                          01h,非法功能

                          02h,文件未找到

                          03h,路径未找到

                          04h,无可用的文件句柄

                          05h,访问于拒绝

                          0Ch,访问代码无效

诠释:要惦记打开文件,首先要拿公文称指定为ASCIIZ字符串。该功能可看

的文书发出三类:普通文书、隐藏文件要系统文件。寄存器AL可通报该意义:用

户要看的是哪一样种植文件。表16.6介绍了安为DOS版本2和本子3而

置AL寄存器。

                      表16.6访同文件共享模式

          位

                              含义

    76543210

      DOS版本2

. . . . . 000               读访问

. . . . . 001              写访问

. . . . . 010               读/写访问

524页

            位

                                含义

      76543210

DOS版本3和版本4

    . . . . . 000            读访问

    . . . . . 001             写访问

    . . . . . 010            读/写访问

    . . . . x. . .            保留

    . 000. . . .              共享模式——兼容模式

    .001. . . .              共享模式——读/写访问于禁

    .010. . . .              共享模式——写访问被禁止

    .011. . . .              共享模式——读访问于明令禁止

    .100. . . .              共享模式——允许了看

    0. . . . . . .            子进程而继承的

    1.. . . . . .            仅当前过程有的

      在DOS版本3和重新胜似之版中,除了可要求读/写他,还可求网络

拜(文件共享模式),并可指出所访问的公文是否只是由于可能实行的子进程来

继承。

      在回时,文件一般是打开的,以便让系统按照期望的模式来拜访该文

项,除非要顾的公文找不顶或系非允许所要之模式(例如,把走访模式

装也念/写模式来拜会只读文件)。如果文件打开功能取得了成,读/写指

针就见面并发在开辟文件的初步有些。

      在DOS版本2着,该意义就以寄存器AL中的0-2各类,其余的各类都不能不

若是设置也零星。在DOS版本3与再强的版本被,由于装载了文件共享软件,

AL寄存器中还要生4个各类而供应其他进程使(位4-6,用于共享模式,位7为继

承位)。从不利的地方讲,文件共享出错诱发Int 24h(关键错误)返回来错代码

02h(驱动器未备好)。

      如果把承位置也1,就见面让受打开的文本化打开该文件的进程的

专用文件。若继承位为0,打开文件就不过供应从该文件于辟后如果涌现出的另外

进程使。如果文件句柄为子进程所累或让某进程复制了,那么这子进

路途(或进程)也就延续了拖欠公文句柄的兼具文件共享模式。

      对出现于DOS版本3前后编写的大部DOS软件来说,兼容模式(把位

37置为零星)只是一律种植家常模式。只要软件在么工作站上运行,文件访问了

行程遭遇便未会见油然而生冲。但随着联网软件的使和文件共享成为切实,兼容模

仪式都不再适合进行文件决定了。

      要惦记在网环境受到与其它程序一样鸣工作,程序即使得在打开调用过程被如果

故而共享模式,以便能于既定的编程任务所要求的界定条件下展开走访。

      通常状态下,应在相当模式遭遇动用FCB来打开文件,除非是为着单纯读访

525页

咨询要开辟文件。在这种状况下,就只好以取缔写的共享模式被开展文件打开操

作。同时,通过句柄功能来呢就念访问打开文件的操作为承诺在查禁写的联手享模

典礼中展开。其他兼具兼容访问模式还以禁止到方方面面文书访问了后才进行

操作。

      为了对地利用该功能,程序员必须熟悉文件所求的拜访,并了解该文

起暗示出底各种非限制性的勾勒访问。可能的模式来如下几种植:

      ·禁止读/写。无论是以当前机械上或者在相同网络上之别机器及,在

        这种模式下开拓的文书未能够被另外程序(或当前次)再同差打开。为

          了有利于控制面向重点创新的数据库操作,这种类型的走访是杀有必不可少

        的。

        ·禁止写。对以这种模式下开拓的文件,其他任何程序都非可知用那打开

        来读。

        ·无禁止行为。没有明令禁止其它程序对斯文件的访(读或摹写)。

      在网络环境遭到,值得令人注意的凡针对数据文件的基本上单程序的拜访。当多道

次试图以创新同一文件记录时,就会见导致数据库出错。本书只介绍了不同

的次中应以什么样的方式来协调文件访问。因此,要想更询问这种

和谐机制,还许诺查看一些关于数据库或操作系统的书籍。

磁盘

Int 21h           功能3Eh                                   版本2

                  关闭文件(句柄)

闭馆先前经过文件句柄打开的文件

调用寄存器: AH            3Eh

              BX          文件句柄

回去寄存器:进位标志清除表示成功

              进位标志置位表示来错

              AX          出错码

                         06h,无效句柄

注解:该功能的来意是关先前于是DOS文件处理效果打开或创造的文书。它

拿句柄返回给系统使用,并同时实现对文件之持有更新。如果都落实对文件

的改动,那么记录在文件目录项中的文件日期为便得到了创新。

      在实际操作过程被的一些得逞的范例表明:程序应关闭它所打开的上上下下

文本为回到使操作系统是地换代文件系统。当次终止时,DOS虽然会打

动地关闭活动之公文句柄,但切莫能够盲目地依靠DOS,尤其当期程序变得而

移植时进一步不能够相信DOS。

      注意:在关门文件句柄0时假如死小心,因为其是同样种植标准的输入设备

 

526页

(通常为键盘)。如果同不小心关闭了文件句柄,就会见去与键盘里的通信,

除非立即又打开CON设备。

磁盘

Int 21h           功能3Fh                                 版本2

                  读文件或者配备(句柄)

从文本句柄参数指定的文件要设施中读来多少,然后把这种数量写入指定的

内存位置。

调用寄存器: AH            3Fh

              BX          文件句柄

              CX          字节数

              DS:DX    指向缓冲区的指针

回到寄存器:进位标志清除表示成功

              AX          读取的字节数

              进位标志置位表示来错

              AX          出错码

                          05h,访问为拒绝

                          06h,无效句柄

注:基本的文书读操作会起文本被取一定数量的字节并将该存于指定

的缓冲区中。如果念操作成地做到,但是AX小于CX,那么以检测及文件之

末尾(EOF)之前,会现出部分读取情况。如果在调用此功效时曾经检测及了

EOF,那么网会安装进位标志,只是此时AX寄存器的价值将会是0。

      只要具备一切之文书句柄调用,就只是把设备当作文件来比,因此,可如果

用该意义来打字符设备如键盘中读来多少。只是于处理字符设备时还叠加有

部分异常的限制标准。如果字符设备处同一栽组成的模式遭遇(参见功能44h),

那按照下回车就可已读操作(此时仅读来一行)。

      在网环境下,必须持有读来权力才会念文件或者配备。

磁盘

Int 21h           功能40h                                 版本2

                  写副文件或者配备(句柄)

    把多少写入文件句柄所指定的文本

    调用寄存器: AH          40h

                BX          文件句柄

                CX          要描写副的字节数

                DS:DX    为同样指南针,指向要描写副的数目缓冲区

    返回寄存器:进位标志清除表示成功

527页

                AX          已写的字节数

                进位标志置位表示有错

                AX          出错码

                            05h,访问为取缔

                            06h,无效句柄

注:使用文件句柄功能来将多少写入文件是一致桩大容易之干活,只需要依靠

定文码句柄,字节数和针对性数据缓冲区的指针。接着,文件句柄功能将指定字

节写入文件中之即职。

      寄存器AX返回所写副的字节数,或者当该功能失败时回来来错代码。一

诚如情形下,通过AX返回的字节数与如描写的字节数(CX寄存器返回的)是同等

的。如果写操作成,并且AX的价值小于CX的价,则表明只有写下了片记下;

并且,如果磁盘空间不够,也说不定导致出现部分的记录写;在这种场面下,最好

的处理方式是为此效应36h、1Bh要1Ch来检查可用之空中。如果目标文件为标明

明为只念文件,那么该功能就会返回一个弄错代码。

      在网环境面临,必须具备写副权限,才能够将多少写入指定的文本要设施。

磁盘

Int 21h         功能41h                             版本2

                删除文件

自从系统受剔除指定的文件

调用寄存器: AH              41h

                DS:DX    指向ASCIIZ文件证明串的指针

    返回寄存器:进位标志清除表示成功

                进位标志置位表示有错

                AX          出错码

                            02h,文件不找到

                            05h,访问被禁止

    注释:通过用E5h来把文件称吃之率先独字节标记为目录项,该功能就是能够去

    除文件。如果当剔除操作后非变更还是创办其他文件,那么由标记的有,就

    有或恢复,”被删去的”
文件。分配受该文件簇被归给系统以便让复利用。同

    时,该功能不见面重复写实际文件。

       
与公事决定块(FCB)删除功能(13h)不一致,该功能不容许以通配符。

    如果想透过动通配符的文书名来与公事相配合,以便除去一组文件,那么即使

    必须利用搜索效果(4Eh与4Fh)来挨家挨户个地稳住这些文件。由于该意义允许看

    问在目录中的文本,因而就无异于限制非常容易克服。

        如果要刨除的文件在,但具备独自念属性,或者未可知找到要抹的公文,

    那么该功能会失败。

 

528页

    要惦记当网环境面临去文件,则要具备创建访问的权杖。

磁盘

Int 21h             功能42h                                     版本2

                    移动文件指针

反文件的手上职务,并倒文件指针,令该对某个与公事开始、文件末尾

要当前职相关的岗位。

调用寄存器: AH              42h

              AL          方法代码

                            00h,从文本开始处算起底偏移值

                            01h,相对于当下职的偏移值

                            02h,相对于文件末尾的偏移值

              BX            文件句柄

              CX            偏移值中高位部分

              DX            偏移值中低部分

归来寄存器:进位标志清除表示成功

              DX:AX       新文件指针的职

              进位标志置位表示出错

              AX            出错码

                            01h,非法功能(文件共享)

                            06h,无效句柄

注解:该意义的企图是把文件读/写指针调整至对一个初的位置,这个新位

置是通过偏离文件的启,末尾或当前位置的距离来计量的。可以管这种偏移

价值指定为一个32各类的数字(指定的克可一直到(4096M)。在本子4前,

尚不可能以实际操作中动用这种大小的文件,因为操作系统限制用于单个磁

盘字的计量最为深不行超32M。在本4遭受,这种限制让撤销了。当移动文件指

针时,应为该指针指向下一个打文本被读来数还是把数据写入文件中之职位。

      对拖欠意义而言,较为实用的法不是安装文件之职务,而是规定文件之老

有些,可经过将寄存器AL置为2(相对于文件末尾的偏移值)以及将CX和DX

寄存器置为0(相对于文件末尾的偏移值),就能够得到文件的高低。通过AX和

DX寄存器返回的岗位表示仍字节计算的实在文件大小。当然,要这么做,得

为指针处于文件之结尾。如果对回的职不称心,那么就得在宣读或写操作的

前,重新将拖欠岗位也所盼的位置。

      该功能的旁一个根本之企图是促成由文本末尾开始的效力或附加功能。

首先,可用功能3Dh来开辟文件,接着通过和用于确定文件大小相同的主意

(AL=2,CX和DX=0)来使用该功能,以便及时将读/写指针重新设置为负

望文件的尾声。

529页

    通过文件功能42h,可以将公文指针设置及文件开始之前还是文件末尾的

后底某位置。把文件指针设置到文件末尾之后是无会见招致差的,但一旦打算

由者不存的岗位被读来多少就会见造成差。对文件末尾之后的职位展开

写操作会挑起系统将还多之长空分配受该文件,从而令该文件具有足够的

空中来包容所写的情节。在开展读或写操作时,若将公文指针设置以文书之前头

面,就见面导致差。

      如果以网体系及采用该意义,并运用禁止读或任任何禁止的共享模式

来拍卖某个文件,那么富有该公文之测算会调整文件指针信息。如果就此外其

他的共享模式来拍卖公事,则文件指针信息就见面吃保存在长途计算机达。

磁盘

Int 21h         功能43h                               版本2

                获取文件属性

获得文件的特性

调用寄存器: AH                43h

                AL             00,获取文件属性

                DS:DX      指向ASCIIZ文件说明的指针

回来寄存器:进位标志清除表示成功

                CX            属性字节(参见表16.7)

                进位标志置位表示有错

                AX            出错码

                              01h,非法功能(文件共享)

                              02h,文件不找到

                              03h,路径未找到

                              04h,访问被驳回

诠释:目录项之文件属性都是各项映象的性能,如表16.7所出示。

              表16.7用于功能43h,子功能00h返回的特性字节的各类含义

          位

                              含义

    76543210

    . . . . . . . 1           只念文件

    . . . . . . 1.            隐藏文件

    . . . . . 1. .            系统文件

    . . . . 1. . .            卷标

    . . . 1. . . .            目录

    . . 1. . . . .            归档文件

    x x . . . . .             未使用

以各种目录项的特性被,通过该意义所未能够访问的有用于卷标和子目录

 

530页

的目录项属性。

磁盘

Int 21h           功能43h   子功能01h                     版本2

                  设置文件属性

安装文件的性质

调用寄存器: AH                43h

                AL             01h,设置文件属性

                CX            新的性(参见表16.8)

                DS:DX      指向ASCIIZ文件说明串的指针

回去寄存器:进位标志清除表示成功

                进位标志置位表示出错

                AX            出错码

                              01h,非法功能(文件共享)

                              02h,文件未找到

                              03h,路径未找到

                              05h,访问于拒

注解:表16.8挨列有了文件属性的各种设置值。

                表16.8用来功能43h,子功能01h的各种性能设置

            位

                                                  含义

      654     3210

    . . .     . . . 1                           只念文件

    . . .     . . 1.                          隐藏文件

      . . .   . 1. .                            系统文件

    . 1.      . . . .                           归档文件

      使用该功能不可知设置子目录或卷标。要想创造卷标,则须采用文件决定

片(FCB)文件创建功能,并使扩展的FCB。功能39h凡绝无仅有能用来创造目录

    的功能。

      在网络环境面临,必须有创建访问权限才会改除档案位外的所有文

起属性位。改变档案属性位不要求所有其他限制的权位。

系统

Int 21h           功能44h                                 版本2

                    设备驱动程序控制(IOCTL)

拿控制信息传送给设备驱动程序,或从设备驱动程序程序中拿走控制信息。

调用寄存器: AH           44h

531页

                AL          设备子功能代码(参见表16.9)

                BX         
句柄(子功能代码00h、01h、02h、03h、06h、07h、

                            0Ah、0Ch以及10h)

                BL          驱动器代码,0=默认,1=A,等等(子功能码

                            04h,05h,08h,09h,0Dh和11h)

                CX          要读取或写给的字节数

                CH          种类代码(子功能代码0Ch、0Dh、10h和11h)

                CL          功能代码(子功能代码0Ch、0Dh、10h和11h)

                DS:DX    指向缓冲区的指针(子功能代码02-05h)

                DS:DX     指向参数块的指针(子功能代码0Ch、0Dh、10h

                            和11h)

                DX          设备信息(子功能代码01h)(参见表16.9)

    返回寄存器:进位标志清除表示成功

                AX          已传送的字节数(子功能代码02-05h)

                AL          状态(子功能代码06-07h)

                00h         “未备妥当”

                FFh         已就绪

                AX          值(功能代码08h)

                00h         可活动的

                01h         固定的

                DX          设备信息(子功能代码00)

                进位标志置位表示来错

                AX          出错码

                            01h,非法的效果(文件共享)

                            04h,无可用的句柄

                            05h,访问于禁

                            06h,无效句柄

                            0Dh,非法数据

                            0Fh,无效驱动器

诠释: IOCTL功能是能当DOS使用的极复杂的功效之一。该意义有着18

    个单身的子功能。表16.9简短地介绍了当下18个子功能,以及规范以这些子

    功能的DOS版本。 AL寄存器传送出来的音信意义和所定址的一定设备驱动

    程序有关。

                          表16.9装置功能代码

AL                      含    义                            DOS版本

00h                   获取装备信息                                2.0

01h                   设置设备信息                                2.0

02h                   字符设备读                                  2.0

532页

AL                      含    义                            DOS版本

    03h                 字符设备写                                   
2.0

    04h                 块设备读                                     
2.0

    05h                 块设备写                                     
2.0

    06h                 获取输入状态                                 
2.0

    07h                 获取输出状态                                 
2.0

    08h                 块设备是否改变?                             
3.0

    09h                 块设备是本土的抑长途的                     
3.1

    0Ah                 句柄是本地的还是长途的                       
3.1

   0Bh                  设置共享重试计数                             
3.0

    0Ch                 用于句柄的通用I/O控制                       
3.2

    0Dh                 用于块设备的通用I/O控制                      
3.2

0Eh                     获取逻辑驱动器映象                           
3.2

    0Fh                 设置逻辑驱动器映象                           
3.2

    10h                 询问IOCTL句柄                                
5.0

    11h                 询问IOCTL设备                                
5.0

      IOCTL功能是一个广义的设施一驱动程序接口程序,其目的不是传递数

照,而是和驱动程序通信,并报告驱动程序如何做事。

系统

Int 21h           功能44h   子功能00h                   版本2

                  获取装备信息

    获取句柄引用的装置或者文件的关于消息

    调用寄存器: AH          44h

                      AL              00h

                      BX              句柄

    返回寄存器:进位标志清除表示成功

                DX          设备信息(参见表16.10)

                进位标志置位表示出错

                AX          出错码

                            01h,非法功能

                            05h,访问为取缔

                            06h,无效句柄

    注释: DX寄存器返回系统外经过BX寄存器中之文书句柄来访问的字符设

    备或文件的编码信息。表16.10排有了这些代码和分级的意思。在这里,句柄

    必须引用某个打开的文件或者字符设备。

533页

    表16. 10设施信息代码

              位设置

                                      含    义

FEDCBA9876543210

              字符设备

. . . . . . . . . . . . . . . 1     标准输入设备

. . . . . . . . . . . . . . 1.     标准输出设备

. . . . . . . . . . . . . 1. .       NUL设备

. . . . . . . . . . . . 1. . .      时钟设备

. . . . . . . . . . . 0. . . .      设备不支持Int 28h

. . . . . . . . . . . 1. . . .      设备支撑Int 28h

. . . . . . . . . . 0. . . . .      修改的模式

. . . . . . . . . . 1. . . . .      原始(二进制)模式

. . . . . . . . . 0. . . . . .      输入文件之极

. . . . . . . . . 1. . . . . .      未至输入文件之巅峰

. . . . . . . . 1. . . . . . .      字符设备

. . x x x x x x . . . . . . . .     保留

. 1. . . . . . . . . . . . . .     
设置能够处理通过子功能02h和03h而传送的

                                    控制字符串,只能读取该位而不克设置它

x. . . . . . . . . . . . . . .      保留

          块设备(磁盘文件)

. . . . . . . . . . x x x x x x 块设备(0=A、1=B等等分别表示第1只至第n

                                    个块驱动程序)

. . . . . . . . . 0. . . . . .      文件已经为写副

. . . . . . . . . 1. . . . . .      文件并未被勾勒副

. . . . . . . . 0. . . . . . .      块设备(磁盘文件)

. . x x x x x x . . . . . . . .     保留;在调用此功能时务必用那置为0

. 1. . . . . . . . . . . . . .     
设备会处理通过为功能02h和03h传送的控告

                                    制字符串。但不得不读取该位而未克设置它

x. . . . . . . . . . . . . . .      保留

      用于字符设备的位5是一个顶有用的信位。当UNIX程序员们以地处

调理终端设备时,他们充分熟悉下的有数独术语,即:“修改的(Cooked)模式”和

“原始模式”。在COS中,修改的(cooked)模式表示处理Ctrl-C、Ctrl-P、Ctrl-

Q、Ctrl-S和Ctrl-Z,以及以检测及回车符而无是指定数量的字符时所住的

输入。修改的模式是同样种都编辑输入模式,许多参考手册将其讲述为唯一的控诉

制台输入模式。

      在老模式受到,所动之I/O系统驱动程序忽略了这些字符的奇含义,

而且直接相当及接收了整确定之字节数据经常才起读操作中归。无需经过I/

O系统或者DOS的解说,驱动程序可将拥有接受至的字节直接传送给应用程

次第。类似的别呢存吃出口进程上(标记字符的进行、换行前掉转车符的全自动

起、以及等等)。

 

534页

      BX寄存器中之句子柄必须看打开的文本或者配备。如果无这样的话,该功

克便会回到错误代码06h(无效的句柄)。

      在回去时,DX寄存器中的位8-15各自针对应于设备驱动程序属性字节中

的同一位。(关于属性字和驱动程序标题的具体情况可参见第12章“设备驱动

程序”)。

系统

Int 21h             功能44h   子功能01h                     版本2

                    设置设备信息

    这一子效益只用于字符设备,其作用是允许设置设备信息代码

    调用寄存器: AH          44h

                      AL              01h

                      BX              句柄

                      DX              设备数据字

    返回寄存器:进位标志清除表示成功

                进位标志置位表示来错

                AX          出错码

                            01h,非法功能

                            05h,访问给明令禁止

                            06h,无效句柄

                            0Dh,无效数据

    注释:子功能01h仅同意吗字符设备安装必有的装备数据字。在这种调整

   
用中,唯一经常为修改的号是位5。(关于原始模式及改动模式的讲,可参见

    子功能00h的介绍)。

        如果DH寄存器不为零星,该意义就是会回去错误代码01h(非法功能)。这种

    子功能为要求句柄引用打开设备。如果句柄为文件,那么网就无会见更新任何

    信息。表16.11详细介绍了配备数据字(DX寄存器)。

                          表16.11装置数据字

              位设置

                                          含    义

FEDCBA9876543210

. . . . . . . . . . . . . . . 1         标准输入设备

. . . . . . . . . . . . . . 1.         标准输出设备

. . . . . . . . . . . . . 1. .           NUL设备

. . . . . . . . . . . . 1. . .          时钟设备

. . . . . . . . . . . 1. . . .          设备支撑Int 28h

. . . . . . . . . . 0. . . . .          修改的模式

. . . . . . . . . . 1. . . . .          原始(二进制)模式

535页

              位设置

                                            含    义

    FEDCBA9876543210

. . . . . . . . . 0. . . . . .        输入文件的结尾

. . . . . . . . 1. . . . . . .        字符设备

x x x x x x x x . . . . . . . .       保留

系统

Int 21h           功能44h     子功能02h                     版本2

                  设备IOCTL读

从今驱动程序中取控制字符串信息以供调用程序用

调用寄存器: AH            44h

              AL         02h

              BX          句柄

               CX         要抱的字节数

              DS:DX     指向数据缓冲区的指针

回寄存器:进位标志清除表示成功

              AX            已传送的字节数

              进位标志置位表示来错

              AX          出错码

                          01h,非法功能

                          05h,访问给明令禁止

                          06h,无效句柄

                          0Dh,无效的数据

注解:可经过控制字符串把驱动程序的擅自信息传递给调用程序。在这边,任

一齐信息指的是驱动程序中可用来支持系统的各种消息;并且这些信息不在

其他正规的格式和内容。驱动程序响应请求的主意是让请求直接到驱动程

先后上。第12节“设备驱动程序”详细介绍了控制字符串的状态,对之有疑点的

读者可参照第12回的内容。

      子功能00h的位0Eh表明驱动程序是提供或应控制字符串。

系统

Int 21h             功能44h   子功能03h                     版本2

                    设备IOCTL写

拿控制字符串的音信传递给驱动程序

    调用寄存器: AH          44h

536页

     AL           03h

                    BX            句柄

                    CX            要传送的字节数

                    DS:DX       指向数据缓冲区的指针 

        返回寄存器:进位标志清除表示成功

                    AX            已传送的字节数

                    进位标志置位表示出错

                    AX            出错码

                                  01h,非法功能

                                  05h,访问被禁止

                                  06h,无效句柄

                                  0Dh,无效的数量

       
注释:有关驱动程序的任性信息还可放入一个操失误中要传递让驱动程序。

       
这种信息可是驱动程序所支持的外信息;对斯消息要信息之始末的格式,

       
无任何专业可言。驱动程序响应请求的方法同样完全靠让该驱动程序本身。

       
第12段“设备驱动程序更详细地讨论了决定失误的情。本子功能时用来为

        驱动程序传递配置信息,如波特率、字长度等。

            子功能00h的位0Eh能指明驱动程序能否提供或响应控制串。

系统

Int 21h             功能44h     子功能04h                     版本2

                    块驱动程序IOCTL读

从一个片驱动程序(磁盘类型)中读取控制信息

调用寄存器: AH              44h

              AL           04h

              BL            驱动号

              CX            要取得的字节数

              DS:DX       指向数据缓冲区的指针

回去寄存器:进位标志清除表示成功

              AX            传送的字节数

              进位标志置位表示来错

              AX            出错码

                            01h,无效功能

                            05h,访问被禁止

                            06h,无效句柄

                            0Dh,无效数据

537页

诠释:子功能04h能经过控制字符串由块驱动程序中写给有关块驱动程序的

    任何消息。这种消息既好是状态信息,也可是驱动程序中可用来支持系统

    的各种信息。对这些信而言不存其他格式或内容达之专业。

      驱动程序响应请求的措施是让请求直接到达该驱动程序上。第12节“设

均驱动程序”中详细介绍了控制字符串的景,这里就是不再复述。在当下无异子功

    能的便使用被,还关乎到片设备操作的备选干活。如果是为CD-ROM驱

    动器、磁带驱动器之类的装备而写驱动程序,那么网发生或会见了解这仿佛设

备。

      子功能00h中之位0Eh表明驱动程序功能是提供控制字符串还是应

    控制字符串。这一子功力未求块设备驱动程序的支持。但是,如果所调用的

    驱动程序不支持其,系统便会返回错误代码01h(非法功能)。

系统

Int 21h           功能44h     子功能05h                   版本2

                  块驱动程序IOCTL写

管控制信息传送给块设备(磁盘类型)

调用寄存器: AH            44h

              AL         05h

              BL          驱动器号

              CX          要传递的字节数

              DS:DX    指向数据缓冲区的指针

回寄存器:进位标志清除表示成功

              AX          已传送的字节数

              进位标志置位表示有错

              AX          出错码

                           01h,非法功能

                          05h,访问给明令禁止

                          06h,无效句柄

                          0Dh,无效数据

诠释:子功能05h通过控制字符串把有关块驱动程序的其它消息传送让该驱

动程序。这些消息中好概括命令或驱动程序中只是写来支持系统的各种信息。

针对这些信息而言,不有任何格式或内容达到的业内。

      驱动程序响应请求的计是深受请求直接到驱动程序上。关于控制字符

差的详细情况可参见第12章节“设备驱动程序”,这里虽未发介绍。此外,这一子

成效以事实上使用中尚从在非I/O设备功能的作用,如磁带倒带和磁盘弹出等。

      子功能00h中的位0Eh表明驱动程序是供控制字符串还是答应控制

字符串。这一子效应未求块设备驱动程序的支持,但是,若所调用的驱动程

 

538页

次不支持该子功能,系统就是会回来错码01h(非法功能)。

系统

Int 21h             功能44h   子功能06h                     版本2

                    获取输入状态

回到输入操作过程中使的设施或者文件的状态

调用寄存器: AH             44h

              AL           06h

              BX            句柄

返寄存器:进位标志清除表示成功

              AX            输入状态码(参见表16.12)

              进位标志置位表示来错

              AX            出错码

                            01h,非法功能

                         05h,访问于禁

                            06h,无效句柄

注:通过这一子效益就是会懂得某个设备或者文件是否发好了欢迎输入操作的

预备。如果文件并未于功能42h定位,则好检查文件是否处在EOF,同时,

还可检查字符设备是否发好了操作的备。表16.12排列有了输入状态代码(寄

存器AH),并对代码的意思作了说。

              表16.12用以功能44h,子功能06h的输入状态代码

代码                  文件                                设备

00h                   位于EOF                             未备好

FFh                   不位于EOF                           准备好

(说明:如果用Int 21h,功能42h管文件定位在EOF上,该公文就未会见回来EOF)。

系统

Int 21h           功能44h     子功能07h                     版本2

                  获取输出状态

回用于出口的文本或者设施的状态

调用寄存器: AH              44h

              AL           07h

              BX            句柄

归来寄存器:进位标志清除表示成功

              AL            输出状态代码(参见表16.13)

              进位标志置位表示来错

539页

                AX            出错码

                              01h,非法功能

                              05h,访问被取缔

                              06h,无效句柄

    注释:通过就一子效应就是好理解某个设备或者文件是否犯好迎接输出操作的

    准备。正如下表所示,文件连续回到“ready”;而字符设备可无是如此。

                  表16.13用于功能44h,子功能07h的输入状态代码

代码                  文件                                设备

00h                   位于EOF                               未发好准备

FFh                   不在EOF                             已发好准备

系统

Int 21h           功能44h     子功能08h                     版本2

                  块设备是否移动?

用于确定有块设备是否只是活动

调用寄存器: AH              44h

              AL           08h

              BL            驱动器号

归来寄存器:进位标志清除表示成功

              AX            00h,可走的传媒

                            01h,非可走的传媒

              进位标志置位表示来错

              AX            出错码

                            01h,非法功能

                            0Fh,无效驱动器

注解:通过一子功能,那些急需以一定设备及稳定数据文件、或抬高覆盖物的

应用程序就可知确定该设备是否要动。如果不能把所梦想的文本定位于一定

的设备上,并且该装置是只是走的,那么程序即使会见提醒用户插入对的磁盘,

以便继续操作。

      设备驱动程序属性字中之位0Bh表明了驱动程序能否支持该意义。有些

驱动程序的确不克提供支撑。在这种时刻,子功能08h就见面返回来错代码为

01h。

系统

Int 21h             功能44h     子功能09h                       版本2

                    块设备是当地的还是长途的?

确定块设备是地面的抑长途的

540页

    调用寄存器: AH           44h

                  AL          09h

                  BL          驱动器号

    返回寄存器:进位标志清除表示成功

                  DX          设备属性字

                              位12=1,设备是长途的

                              位12=0,设备是本地的

                  进位标志置位表示有错

                  AX          出错代码

                              01h,非法功能

                              0Fh,无效驱动器

注解:如果网络未为启动,则就一子效能就回到来错代码01h,表明所用之素养

能无效。

      在编程过程遭到,最好不用用这种作用。因为不论使用何种措施来编写程

次,所修出来的先后都应跟网达到任何一个特设施的职位无关。但是,

纵然用这种效益,一些请勿明之效用还是会正确地操作,它们才跟地面文件

有关,而不克由此远距离文件来运它们;如果在程序中必须要用以这样平等种不

光天化日的功力,那么在使用子功能09h时就见面避免出现某些错误。

      如果DX的号12也0,则表明驱动器是地方的,同时DX的任何各位还分

浮动表示正在如下含义:

      位1       1= 驱动器使用32位扇区定址

      位6       1= 驱动器支持作用44h,子功能0Dh、0Eh和0Fh

      位7       1= 驱动器支持力量44h,子功能11h

      位9       1= 驱动器是地方的,但于网络中之任何计算机共享

      位11       1= 驱动器支持功能44h,子功能08h

      位13       1= 在FAT中,驱动器要求介质描述吻合

      位14      1= 驱动器支持作用44h,子功能04h和05h

      位15       1= 子功能驱动器(即透过SUBST命令设置的驱动器)

      所有的其他的位都为0。

系统

Int 21h           功能44h   子功能0Ah                   版本2

                  句子柄是当地的或者长途的?

确定句柄是地面的还是长途的

调用寄存器: AH           44h

              AL           0Ah

              BX            句柄

回到寄存器:进位标志清除表示成功

              DX            设备属性字

                            位15=1,句柄是长距离的

541页

                              位15=0,句柄是地方的

                  进位标志置位表示有错

                  AX          出错码

                              01h,非法功能

                              06h,无效句柄

     
注释:如果不能启动网络,这一子职能就会见回来来错代码01h,表明所动的

      功能失效。

        在编程过程中,最好不要使这种功能。因为无论以何种方法来编写程

    序,所编纂出来的次序还该和网络上别一个奇特设施的职位无关。不过,

     
即使以即时一子功能,一些不公开之法力还是能对地操作,它们才及地面句

     
柄发生作用,而未能够透过远距离句柄来采取它;如果以先后中须使用以这种

      未明之效力,那么以使用子功能0Ah时即便见面避免出现一些错误。

        DX中的位7清除,表示句柄已标识了文件,而且DX中的旁各位还分

      别有如下含义:

        位0-5        驱动程序号(0=A、1=B等等)

          位6       1= 文件未给勾勒副

          位12       1= 无继承

          位14       1= 在关闭时不安装日期/时间

          其余具备的位都为0。

          如果DX的位7置位,表明句柄为同装置句柄,同时,DX中之其余各位分

      别表示着如下含义:

          位0      控制高输入设备

          位1       1= 控制台输出设备

          位2       1= 空设备

          位3       1= 时钟设备

          位4       1= 特殊装备

        位5       1= 二进制模式

                    0= ASCII码

          位6       1= 如果设备为读,则回EOF

          位11       1= 网络假脱机

        位12       1= 未继承

          位13       1= 命名管道天文学

          其余各位都为0。

系统

Int 21h           功能44h   子功能0Bh                 版本2

                  设置共享重试计数

    可转用于在网络之中展开文件共享的重试参数

 

542页

    调用寄存器: AH          44h

                AL         0Bh

                CX          重试间的间歇

                DX          重试次数

    返回寄存器:进位标志清除表示成功

                进位标志置位表示来错

                AX          出错码

                            01h,无效功能

    注释:当当一个网络及采取多华PC机时,重试参数就遭遇文件锁定机制的

    控制。该机制而文件锁定是小的,并且在经过短暂的更新后会见获取排除。

因此,在展开第一糟拜访时,文件要是沿在时,那么如此同样种植内存的建制就

    会自动地重试以起于对拖欠公文之再度访问。

      有星星点点种参数和系统有关,这片种植参数分别是重试计数和重试间的间歇。不

    同的CPU以及不同的钟速度还对这种暂停的长短有显要的熏陶。

      通过加紧密计时循环将为实施的次数CX寄存器就会操纵暂停。由于

    无论什么时候调用计时循环,它都见面另行循环65536糟。因此,可以掌握地扣押

    出,在计算机未告知出错之前,进行走访的次数就重试计数。通过缺省,

    PAUSE=1,并且RETRY=3。

      可用这些参数来做微调系统,以使文件共享方面的题材减少至绝小。如果

    希望于丰富的文书锁定时间,那么以针对该文件进行重新同坏访时,可以拒绝暂停

    时间。但是,如果转了其他一个缺乏省值,那么通过恢复该少省来防护对另外

    程序的熏陶就是无会见发充分好之作用。

系统

Int 21h           功能44h   子功能0Ch                 版本3.2

                  面向句柄的通用I/O控制

当DOS版本3.2受到,设置或取用于字符类设备的更计数。在DOS的版本

3.3及重新胜似的本被,该意义方式贯彻代码页转换。在DOS版本5.0挨,该

效果还能够得与装显示方式。

调用寄存器: AH          44h

                    AL             0Ch

                    BX              句柄

                    CH              分类代码(设备项目)

                    DOS版本3.2

                                    05h,打印机

                    DOS版本3.3和重新强的本

                                    00h,未知

                                    01h,COMx

                                    03h,CON

543页

                                      05h,LPTx

                    CL                次级功能代码

                    DOS版本3、2暨重新胜似的版

                                      45h,设置双重计数

                                      65h,获取更计数

                    DOS版本3.3暨更胜之本

                                      4Ah,选择

                                      4Ch,准备启动

                                      4Dh,准备停止

                                      6Ah,询问选择

                                      6Bh,询问准备列表

                    DOS版本5.0

                                      5Fh,设置显示模式

                                      7Fh,获取显示模式

                    DS:DX          
指向重复计数字之指针(次级代码45h和65h)

                                     
指向参数片的指针(次级代码、4Ah、4Ch、4Dh、

                                      5Fh、6Ah、4Bh和7Fh)

返寄存器:进位标志清除表示成功

              AX            已传送的字节数

              进位标志置位表示来错

              AX          出错码

                          01h,无效功能

注解:重复计数是依赖有操作以住前所进行的次数。在DOS版本3.2饱受,

唯允许使用的凡分类代码05h(打印机)。

      在DOS版本3.3与重新胜之版中,该子功能的用已发生了改变,在

这些本被,它的用意是拍卖用于装备的代码页转换。其下属的次级功能而

下:

      ·准备启动(4Ch)来通知驱动程序作好通过子功能03h装载代码页字体

        的预备。一种植于新鲜之起步操作是“更新”操作,这种操作是经过将所

        有代码ID号设置为FFFFh而落实之。

      ·准备停止(4Dh),通知驱动程序,代码页字体装载工作早已形成。

      ·选择代码页(4Ah),选择要用的代码页。

      ·设置显示模式(5Fh),设置供设备使用的展示模式。

      ·询问已选的代码页(6Ah),从设备中确定有代码页的状态。

      ·询问准备列表(6Bh,确定设备上的代码页列表。

      ·获取显示模式(7Fh),获取装备所用的示模式。

      表16.14给起了DS:DX所依赖的参数块的概念。

 

544页

    表16.14参数块

字节                              含    义

    次级功能4Ah、4Dh、6Ah

   0-1                              跟随数据的长短

    2-3                              代码页ID号

    次级功能4Ch

   0-1                              标志

    2-3                              参数片(位于该点之后)的尺寸

   4-5                             代码页的页数

    ·                              代码页标志

    次级功能6Ah

   0-1                              参数块(位于该点之后)的尺寸

    23                              硬件代码页数

    ·                              硬件代码页标志

    n-n+1                         已准备的代码页数

    ·                              已备的代码页标志

    次级功能5Fh、7Fh

    0                              信息层(必须也零星)

    1                               保留

    23                              参数片(位于该点之后)的长

   4-5                             控制标志

                                    0=亮度关

                                    1=亮度开

    6                               显示模式

                                    1= 文本模式

                                    2= 图形模式

    7                               保留

    8-9                              颜色数目

    0A-0B                          
按象素计算的屏幕宽度(仅适用于图形模式)

    0C-0D                         
按象素计算的屏幕尺寸(仅适用于图形模式)

    0E-0F                            列

    10-11                            行

545页

系统

Int 21h           功能44h 子功能0Dh                 版本2

                  用于块设备的通用I/O控制

共有六种输入/输出功能可用以在片设备及拍卖非常意义

调用寄存器: AH          44h

                  AL             0Dh

                  BL              驱动器

                  CH              分类代码

                                  08h,磁盘驱动器

                  CL              次级功能代码

                                  40h,为片设备安装参数

                                  41h,写逻辑驱动器上之磁道

                                  42h,格式化并检验逻辑驱动器上之磁道

                                  46h,设置介质ID号

                                  60h,获取用于块设备的参数

                                  61h,读逻辑设备上的磁道

                                  62h,检验逻辑驱动器上之磁道

                                  66h,获取介质ID号

                                  68h,读来介质类型

                  DS:DX         指向参数的指针

返寄存器:进位标志清除表示成功

              进位标志置位表示来错

              AX          出错码

                          01h,非法功能

                          02h,无效驱动器

诠释:子功能0Dh是用来扩大该意义的习性,以便控制块设备。许多原始操

犯都不过通过这种IOCTL调用并循同等栽及设施无关之措施来开展支配。这同

子功能对那属下的诸一样起次级功能还开展独立的检察。

      对于其它一个指定的驱动器来说,必须首先调用次级功能40h(设置设备

参数),然后才能够调用其他的次级功能。

          次级功能40h:设置设备参数

      次级功能40h用一个参数片来反映块设置设备的漫天布局,其中包物

经纪字符、媒体类型等等。

546页

    参数片布局

字节偏移值                            含    义

      00h                               特殊的效应代码

      01h                               设备档次代码

      02-03h                             设备性能代码

      04-05h                             柱面数

      06h                               介质类型代码

      07-25h                           设备BPB

      26h-?                             磁道布局表

破例的效能代码

                位

                                          含    义

        76543210

. . . . . . . 0               DPB项是新的BPB

. . . . . . . 1               使用时BPB

. . . . . . 0.               使用参数片被的上上下下字段

. . . . . . 1.               只利用磁道布局字段

. . . . . 0. .                磁道中之逐一扇区可能出异的大小

. . . . . 1. .                磁道中的各个扇区大小都同一

  1. . .                    保留

    设备档次代码

      代码                      含    义

00h                    320/360K,5.25英寸的磁盘

01h                    1.2M,5.25英寸的磁盘

02h                    720K,3.5英寸的磁盘

03h                   单密度,8英寸的磁盘

04h                   双密度,8英寸的磁盘

05h                   固定磁盘

06h                   磁带驱动器

07h                   其他块设备

装备性能代码

          位

                                    含    义

76543210

    . . . . . . . 0             可走的存储器

    . . . . . . . 1             不可移动的存储器

    . . . . . . 0.             设备未指示更改行状态

    . . . . . . 1.             设备指示更改行状态

    x x x x x x . .             保留

547页

介质类型代码

代码                                含    义

    00h                                 1.2M,5.25英寸的磁盘

    01h                                  320/360K,5.25英寸的磁盘

BIOS参数块(BPB)布局

偏移值(字节)          字段(长度)            含    义

00h                    Word               每扇区的字节数

02h                    Byte               每簇的扇区数

03h                    Word               从扇区0开始之保留扇区数

05h                    byte                FAT的数目

06h                    Word               最特别之一干二净目录项数

08h                    Word               总扇区数

0Ah                    byte               介质描述吻合

0Bh                    Word               每FAT的扇区数

0Dh                    Word               每磁道的扇区数

0Fh                    Word               磁头数

11h                    Double word        隐藏扇区数

15h                    11 bytes           保留

    磁道布局表

长度                                    含    义

    word                            磁道中之扇区数

    Word                            磁道中之率先个扇区号

    Word                            磁道中之首先只扇区的轻重缓急

    word                            磁道中最后一个扇区号

    word                            磁道中最后一个扇区的深浅

          次级功能41h:写磁道

      写磁道功能允许以用于描述磁道的成套至关重要参数(磁头、柱面、扇区、扇

区数和多少的职务)说明。为了有利于计数,扇区数与柱面数还从0开始计算。

                                参数块

偏移值                              含    义

00h                                 特殊功效=0

01h-02h                            要采用的磁头号

03h-04h                            要运的磁盘柱面号

05h-06h                            第一个下的扇区

07h-08h                            要传递的扇区数

09h-0Ch                            指向数据传送缓冲区的指针

548页

          次级功能42h:格式化并检验磁道

      该功能格式化和验证磁道上的磁道,但每当以该意义时,必须指定要用

的柱面和磁头,余下来指定的内容均由驱动程序来处理。

                          参数片——格式化磁道

偏移值                                含    义

00h                             特殊功能=0

01h-02h                        要采用的磁头号

03h-04h                        要动用的柱面号

参数块——检验格式化状态

偏移值                              含    义

    00h                               特殊效果=1

    01h-02h                          要动的磁头号

    03h-04h                          要采取的柱面号

      说明:如果对特种意义字段进行状态检查,那么回的价值有如下几种植而

能:

          0= 受ROM BIOS支持,允许磁头/柱面

          1= ROM BIOS不支持

          2= 不允就指定的磁头/柱面

          3= 驱动器为空

          次级功能46h:设置介质ID号

      这无异于作用设置指定驱动器的顺序号、卷标和文件系统类型。

                              参数块

偏移值                                含    义

    00-01h                             信息层

    02-05h                           顺序号

   06-10h                            ASCII卷标

    11-18h                           文件系统类型

    “FAT12”                         12位的FAT

    “FAT16”                         16位的FAT

          次级功能60h:获取参数

      这无异于功力是次级功能40h的扩充。它利用及次级功能40h相同之参数块

格式来打驱动程序中收获有关设施的信息。

          次级功能61h:读磁道

      该功能将磁道读上参数块被之外存缓冲区。然后,通过描写磁道次级功能,

便只是把这种位置信息传递给驱动程序。

549页

参数块

偏移值                              含    义

    00h                             特殊效果=0

    01-02h                         要使用的磁头号

    03-04h                           要使用的磁盘柱面号

    05-06h                         第一单使用的扇区

    07-08h                         要传送的扇区数

    09-0Ch                          指向数据传送级冲器的指针

        次级功能62h:检验磁盘

    该意义实现次级功能62h中格式化/检验磁道操作的磁道检验操作有。

                            参数块

    偏移值                            含    义

00h                                特殊功效=0

01h-02h                          要运用的磁头号

03h-04h                          要运的磁盘柱面号

      次级功能66h:获取介质ID号

拖欠功能博得指定驱动器的顺序号、卷标和文件系统类型。

                          参数块

偏移值                              含    义

    00-01h                           信息层

    02-05h                         顺序号

    06-10h                          ASCII卷标

    11-18h                         文件系统类型

    “FAT12”                       12位的FAT

    “FAT16”                       16位的FAT

        次级功能68h:读出介质类型

    该意义返回指定驱动器的介质类型

                          参数块

偏移值                              含    义

    00h                             缺省标志

                                    0=不是欠省项目的介质

                                    1=缺省品种的介质

    01h                             介质类型

                                    2=720K磁盘

                                    7=1.44M磁盘

                                    9=2. 88M磁盘

550页

系统

Int 21h           功能44h     子功能0Eh                   版本3.2

                  获取逻辑驱动器映象

规定是管1独还是基本上个逻辑驱动器指定为某设备

调用寄存器: AH              44h

              AL           0Eh

              BL            驱动器

回到寄存器:进位标志清除表示成功

              AL            驱动器号

                            0= 只指定一个逻辑驱动器号

                            1=A,2=B,依此类推

              进位标志置位表示有错

              AX            错误代码

                            01h,无效功能

                            05h,访问给禁止

                            0Fh,无效驱动器

注解:由调用返回的教器号将通知用户:如果用于装备的逻辑驱动器标志

不停一个,那么应采取最后一个驱动器标志来做客该驱动器。

系统

Int 21h             功能44h     子功能0Fh                     版本3.2

                    设置逻辑驱动器映象

安用于访问下一个装置的逻辑驱动器名

调用寄存器: AH             44h

                AL         0Fh

              BL          驱动器号

返回寄存器:进位标志清除表示成功

                AL          驱动器号

                            0=只指定一个逻辑驱动器号

                            1=A,2=B,依此类推

                进位标志置位表示来错

                AX             出错代码

                            01h,无效功能

                            05h,访问为取缔

                           0Fh,无效驱动器

551页

诠释:在点滴单磁盘间开展文件复制时,两只磁盘可分别使用不同的逻辑设备,

可是,两者都得用和一个大体设备。当于对某个设备进行I/O操作时,如果

这个设备时未在使得器内,那么网会唤起改变磁盘。该功能允许在从来不相关

统提示的前提下强制进行磁盘切换。

      该功能通过安装下同样差或调用的叫器字母来引用设备。这样,DOS

不畏非会见唤起用户失去”Insert Disk”。同时,子功能0Eh确定用来访问该设施的极端

终逻辑驱动器的名字。

系统

Int 21h           功能44h     子功能10h                   版本5

                  询问IOCTL句柄

确定由装备句柄指定的设施是否支持特定的IOCTL功能

调用寄存器: AH            44h

                    AL              10h

                    BX              句柄

                  CH                分类代码

                    CL              功能代码

                    DS:DX        指向参数块的指针

回寄存器:        进位标志清除表示成功

                    AX              0

                    进位标志置位表示来错

                    AX               01h,不支持所用之功用

                                    05h,访问于禁

注解:设置参数片的目的是为供通用的IOCTL调用使用。如果设备将不干净

是否支持Qurey IOCTL,那么可用该功能来规定驱动程序是否支持指定的连片

故此IOCTL调用。最典型的场面是,在发生通用IOCTL调用之前,应用程序会

第一询问驱动程序。

系统

Int 21h           功能44h   子功能11h                   版本5

                  询问IOCTL设备

确定句柄指定的设施是否支持特定的IOCTL功能

调用寄存器: AH           44h

                  AL               11h

                  BX                句柄

                  CH                分类代码

552页

                  CL          功能代码

                  DS:DX     指向参数块的指针

    返回寄存器:进位标志清除表示成功

                  AX          0

                  进位标志置位表示有错

                  AX           01h,不支持所用底效益

                              05h,访问于禁

                              0Fh,无效驱动器

    注释:设置参数片的目的是为供通用的IOCTL调用使用。如果设备对支持

    Qurey IOCTL有疑问,那么即使可用该功能来规定驱动程序是否支持指定的连

    用IOCTL调用。典型的状况下,应用程序会当发生通用IOCTL调用之前,首

    先了解驱动程序。

        DOS 5.0支持如下几种效应:

            40h         设置设备参数

            41h         写逻辑驱动器上之磁道

            42h         格式化逻辑驱动器上的磁道

            46h         设置介质ID号

            60h         获取装备参数

            61h         读逻辑驱动器上的磁盘

            62h         检验逻辑驱动器上的磁道

            66h         获取介质ID号

            68h         读取介质类型

磁盘

Int 21h           功能45h                                 版本2

                  复制句柄

    提供一个初句柄,用于已经为辟的配备或者文件

    调用寄存器: AH          45h

                BX          文件句柄

    返回寄存器:进位标志清除表示成功

                AX          新句柄

                进位标志置位表示有错

                AX          错误代码

                            04h,无可用的句柄

                            06h,无效句柄

    注释:复制文件句柄,以便提供其他一个用来平文件之句柄。这有限个公文指针

 

553页

习以为常汇聚于一齐。如果走一个文本的文本指针,那么用于其它文件之公文指

针也会见跟着移动。

      该功能最常见的用途是挟持更新文件之目录项,且不见面招致多余的文书

开拓或关闭操作。在早于3.3底DOS版本中,这是唯一的如出一辙种植强制更新文件

目录项的办法。DOS版本3.3采用了初的效应68h,这种作用不仅会得同一

的事情,而且采用起来越爱。

磁盘

Int 21h           功能46h                                 版本2

                  强制复制句柄

每当平等之职位上,产生两独文本句柄引用和一个打开的文件。

调用寄存器: AH              46h

                BX          第一个文件句柄

                CX          第二单公文句柄

归来寄存器:进位标志清除表示成功

                AX          新句柄

                进位标志置位表示出错

                AX          错误代码

                            04h,无可用的句柄

                            06h,无效句柄

注:该功能的结果跟效能45h类似;都采用简单个文本句柄来引用和一个温婉

件,并且就半独句子柄同时倒。该意义最好关键的用是用以装备重定向操

作。通过如下步骤,就会起旁一个主次的内来支配装置重定向过程,并连接

正将装备返回到正规状态。

      1.以效益45h来复制要针对性那个进行双重定向的句柄。保存新的句柄,以便

          用于随后的还原过程。

      2.使用功能46h来进行重复定向,具体方法是快要“对该展开重定向”的个别

        个句子柄(复制后)分别放入CX和BX。

      当要回到正常状态时,只需要用重定向后底词柄放入CX,将效能45h返

转之复制句柄放入BX寄存器,即可再次调用功能46h来兑现即时等同目的。

      在调用寄存器内,如果CX中之词柄引用的凡一个开辟文件,那么在该功

能启动之前,首先应关闭这个文件。

磁盘

Int 21h           功能47h                                 版本2

                  获取当前目录

554页

    返回当前目录的圆路径名的ASCIIZ字符串,其中不包括驱动器名和倒斜

    杠(\)。

    调用寄存器: AH          47h

                DL          驱动器代码(0=缺省,1=A,如此类推)

               DS:SI        指为5单字节的临时缓冲区的指针

    返回寄存器:进位标志清除表示成功

                DS:SI      未变更,缓冲区中富含当前目录路径的

                            ASCIIZ串

                进位标志置位表示出错

                AX          出错代码

                             0Fh,无效驱动器

    注释:该意义返回当前目录的里程径名,其中未包括驱动器标志符或反斜杠

   
(\)。由于是于调用该意义时设置了驱动器代码,因而缺少驱动器标志符和倾斜

    杠是没错的。(如果想就此该功能返回的字符构成文件称,那么就得以文书称

    中长驱动器和开斜杠)。如果所采用的目录也清目录,则该意义返回的配

    符串产NUL(第一只字节0)。

        若以转移目录之前使用这同一力量,许多序就算能从中获益,这样,在次

    完成时,用户就是能回来回到初始目录。但程序员们必须小心,因为无效驱动器代

    码会招失败。要设置当前目录,最好用效应3Bh。

系统

Int 21h             功能48h                                     版本2

                    分配内存

分配供程序采取的内存块,并返一个针对该内存块头部的指针。

调用寄存器: AH              48h

              BX            所需要的节数(每节16字节)

返回寄存器:进位标志清除表示成功

              AX            已分配的片的起始段

              进位标志置位表示有错

              AX            出错代码

                            07h,内存控制块让磨损

                            08h,内存不够

              BX            如果该功能失败,则也最特别可用块的高低

注:返回的指针是块基地址(基地址为AX:0000h)中的段地址。由于总是

把有的内存都分配为COM程序,因而在由COM程序中调用该意义时,该

力量都见面破产,除非在进入COM程序时,该次都放出出了内存。(详细情况

555页

请见第3章节“动态的DOS”和第10回“程序和内存管理”。)

      在多任务环境中,进程所观看的内存顶部有或无是实际上的内存顶部。

DESQview和Windows之类的次序只分红给每个程序与程序信息文件被所

务求的半空中。

      如果得到空间的调用失败,该功能就是见面回去最酷可用内存块的大大小小。这样

的语,再同蹩脚发出请求超过这个内存空间的调用就会不负众望。EXEC装入程序功

克不怕是运这种技能将具备可用的RAM分配受COM程序的。首先,这种功

会把FFFFh装入BX,这样即便能请到1048560独字节的RAM(大于所有可

因而底RAM)。由于该结果是返回来错代码8,因而没有兑现其他检查。对效果

48h底调用应再相同不良,第一不行调整用经过BX返回实际可用的内存量,第二糟糕

调用才分配所待数的内存。

      如果要澄清楚RAM的多寡,也得以以您自己之顺序中使同一的技艺

技术(因为可用的RAM数量对任何程序不是保存的)。如果把BX设置也

FFFFh来使用效益48h,那么BX返回的价值就是可用之内存块数。

系统

Int 21h           功能49h                               版本2

                  释放内存

管内存块释放及DOS管理之外存池中(使得内存可供应其他程序行使)。

调用寄存器: AH            49h

              ES          要放的丘的段地址

返回寄存器:进位标志清除表示成功

              进位标志置位表示有错

              AX          出错代码

                          07h,内存控制块让磨损

                          09h,无效的外存块地址

注解:该意义一旦要放的外存块是成效48h所求的外存块。如果内存块

勿是法力48h所求的,那么该功能就是会见失败(如果有幸的言语),或者它见面招

先后在纵内存的长河遭到,或于另常驻内存的次序中冒出不可思议的荒谬。

因而会出现就好像题目是盖当系统通报顺序会放内存时,程序即使愿意因此

加以的地址引用指定的外存块,并把这同经过列为总内存分配方案的平等组成部分。

至于内存管理之现实性细节而参见第10段“内存管理”。

系统

Int 21h           功能4Ah                               版本2

                  修改外存分配

556页

    扩展或缩小先前为此力量48h分配的内存块。

    调用寄存器: AH          4Ah

                BX          按节计算的新请求块的深浅

                ES          要修改的丘的段地址

    返回寄存器:进位标志清除表示成功

                进位标志置位表示有错

                AX          出错代码

                            07h,内存控制块让磨损

                            08h,内存不够

                            09h,无效的内存块地址

                BX          可用的无比要命块大小(如果AX=08h)

    注释:程序可下这种效益调用来窜它从调用功能48h中获的内存块

    大小,或改动它自己的内存分配。由于COM程序于运转时能博得任何之内

   
存,因此,如果它希望能够履行(EXEC)其它程序的言语,就得调用这同一意义。

    EXE程序为用调用这种效果来放内存,除非已改了它们EXE标题中

    的MAXALLOC参数为要它呼吁的内存少于全部内存。第10回“程序与外

    存管理”十分详实地介绍了程序执行方面的内存管理状况,这里就不再多谈。

      该功能还时不时作为SETBLoCK功能。

系统

Int 21h           功能4Bh                                  版本2

                  执行顺序(EXEC)

以其它程序的操纵之下执行顺序

 调用寄存器: AH              4Bh

              AL          00,装载并推行顺序

                            01,装载但切莫实行顺序

                            03,装载覆盖程序

                            05,进入Exec状态

              ES:BX      指向参数块的指针

              DS:DX      指向程序说明的指针

              DS:DX       指向ExecState结果的指针,定义如下(唯一的

                            子功能代码为05h):

                            00h(字),保留得为0

                            02h(字),字节标志;位0=程序为一道EXE程

                            序,位1=程序是平道覆盖程序

                            04h双字),指向ASCIIZ程序名的指针(程序

557页

                          名受到可包括路径说明)

                          08h(字),用于新程序的PSP段

                          0Ah(双字),新程序的CS:IP

                          0Eh(双字),程序大小(包括PSP)

回去寄存器:进位标志清除表示成功。除CS和IP外的有着寄存器均让解除

              坏,其中包仓库的指针。必须把SS和SP保存在本地的一个

              CS可定址的职上,并且,只能以调用该意义前跟以该功

              能返下进展保存。

              进位标志置位表示有错

              AX          出错代码

                          01h,无效功能

                          02h,文件不找到

                          05h,访问于禁

                          08h,内存不够

                          0Ah,非法的环境

                         0Bh,无效的格式

注解:可于网被利用这种EXEC功能来施行顺序和治本覆盖。当系统完成

乍的主次(子进程)时,原始程序改过程)就不过还获得控制权。如果实进程使

就此的是传递返回代码的DOS终止功能,那么大进程就时有发生或从子进程那里接

收起退出代码。

    该功能还会载覆盖程序。覆盖程序会组成程序段还是数。在程序执行

暨挂操作间的基本点分在分配给程序的内存是网被的任意内存,而

蒙程序则让盛调用覆盖功能的顺序都拥有的内存中。而且,如果来自然

要,则当尽外程序之前,程序还答应放出内存(如满足COM程序的得

要)。

    对拖欠操作进行控制的关键途径是经ES:BX寄存器所负的参数块来上

施行之。表16.15列有了参数片的格式。

                      表16.15参数片格式

不巧移值字节      字段长度                内    容

    EXEC功能(AL=00h)

    00h               字                  指向环境块的段地址

    02h               字                  命令尾的偏移值

    04h               字                  命令尾的段子

    06h               字                  第一只FCB(偏移值5Ch)的偏移值

    08h               字                  第一个FCB的段

    0Ah               字                  第二只FCB(偏移值6Ch)的偏移值

    0Ch               字                  第二个FCB的段

558页

偏偏移值字节      字段长                  内      容

    Debug功能(AL=01h)

    00h               字                  指向环境块的段地址

    02h               字                  命令尾的偏移值

    04h               字                  命令尾的段子

    06h               字                  第一独FCB(偏移值5Ch)的偏移值

    08h               字                  第一个FCB的段

    0Ah               字                  第二只FCB(偏移值6Ch)的偏移值

    0Ch               字                  第二个FCB的段

    0Eh               字                  已装程序的SP

    10h               字                  已装程序的SS

    12h               字                  已装程序的IP

    14h               字                  已装程序的CS

    覆盖功能(AL=03h)

    00h               字                  指向覆盖装点的指针

    02h               字                 
适用于代码映象的重定位因子(仅适用于

                                          EXE文件)

      环境块是相同密密麻麻之ASCIIZ字符串,其作用是不过经它把环境信息污染

送给系统正履行的次。对于这些字符串,既而通过SET功能以它设置

当命令层,也足以当先后中内在地创造出来。通常状态下,这些字符串除了

包含系统及一定的变量外,还连COMSPEC变量(其中蕴蓄系统命令处理

先后COMMAND.COM)和PATH变量可尽的次序所存在的地方)。

      典型的环境块应是是法:

                              1               2            
3               4

                1234567890123456789012345678901234567890

                COMPEC=c:\COMMAND.COM* PATH =c:\DOS*.*

中星号代表NUL或零字节。如果条件块指针也零星。那么子进程就会延续和

父亲进程同的环境。在DOS版本3同更强之本子中,环境块内的最末尾一

个零后面跟随着发出一个双字节,该字节中蕴含一个字符计数和一个尾随其后

的ASCIIZ字符串,驱动器和着执行之次第文件的路线名就是是在这字符

串中。

      命令尾就是一个字符串,它成了一旦实行的下令后的命令行。该命令行

的格式为开端是一个单字节的长短计数,中间是字符串,结尾是回车,总长度

莫克超越128独字节。命令尾被保存于偏移量08h处的主次段前缀(PSP)中,

并且于登次之前,它所蕴涵的单发生128个字节。

      典型的授命尾是这样的:

559页

                            1               2             3            
4

                1234567890123456789012345678901234567890

                #/C CHAPT1.DOC@

内#是一个单数字字节,值吗14,@则代表一个单字节的回车符。

      按照这个方法装入的子进程能继承父亲进程的I/O文件,除非在文书打开

调用(功能3Dh)中,父进程显式地确定了无累。不过,标准文件仍然是开辟

的。如果对用于父进程的标准文件进行了双重定向,那么在用于子进程时,它们

会延续保留重定向。此外,父进程还能够重定向文件(参见功能46h)。

      在调用该功能时,值得警惕的是调用的次第。在任何EXEC功能的尽

过程被,系统还必要所有寄存器都叫修改了。因为拖欠意义的目的是为以

执行外一路程序。当EXEC功能返回时,只能使CS和IP是是的。在调用

前方,父进程至少须把SS和SP(还只是长要保留之任何寄存器)保存在可

经过CS段寄存器定址的位置被。在回时,可以把SS和SP恢复至各自的新

初始值,不过,必须于取缔中断的前提下进行还原操作,这样就不给被给恢复操

发停止以中途上,从而为便避免了拖欠体系出现非稳定之状态。

      只有在装有足够的内存来装目的程序时,EXEC功能才会获得成功,否

虽然它们就会见砸。在调用EXEC之前,汇编语言程序必须下效果4Ah释放

起所待之内存。而对此C程序,当它们启动时,它就是见面自由出多余的内存。关

被内存分配的详细情况,请参见第10章“程序与内存管理”。

      在DOS版本2面临,该意义为丁之记忆就是是疾病重重。这些问题的来源在

于程序员们思念经过将寄存器压入堆栈来保存其,由于有些版本不能够保证正

确地设置CPU方向标志,其结果会导致系统立即挂起。要想避免这些题材,只

用以调用EXEC之前,作为设置操作的同等片段,发出一道CLD命令。如果单独以

DOS版本3跟再强的本子中采用程序,则就一切都是不必要的,因为检查

工作早就交由DOS代码处理。

      有同一虽让人谢兴趣的消息说:IBM的DOS 2.x版中,该功能不是受东西

理地定位于IBMDOS. COM文件被,而是结合了COMMAND.  COM。IBM的

有的,这样做是为了节约空间;而另外的本子,如2.x体系虽然将欠意义作为

MSDOS.SYS的如出一辙部分,这是IBM从3.0本子才起来采取的法门(这时已经加大

有钱了将上述两种DOS文件并成完全的求)。

      调试程序使用子功能01h来拿程序装入内存,并受该次作好行准备。

Microsoft的DEBUG、SYMDEB和CODEVIEW调试程序以及Borland的

Turbo Debugger调试程序都采取这无异于成效。作为调试程序的平种植特殊用法

是,在回去时,把装程序的SS、SP、CS和IP寄存器值保存在ES:[BX+

0Eh]居于。与不公开的子功能00h和03h一样,子功能01h在回来时会见坏所

部分寄存器内容;因此,在能采取SS : SP和CS : IP值之前,程序员必须管

ES和BX寄存器值保存在能通过CS获取的地方。

(未完~~~待续。。。)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 亚洲必赢手机官网 版权所有