天文学DOS程序员手册

By admin in 天文学 on 2019年3月21日

终于到(十)了~~~

503页

                ES:DI       指向未更新且未打开的FCB的指针

    注释:该功效初期用来从命令行中析取文件,并以正确的格式来保存此文件

    以便打开FCB。为了贯彻那几个目标,可首先将指针指向文件名字符串,并随即

    将另三个指南针指向打算利用的FCB。没有须求运用别的项目标格式来保存

    FCB,单用内部存储器块就能相当可行地保存好它。

       
在享有版本中,分隔符无非正是之类二种:句号(.)、冒号(:)、分号(;),等

    号(=)、加号(+)、标记和空格。在DOS版本第11中学,还有以下二种标志也可用

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

        该成效再次来到四个用来所梦想的文书的FCB,那些FCB不仅尺寸合适而且

    是未打开的,同时,该功效还回去二个针对该文件的文本名之后第二个字符的

    指针(假设在多少个文本名之中的有个别文件名内分析命令行,那么该意义的效应

   
是很肯定的)。在执行该意义时,系统会自动地把星号字符,转换到3个或两个

    问号字符,以平息文件名或扩张名。

        由于该作用是一种FCB成效,它不恐怕与路径名包容,由此,在文书名中

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

    中提交的剖析证明来决定文件名的表达。

                            表16.4剖析控制标志

            位

                                    含    义

    76543210

    . . . . . . . 0         甘休分析,申明已找到文件分隔符

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

    . . . . . . 0.         假诺字符串中不含驱动器字母,则把FCB中的驱动

                            器ID置为0

    . . . . . . 1.         要是字符串中不含驱动器字母,则让FCB中的驱动

                            器ID保持不变

    . . . . . 0. .          如若字符串中不含文件名,就把FCB中的文件名设

                            置为8个空格(20H)

    . . . . . 1. .          假如字符串中不含文件名,就让FCB中的文件名保

                            持不变

    . . . . 0. . .          借使字符串中不含扩大名,就把FCB中的扩大名字

                            设置为二个空格字符

    . . . . 1. . .          若是字符串中不含扩展名,就让FCB中的扩充名保

                            持不变

      一旦采纳FCB效用,就可用该意义来不易地设置FCB。该意义的作用是

正确地格式化FCB、并且为其作打开的预备。要想利用FCB的打开或创办功

能,必须将ES中的指针移动到DS:DX上。

      假使所分析的靶子中不含违规的文件名,该功能就会回来指针ES:DI,

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

 

504页

时钟

Int 21h           功能2Ah                               版本1

                  获取系统日期

从系统中取得年、月、日以及星期几

调用寄存器: AH              2Ah

回到寄存器: CX             年份(一九八〇-2099)

                DH          月份(1-12)

                DL          日期(1-31)

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

                            DOS版本1.1或更高的本子中才面世

                            这一作用

    注释:该效率重返DOS总计出的日前系统日期。那只是对DOS内部时钟的

   
检查,而不是造访已设置的实时时钟/日历。依据惯例,若是系统安装有时钟/

    日历,那么在开发银行该体系时,也许人工地在系统中装置分隔时,就不得不从AU-

    TOEXEC.BAT文件中反省时钟或日历。

      有时候,总结日期的系统大概会安份守己难以预料的法子偏离准确的时日。此

    时系统日期或时刻就有也许未获取正确的更新,只怕经过有恐怕干扰或变更

    内部系统时间。该功效就会就此回到不科学的日子(并且,不访问时钟或日期

    芯片,是不容许检查到那些日期的)。

        影响该意义准确性的贰个科学普及错误表未来让系统连接跨越24钟头地运

   
行或不利用(例如,超越十24日)。由于只有当DOS检查和测试到已设置的零点标志时,

    日期才能往前进,并且唯有在调用有限的多少个功效之一时才能落实那么些历程,

   
因而,在不接纳系统时,日期不容许往前进。在下3回接纳该系统时,即便可检

   
测到零点(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检验标志;在写给磁盘时打开那种标志会引导此外的CTucsonC检查(周

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

507页

调用寄存器: AH              2Eh

                AL           00h,关掉检验标志

                            01h,打开查看标志

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

    再次回到寄存器:无

    注释:怎么样才能不通过验证磁盘写而证实它们是正确的呢?纵然能对具备写

    给磁盘的数目强制执行磁盘检验,可是,同常常的操作相比较,那种操作进程要

    花去两倍以上的岁月。在有点非IBM的BIOS分支系统上,甚至不协理那种操

    作。

        那么到底干什么不这么做呢?很明朗,是由于时间上的原由。在并未须要

纯属保障每一种磁盘写都毋庸置疑的时候,就应密闭检验标志。仅仅当面对13分人命关天

    的效率时,才有须求设置这一注解,但运用之后也应将其关闭。

        固然打开检查标志,也不可能绝对有限支撑所写的数额都以不错的,因为检察过

    程不是把所写的数量同扶助写的数量进行逐字节地相比而完成的。在这一过

    程中,系统等到形成1个周期才读出所写入的多寡,并通过磁盘控制器总计出

    CWranglerC值,然后再把计算出的CMuranoC同第①遍把多少写给磁盘时所总结出的值

    举办比较。

        这一经过无法保障数据在内部存款和储蓄器与磁盘控制器之间的传递时不会冒出任何

    错误;该进程只好表明控制器写给磁盘的值与用于总结出第3个CCRUISERC的值相

    等,然后再将一律总结进程重复二次。但是,由于大多数磁盘出错都会导致介

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

    毫无稗益。可是,对很重大的劳作如数据的存档传送并随着从硬盘中擦除该数

    据,就务须选拔唯一能担保相对准确的数码传送途径,即:把复制的数额与初

    始数据开始展览逐字节的比较。

        可用作用54h来规定检查标志的当下设置意况。

磁盘

Int 21h           功能2Fh                               版本2

                  获取DTA地址

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

    调用寄存器: AH        2Fh

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

    注释:缺省DTA是在程序段前缀(PSP)中位居偏移值80h处的二个装有

    126个字节的缓冲区。在实际应用中,那种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       2几人的种类号

    注释:对于直接与DOS打交道的程序员来说,知道DOS版本号是那3个有必

    要的,它同意程序员为已安装的系统版本定制造进程序。把该意义重回的本子号加

    上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.二二十五日增了部分效果,并允许扩张打开文件的数量,以及排除磁盘的文书

    缓冲区。在数据库程序中,使用那几个效应可使数据库更便于写。可是,没有

    DOS版本3.3的用户只要不能够找到任何途径来化解DOS早期版本中存在的

    各个题材,他们就只好步外人的后尘(并且有大概不是DOS未来版本的买

    主)。

        要是回去了DOS版本标志,那么位3置位评释MS-DOS是在ROM中运

509页

行;不然,申明它是在RAM中运作的,其余的位都未定义。假设回去了OEM

号,是与OEM相关的种类号都冒出在BL:CX中,即便没有行使OEM,BL:

CX的值为0。

      DOS版本号通过MS-DOS SE电视E酷威命令而设置的,与成效3306h再次回到

的版本号比较,那几个值恐怕有出入。

系统

Int 21h             功能31h                                   版本2

                    终止并驻留

结束程序并把控制权重临给父进度

调用寄存器: AH              31h

                AL        重临代码

                DX          要封存的内部存款和储蓄器大小(按节总结)

归来寄存器:无

诠释:终止并驻留实用程序是那样的广泛,以致大家很难找出有哪个系统不

使用一个或多个这么的实用程序。除了可用作诸如弹出式总括器、日历和便笺

(notepad)之类的实用程序之外,还可用TSRAV4来为顺序种类提供符合规律的子例

程服务。建成了一种可通过调用钦定的中止来激活的成效库之后,就能为此程

序提供专业的实用程序例程,而毋庸直接将例行程序与程序举办一而再。那种功

能压缩了模块的大大小小,并加紧了装载模块的长河。

      TSPAJERO的效应是终止程序的操作(像功效4Ch一样)但却不把程序占用的

内部存款和储蓄器再次来到到由DOS管理的内存库。这样便同意程序继续封存活性并且当它将

协调联结上某种中断时便能被再一次激活。例如,将某种程序统一上时钟中断时

就能激活该程序并在荧屏上展现出时钟。并且,假如按下有些键或许程序调用

了中断功效,同样也能激活该程序。

      该功用可代表最初出现在DOS版本第11中学的Int 27h TSRubicon效益。那种开头

的TSOdyssey功用只允许最多64K的内部存款和储蓄器供本身分享,并且不提供重回代码。而功

能31h则允许它和谐使用领先64K的内部存款和储蓄器并能控制再次回到代码,通过功效

4Dh,那种再次回到代码就能供程序的父程序使用。那样便同意批处理公事决定自

身内ELacrosseRO昂科雷LEVEL参数变量的实市价况。

      在开行程序时,那种TS君越功效就准备把经过DX寄存器请求的内部存款和储蓄器分配

给已驻留的先后。但该意义不处理通过调用作用48h而分红全经过的内部存款和储蓄器。功

能31不关闭程序打开的别样公文,而是让程序打开的文本一而再维持开拓状

态。通进度序段前缀(PSP)中某些未公开的区域就能把句柄效用与当前活动

的进度联系在协同。当该TS凯雷德功能不在活动的经过中时,它就会透过利用当

前挪动的进度所打开的句柄来引用文件。不过那种办法不适用于文件决定块

(FCB)作用,因为那种效用是透过进程本人的区域来缓冲的。(关于FCB的具

 

510页

体意况可参见第拾章“目录和文书”。)

      全部应用句柄作用来拍卖文件和配备(并且在弹时可能相反在移动时需

要使用句柄成效)的TS奥德赛,在运用句柄在此以前务必经过行使未公开的成效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

职能的处理进度中,超越58%光阴不对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-第22中学为修订版本号;别的的位都以保留位,

                            并且值为0

              DH            版本标志。位3置位,评释MS- DOS在ROM中

                            运营;不然注明MS-DOS在RAM中运作。位4

                            置位,表明MS-DOS在高位内部存款和储蓄器区(HMA)内

                            运维;不然申明MSDOS在正规内存中运转。

                            别的的位都当做保留,其值都为0。

诠释:通过SE电视机E酷路泽不能够更改MS-DOS的本子号

系统

Int 21h             功能34h                                     版本2

                    重返InDOS标志的地点

一种内部的DOS标志用于申明DOS什么日期在处理Int 21h功用

调用寄存器: AH              34h

回去寄存器: ES:BX       指向InDOS标志的指针

申明:一旦DOS进入了Int 21h作用,DOS就会增加InDOS标志,当DOS退

出时,它又会错过那种标志。 DOS和结束并驻留(TSTucson)实用程序都用那种标

志来分明DOS是不是在根本中并且是还是不是在拍卖Int 21h意义。当TS本田CR-V实用程序

规定DOS在处理任何职能时,它可接纳做以下两业务之一:

      ·继续这一经过,因为此时不须求采用Int 21h效果。

513页

          拒绝处理,因为须求用到Int 21h意义。

        值得注意的是操作系统内核不完全是可重入的。因而,当操作系统正处在

    内核中时一旦出现了刹车,服务例程就不能动用Int 21h效果来处理搁浅,因

    为对一种效应的调用或者与眼下的调用发生争辨。在那种状态下,稍很大心就

    会冲毁系统,但是,也断然没有供给去翻出中断处理程序来处理此时的暂停。

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

    用别的一些的代码,并且把InDOS标志用作幸免代码出错的信号。此时In-

    DOS标志还可确定保证正式的TSGL450程序如PEvoqueINT.COM及其类似的次第能健康

    运维。可是,那种标志也时常出现错误引导的场地。

        当DOS在等候键盘输入时,它在循环进程中是悠闲的,并且只要有字符

    输入进去它就会读取这个字符。因而,只要DOS尚处在等候状态,就能平安地

    使用文件处理及其他一些意义,固然InDOS标志提醒的是其他景况。为了让

    你了然可高枕无忧地选用那么些功用,DOS在它的输入循环中不间断地调用Int 28h

    (键盘劳苦循环)。TS途乐能收获Int 28h,那样,当Int
28h缺省时,它就变成一个

    指向IRET的指针,并且只要还在例行运维,它就会检查要做的工作。

        例如,假设按下某些热键运行了TS奥迪Q7之后,但它却发现DOS正在实践

    Int 21h效益,因为已安装了InDOS标志,此时,TSENCORE就会设置一种内部的标

    志来注解“小编已被调用,但自身不能够做其它交事务情”。无论几时,只要调用Int
28h,

    就能检查和测试到InDOS标志。反过来,假如设置InDOS标志,处理程序就会马上

    转向TSHaval部分以贯彻被呼吁的意义。

        在时钟计数时期,TS奥迪Q5仍可以够截取时钟中断,并检查InDOS和TS翼虎引用标

    志。那样做的目标是为着防止万一在第①回调用TS纳瓦拉时,出现Int 21h效应(而不是

    字符I/O成效)是移动的气象。因为即使出现这么的景观,时钟中断就能检查和测试

    到InDOS标志的破除以及TSLX570引用标志的置位。然后,时钟中断根据实际情

    况分明能够兑现的请求作用。

        可是,在DOS版本第22中学运用Int 28h依然会莫明其妙地导致系统冲毁。究

    其缘由在于版本2在今后得及把控制权调度给别的被呼吁的效果从前已先切

    换成它和谐的在那之中堆栈上;那样,当DOS在处理00到0Ch范围内的有些成效

    时(在调用Int 28h时,DOS大致都在处理这几个范围内的有些作用),借使出现

    了调用其它效能的景观,那么第一个仓库就会切换出来,其结果是磨损了开班

    功能调用所需求的音信。

        幸免的主意12分简易但却极有意思:即透过操纵DOS的重中之重出错

    (CritErr)标志,令DOS相信它正值处理一种重点的荒唐。在调用某些意义

    此前,先安装CritErr标志能强迫DOS改变用它和谐的里边堆栈。但在退出该

    成效之后,必须将这一标明恢复生机到它的早先值。

        在DOS版本3中,系统在拓展任何堆栈切换在此之前,首先修改DOS调度代

    码以检查和测试起效果的成效;倘使调用程序请求那么些功能中的任何1个DOS都会

    使用调用者本身的库房,从而可制止出现难点。在DOS版本4中,那种调度代

 

514页

码仍然维持未变。

      CirtErr标志只是1个字节,它标志DOS已境遇了惨重失误的情景,并且

正值处理Int 24h(关键出错)处理程序例程。为了让那种处理程序尽或许地应

    用到越来越多的DOS功效中去,就可设置CritErr标志并致使DOS调度代码以使

    用备用的内部堆栈而不是常常的库房空间。尽管调度代码的点子与完全可重

入的编码格局不一致,但诸如此类做能同意有限的效益重新使用调度的代码。

      在本子2至版本4之内的拥有版本中,CirtErr标志与InDOS标志是毗邻

    的。遗憾的是,在版本2和版本3里头,CritErro标志的职位出现了改观。在版

    本第22中学,它是置身紧挨在InDOS标志之上的二个字节,而在本子3和版本4

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

    注意:若从Int 28h处理程序中实行调用,该功用就会导致现身部分标题。该

          功用的没错用法应是在它成为常驻功效在此之前,先安装TSLX570。基于这一

          点可选用全数的DOS功效来分明适用于CritErr的不易地方。使用那

          种效能可获得和封存InDOS标志的地点,显著DOS版本号,并基于

          必要相应地增多或消除CritErr标志,并把该标志的地方保存在1个

          单独的指针内。

      那样,当TS中华V弹出时,它就能运用它本身的InDOS指针以显著DOS是

    否为移动的,并且只要有必不可少,它还可用它和谐的CritErr指针来得到该标志

   
的此时此刻值。然后将该值保存起来,并设置CritErr标志以强制行使备用的仓库、

    初步处理任何急需处理的业务,并在脱离以前复苏起来的标志值。

系统

Int 21h           功能35h                                 版本2

                  获取中断向量

得到用于钦点中断的中止处理程序地址

调用寄存器: AH              35h

              AL            中断号

重临寄存器: ES:BX       指向中断处理程序的指针

诠释:对某些钦点的暂停来说,中断处理程序地址即便是相对可用的,然则,

该意义却是获取中断向当前设置的绝无仅有可相信的路子。该功用可保障顺遂地完

成获取工作并为向量再次来到几个可信赖的值,其余的程序例如终止驻留(TS卡宴)实

用程序则可在该作用顺遂地回去了值之后更改这一中断向量。当单用户、单任

务操作的系统出现在该效能的采纳范围内时,上述进度却会发出。

      当设置一道程序以便从有个别中断处理起来工作时,就应采取功用35h来

鲜明该中断的伊始设置,以便在成功工作时可将该中断还原。在做那项工作时

不能不密切,因为有或者出现与TS本田UR-V或其余中断处理程序发生冲突的图景。如

515页

果能记住某此中断值,并且随着TS奥迪Q5的启用而变更了这一个值,那么就要以采

用一种能禁止该TSENVISION的法门来替换出这一停顿。

      为了防止出现顶牛,应直接打算复苏的中断向量同程序最初在该向量中

设置的值举办相比较。假设发现那些值不一致,那么注明自从保存了那个值以

后,其余的程序已修改了那一个值,并且此时已心中无数安然地贯彻复苏操作依旧不

能有惊无险地从内部存款和储蓄器中撤走程序。假诺当前值与初始值相适合,就能够安全地把中

断恢复生机到其开头值。

磁盘

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/加在设备名的前头

    注释:设备可用性标志(仅仅在本子第22中学运用)控制一种与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设计的顺序必

    须能在国际性的安装江苏中华工程集团作。该意义的功能是打招呼顺序对各种用于呈现音信

    的国家参数应各自采Nash么样的显现情势。例如,日期格式类型的国家参数用

    字节0和1拓展编码。

        当该意义博得了与国家有关的消息时,它就会透过这种新闻再次回到多少个指

    向三十一个字节的缓冲区的指针。在DOS版本3以及更高的本子中,该意义还可

    用来设置供别的程序行使的国家消息。

        国家代码经常为国际性的对讲机前缀代码。一些较优异的代码(例如,

    American 萨姆oa为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=在货币前边的标记,间隔2个空格

                                       
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字符串来命名的,个中能够分包驱动器以及路径标识符。

    该效能重回的是拾伍位的文本句柄。文件句柄用于进一步对文本进行走访。新

    创造的文本都有文件属性,这一品质平时被安装在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

                    打开文件(句柄)

打开钦定的文书并再次回到1个可用来引用该打开文件的文本句柄(1多少人的数

字)。

调用寄存器: 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版本第22中学,该成效只使用寄存器AL中的0-3位,别的的位都不能够不

要安装为零。在DOS版本3以及更高的本子中,由于装载了文件共享软件,

AL寄存器中又有四个位可供其余进度使用(位4-6,用于共享情势,位7为继

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

02h(驱动器未准备好)。

      假如把后续地方为1,就会使得被打开的文件成为打开该文件的经过的

专用文件。若继承位为0,打开文件就可供自该文件被打开后而涌现出的其余

进度使用。固然文件句柄为子进度所继承或被有些进度复制过,那么这么些子进

程(或进度)也就三番五次了该文件句柄的有所文件共享模式。

      对现身在DOS版本3左右编写的绝一大半DOS软件来说,包容格局(把位

37置为零)只是一种家常方式。只要软件在单个工作站上运转,文件访问过

程中就不汇合世争论。但随着联网软件的应用以及文件共享成为实际,包容模

式已不再符合举办文件决定了。

      要想在互连网环境中同其余程序一道工作,程序就得在开拓调用进程中使

用共享形式,以便能在既定的编制程序职分所须要的范围条件下进展走访。

      日常情状下,应在合作格局中使用FCB来打开文件,除非是为了只读访

525页

问而开辟文件。在那种情景下,就不得不在取缔写的共享情势中展开文件打开操

作。同时,通过句柄成效来为只读访问打开文件的操作也应在检查禁止写的共享模

式中进行。别的具有包容访问方式都将禁止到全部文本访问甘休之后才实行

操作。

      为了科学地应用该功效,程序员必须熟习文件所供给的拜访,并精通该文

件暗示出的各样非限制性的写访问。可能的形式有如下二种:

      ·禁止读/写。无论是在当前机械上也许在同等互联网上的别样机器上,在

        那种格局下开辟的文本无法被其它程序(或当前先后)再1遍打开。为

          了方便人民群众控制面向重点创新的数据库操作,那种类型的造访是很有必不可少

        的。

        ·禁止写。对在那种方式下开拓的文件,别的任何程序都不能够将其打开

        来读。

        ·无禁止行为。没有禁止任何程序对此文件的拜会(读或写)。

      在网络环境中,值得令人注意的是对数据文件的八个程序的拜访。当多道

程序试图同时更新同一文件记录时,就会招致数据库出错。本书只介绍了差别

的程序之间应运用什么样的不二法门来协调文件访问。由此,要想进一步询问那种

协调机制,还应查看一些有关数据库或操作系统的书本。

磁盘

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,无效句柄

诠释:使用文件句柄作用来把多少写入文件是一件13分不难的行事,只需指

定文件句柄,字节数和指向数据缓冲区的指针。接着,文件句柄功用把钦赐字

节写入文件中的当前职务。

      寄存器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,无效句柄

证明:该意义的功能是把文件读/写指针调整到指向3个新的职分,那些新位

置是通过偏离文件的起来,末尾或当前职务的离开来总括的。能够把那种偏移

值钦命为三个叁九位的数字(钦赐的界定可径直到达(4096M)。在本子4事先,

还不容许在实操中利用那种大小的公文,因为操作系统限制用于单个磁

盘字的量最大不行超过32M。在本子4中,那种范围被撤废了。当移动文件指

针时,应让该指针指向下2个从文件中读出多少或把数据写入文件中的地方。

      对该意义而言,较为实用的章程不是安装文件的职位,而是规定文件的大

小,可通过把寄存器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.第88中学列出了文件属性的各类设置值。

                表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粗略地介绍了那二十一个子功用,以及专业使用那几个子

    功用的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成效是2个广义的装置一驱动程序接口程序,其目标不是传递数

据,而是与驱动程序通讯,并告知驱动程序怎么办事。

系统

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等等分别代表第①个至第n

                                    个块驱动程序)

. . . . . . . . . 0. . . . . .      文件已被写入

. . . . . . . . . 1. . . . . .      文件没有被写入

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

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

. 1. . . . . . . . . . . . . .     
设备能够处理通过于功效02h和03h传送的控

                                    制字符串。但只好读取该位而不可能设置它

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

      用于字符设备的位5是3个万分有用的音信位。当UNIX程序员们在处

理终端设备时,他们尤其纯熟上边的五个术语,即:“修改的(Cooked)情势”和

“原始格局”。在COS中,修改的(cooked)情势代表处理Ctrl-C、Ctrl-P、Ctrl-

Q、Ctrl-S和Ctrl-Z,以及在检查和测试到回车符而不是点名数量的字符时所终止的

输入。修改的格局是一种全编辑输入方式,许多参考手册将它描述为唯一的控

制台输入情势。

      在原有方式中,所运用的I/O系统驱动程序忽略了这一个字符的奇特含义,

同时直接等到接受了整套规定的字节数据时才从读操作中回到。无需经过I/

O系统或DOS的演说,驱动程序可将富有接受到的字节直接传送给应用程

序。类似的分别也存在于出口进度上(标记字符的进展、换行前回车符的机关

并发、以及等等)。

 

534页

      BX寄存器中的句柄必须访问打开的文件或配备。若是不那样的话,该功

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

      在回去时,DX寄存器中的位8-1陆分别对应于设备驱动程序属性字节中

的如出一辙位。(关于属性字和驱动程序标题标具体情形可参见第叁2章“设备驱动

程序”)。

系统

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,无效的数额

注明:可由此决定字符串把驱动程序的任意新闻传递给调用程序。在那里,任

意音讯指的是驱动程序中可用来协理系统的种种音讯;并且这个消息不设有

别的正式的格式和内容。驱动程序响应请求的艺术是让请求直接抵达驱动程

序上。第壹2章“设备驱动程序”详细介绍了决定字符串的景况,对此有疑点的

读者能够参考第③2章的内容。

      子成效00h的位0Eh注解驱动程序是提供照旧响应控制字符串。

系统

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

                    设备IOCTL写

把控制字符串的音讯传送给驱动程序

    调用寄存器: AH          44h

536页

     AL           03h

                    BX            句柄

                    CX            要传递的字节数

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

        再次来到寄存器:进位标志清除表示成功

                    AX            已传送的字节数

                    进位标志置位表示出错

                    AX            出错码

                                  01h,不合法功用

                                  05h,访问被禁止

                                  06h,无效句柄

                                  0Dh,无效的数目

       
注释:有关驱动程序的随机音信都可放入三个说了算串中而传递给驱动程序。

       
那种音讯能够是驱动程序所帮忙的任何音信;对此新闻或新闻的内容的格式,

       
无其余正规可言。驱动程序响应请求的艺术同样完全依靠于该驱动程序本身。

       
第一2章“设备驱动程序更详尽地研商了决定串的始末。本子功用经常用来向

        驱动程序传递配置消息,如Porter率、字长度等。

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

系统

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

                    块驱动程序IOCTL读

从2个块驱动程序(磁盘类型)中读取控制新闻

调用寄存器: AH              44h

              AL           04h

              BL            驱动号

              CX            要得到的字节数

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

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

              AX            传送的字节数

              进位标志置位表示出错

              AX            出错码

                            01h,无效功用

                            05h,访问被取缔

                            06h,无效句柄

                            0Dh,无效数据

537页

注明:子功能04h能通过决定字符串从块驱动程序中写给关于块驱动程序的

    任何音讯。那种信息既可以是状态音讯,也得以是驱动程序中可用来匡助系统

    的各个音讯。对那些音信而言不存在别的格式或内容上的科班。

      驱动程序响应请求的格局是让请求直接抵达该驱动程序上。第壹2章“设

备驱动程序”中详细介绍了决定字符串的事态,那里就不再复述。在这一子功

    能的平凡使用中,还关系到块设备操作的准备干活。假诺是为着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通过操纵字符串把有关块驱动程序的其余音信传递给该驱

动程序。那么些新闻中得以回顾命令或驱动程序中可写来帮助系统的各个音讯。

对那几个消息而言,不设有任何格式或内容上的正规。

      驱动程序响应请求的点子是让请求直接抵达驱动程序上。关于控制字符

串的详细情状可参见第叁2章“设备驱动程序”,那里就不作介绍。其它,这一子

作用在事实上行使中还起着非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= 驱动器使用三16个人扇区定址

      位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,表明所选用的

      功用失效。

        在编制程序进度中,最棒不要采取那种效益。因为不管使用何种形式来编写程

    序,所编写出来的主次都应该与互连网上其余3个特殊设施的地点无关。可是,

     
即便使用这一子效能,一些未公开的效用还是能够科学地操作,它们只与本地句

     
柄产生功能,而不可能经过中远距离句柄来行使它们;如若在程序中供给求用以那种

      未公开的效果,那么在使用子作用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寄存器就能控制暂停。由于

    无论怎么着时候调用计时循环,它都会再也循环655叁17次。由此,能够清楚地看

    出,在计算机未报告出错此前,实行走访的次数便是重试计数。通过缺省,

    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版本三 、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.第22中学,

唯一允许行使的是分类代码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用2个参数块来反映块设置设备的任何布局,其中蕴涵物

理字符、媒体类型等等。

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                            磁道中的第3个扇区的高低

    word                            磁道中最后二个扇区号

    word                            磁道中最后3个扇区的轻重

          次级功能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

                  获取逻辑驱动器映象

规定是把一个还是多少个逻辑驱动器钦定给有个别设备

调用寄存器: AH              44h

              AL           0Eh

              BL            驱动器

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

              AL            驱动器号

                            0= 只钦赐1个逻辑驱动器号

                            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,无效句柄

    注释:复制文件句柄,以便提供另1个用以同一文件的句柄。那八个文件指针

 

553页

平日集聚在同步。假使移动1个文件的文件指针,那么用于别的文件的文书指

针也会跟着移动。

      该功能最普遍的用处是强制更新文件的目录项,且不会造成多余的公文

开拓或关闭操作。在早于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中的句柄引用的是2个开辟文件,那么在该功

能运营此前,首先应关闭这几个文件。

磁盘

Int 21h           功能47h                                 版本2

                  获取当前目录

554页

    再次回到当前目录的总体路径名的ASCIIZ字符串,个中不包罗驱动器名和反斜

    杠(\)。

    调用寄存器: AH          47h

                DL          驱动器代码(0=缺省,1=A,如此类推)

               DS:SI        指向多少个字节的一时缓冲区的指针

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

                DS:SI      未改变,缓冲区中包涵当前目录路径的

                            ASCIIZ串

                进位标志置位表示出错

                AX          出错代码

                             0Fh,无效驱动器

    注释:该意义重返当前目录的路径名,在那之中不包罗驱动器标志符或反斜杠

   
(\)。由于是在调用该意义时设置了驱动器代码,因此贫乏驱动器标志符和斜

    杠是天经地义的。(假使想用该意义重临的字符构成文件名,那么就务须在文件名

    中添加驱动器和始发斜杠)。要是所使用的目录为根目录,则该意义重返的字

    符串产NUL(第多个字节0)。

        若在改动目录以前使用这一成效,许多主次就能从中受益,那样,在程序

    实现时,用户就能再次回到到早先目录。但程序员们必须小心,因为无效驱动器代

    码会造成破产。要设置当前目录,最佳用效应3Bh。

系统

Int 21h             功能48h                                     版本2

                    分配内部存款和储蓄器

分红供程序行使的内存块,并回到3个针对该内存块底部的指针。

调用寄存器: AH              48h

              BX            所需的节数(每节16字节)

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

              AX            已分配的块的初步段

              进位标志置位表示出错

              AX            出错代码

                            07h,内部存款和储蓄器控制块被毁掉

                            08h,内存不够

              BX            假设该意义战败,则为最大可用块的深浅

诠释:重临的指针是块集散地址(营地址为AX:0000h)中的段地址。由于总是

把持有的内部存款和储蓄器都分配给COM程序,因此在从COM程序中调用该意义时,该

效果都会退步,除非在进入COM程序时,该程序已释放出了内部存储器。(详细情形

555页

请见第贰章“动态的DOS”和第八章“程序和内部存款和储蓄器管理”。)

      在多职责环境中,进程所见到的内部存款和储蓄器顶部有或者不是实际的内部存款和储蓄器顶部。

DESQview和Windows之类的程序只分红给种种程序与程序新闻文件中所

渴求的空间。

      若是得到空间的调用战败,该作用就会回去最大可用内存块的大大小小。这样

的话,再三遍发出请求当先这一个内部存款和储蓄器空间的调用就能不负众望。EXEC装入程序功

能正是接纳那种技术把拥有可用的RAM分配给COM程序的。首先,那种功

能把FFFFh装入BX,那样就能请求到10485六十五个字节的RAM(大于全体可

用的RAM)。由于其结果是回来出错代码8,因此没有完结别的检查。对效益

48h的调用应重新一遍,第壹次调用经过BX再次回到实际可用的内部存款和储蓄器量,第3回

调用才分配所需数量的内部存款和储蓄器。

      如果希望澄清楚RAM的多寡,也足以在您本身的次序中利用相同的技

术(因为可用的RAM数量对其余程序不是保存的)。假设把BX设置为

FFFFh来使用作用48h,那么BX重回的值正是可用的内部存款和储蓄器块数。

系统

Int 21h           功能49h                               版本2

                  释放内部存款和储蓄器

把内部存款和储蓄器块释放到DOS管理的内部存款和储蓄器池中(使得内部存款和储蓄器可供别的程序选取)。

调用寄存器: AH            49h

              ES          要自由的块的段地址

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

              进位标志置位表示出错

              AX          出错代码

                          07h,内部存款和储蓄器控制块被毁掉

                          09h,无效的内部存款和储蓄器块地址

诠释:该成效一旦要释放的内部存款和储蓄器块是作用48h所请求的内部存款和储蓄器块。就算内部存储器块

不是法力48h所请求的,那么该意义就会破产(假诺幸运的话),或许它会促成

程序在假释内存的进度中,或在其余常驻内存的程序中出现不可捉摸的不当。

因而会产出那类难点是因为当系统通报顺序会释放内部存款和储蓄器时,程序就期待用

加以的地方引用钦定的内部存款和储蓄器块,并把这一经过列为总内部存储器分配方案的一部分。

有关内部存款和储蓄器管理的切实可行细节可参见第8章“内部存储器管理”。

系统

Int 21h           功能4Ah                               版本2

                  修改内部存款和储蓄器分配

556页

    扩展或裁减先前用效应48h分红的内部存款和储蓄器块。

    调用寄存器: AH          4Ah

                BX          按节总结的新请求块的大小

                ES          要修改的块的段地址

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

                进位标志置位表示出错

                AX          出错代码

                            07h,内部存储器控制块被毁坏

                            08h,内部存款和储蓄器不够

                            09h,无效的内部存储器块地址

                BX          可用的最大块大小(倘使AX=08h)

    注释:程序可采用那种功能调用来修改它们从调用功用48h中获得的内存块

    大小,或改动它们自身的内部存款和储蓄器分配。由于COM程序在运作时能赢得任何的内

   
存,由此,借使它们希望能够推行(EXEC)别的程序的话,就得调用这一效率。

    EXE程序也亟需调用那种成效来刑满释放内部存款和储蓄器,除非已修改了它们EXE标题中

    的MAXALLOC参数以使它们呼吁的内部存款和储蓄器少于全体内部存款和储蓄器。第九歌“程序和内

    存管理”十二分详细地介绍了程序执行方面包车型大巴内部存款和储蓄器管理处境,这里就不再多谈。

      该效用还平时作为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               字                  第3个FCB(偏移值5Ch)的偏移值

    08h               字                  第一个FCB的段

    0Ah               字                  第2个FCB(偏移值6Ch)的偏移值

    0Ch               字                  第二个FCB的段

558页

偏移值字节      字段长度                  内      容

    Debug功能(AL=01h)

    00h               字                  指向环境块的段地址

    02h               字                  命令尾的偏移值

    04h               字                  命令尾的段

    06h               字                  第3个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以及更高的本子中,环境块内的最末尾一

个零前边跟随着有1个双字节,该字节中带有3个字符计数和一个跟随其后

的ASCIIZ字符串,驱动器和正在实施的主次文件的路线名正是在那些字符

串中。

      命令尾正是四个字符串,它整合了要执行的下令之后的命令行。该命令行

的格式为发端是一个单字节的长度计数,中间是字符串,结尾是回车,总市长度

不可能跨越1三十多个字节。命令尾被保存在偏移量08h处的程序段前缀(PSP)中,

并且在进入程序在此以前,它所包罗的唯有1三十个字节。

      典型的一声令下尾是那样的:

559页

                            1               2             3            
4

                1234567890123456789012345678901234567890

                #/C CHAPT1.DOC@

中间#是1个单数字字节,值为14,@则代表3个单字节的回车符。

      遵照这些主意装入的子进度能继承父进度的I/O文件,除非在文书打开

调用(成效3Dh)中,父进度显式地鲜明了不连续。可是,标准文件照旧是开拓

的。纵然对用于父进度的标准文件实行了重定向,那么在用来子进程时,它们

能持续封存重定向。此外,父进度还是可以重定向文件(参见成效46h)。

      在调用该效能时,值得警惕的是调用的一一。在任何EXEC功用的推行

进度中,系统都必须假定全体寄存器都被改动过。因为该意义的指标是为着运

行另一路程序。当EXEC效率再次来到时,只好倘诺CS和IP是情有可原的。在调用

前,父进度至少必须把SS和SP(还可拉长希望保留的此外寄存器)保存在可

通过CS段寄存器定址的地点中。在回来时,能够把SS和SP苏醒到个其他初

始值,可是,必须在取缔中断的前提下进展还原操作,那样便不致于让苏醒操

作结束在半路上,从而也就制止了该种类出现不安宁的景观。

      唯有在装有丰硕的内部存款和储蓄器来装载目标程序时,EXEC功能才能获得成功,否

则它们就会破产。在调用EXEC以前,汇编语言程序必须选用效果4Ah释放

出所急需的内部存款和储蓄器。而对此C程序,当它运行时,它就会释放出多余的内部存款和储蓄器。关

于内部存款和储蓄器分配的详细情状,请参见第⑧章“程序和内存管理”。

      在DOS版本第22中学,该意义给人的回想正是毛病重重。这个题材的来源于在

于程序员们想通过把寄存器压入堆栈来保存它们,由于有个别版本不能确认保证正

确地设置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 亚洲必赢手机官网 版权所有