现在的位置: 首页 > 综合 > 正文

DOS程序员参考手册[15E]

2013年09月08日 ⁄ 综合 ⁄ 共 17165字 ⁄ 字号 评论关闭

452页
    返回寄存器:进位标志清除表示成功
                AH          00h,成功
                进位标志置位表示出错
                AH           84h,写给CMOS时出错
                            85h,CMOS区域已满
                            86h,非法的BIOS调用
    注释: EISA总线计算机是在ISA总线计算机基础上的扩展,也可用它来替
    代几年前由IBM推出的MCA总线的计算机。该功能供EISA配置例程使用。
    它允许把配置信息块写给扩展CMOS区域。若使用实用程序的主程序在32
    位模式(CS为32位)下运行,那么在调用此功能时,应该把AH的值置为
    83h,并且必须让DS:ESI指向数据区。
        该功能主要用于系统配置软件,应用程序不能使用它。EISA系统配置以
    及建立过程的讨论超出了本书的范围。
键盘
Int      16h              功能    00h
                          读取键盘字符
从键盘缓冲区中返回ASCII值和扫描码。
调用寄存器: AH              00h
返回寄存器:  AH             键盘扫描代码
              AL             ASCII字符代码
注释:该功能可从键盘缓冲区中读取单个字符并返回该字符及其扫描码,在
编写一种需要用热键来激发其操作的TSR时,往往用到这一功能。只须监视
对该中断的请求就能捕获热键信息并可立即作出相应的应答。键盘缓冲区通
常位于0040:001Ah处。
      在按键并接着返回键盘扫描码和该键击的ASCII代码之前,该功能一直
处于等待状态。若按下的键没有特定的ASCII代码,则返回值0。(例如箭头键
和功能键就没有特定的ASCII代码。)
      虽然Ctrl、Alt和Shift键自身并不返回代码,但它们能修改其它按键以产
生独一无二的代码(如何确定这些键的状态,可参见Int 16h,功能02h)。
      下面这两种特殊的按键- CtrL-Alt-Del(同时按下并按住Ctrl、Alt和
Del键)和PrtSc(同时按下并按住Shift键和PrtSc键)没有任何返回信息。
BIOS能识别这两种特殊的键击,并立即把控制权传送给其它的中断例程。
      当在数字小键盘上敲入ASCII代码时,若按住Alt键,该功能便允许键入
任意字符。例如,在敲入156的同时按住Alt键,便可返回扫描码156。若敲入
的数字大于256,则所返回的代码为模256的余数(用所键入的数除以256;返
453页
    回的代码为余数)。
键盘
Int      16h              功能    01h
                          读取键盘状态
    检查是否能得到一个按键,如果能得到,则返回相应的ASCII代码和扫描码。
    调用寄存器: AH          01h
    返回寄存器:零标志清除(键等待)
                AH          扫描码
                AL           ASCII字符代码
    注释:与Int 16h,功能00h不一样,该功能只是粗略地检查一下键盘并立即
    返回。若按键已经准备就绪,该功能就会清除零标志并返回该按键的ASCII
    代码和按键扫描码。如果没有要处理的按键,该功能就设置零标志。如果某个
    按键无特定的ASCII代码,则以返回值0来表示(例如,箭头键和功能键没有
    特定的ASCII代码)。
        虽然,CtrL、ALt以及Shift键并不返回相应的代码(如何确定这些键的状
    态,可参见功能02h)。特殊的CtrL-ALt-Del和PrtSc按键没有返回信息,但它们
    可导致立即产生其它中断。
        如果在敲入相应的3位数代码号时按住Alt键,便可键入任意的ASCII
    代码。例如,在敲入156时按住ALt,便会返回扫描码156。如果敲入大于256
    的数字时,所返回的是模256的余数(用键入的数字除以256,返回的代码就
    是剩下的余数)。
        像其它的中断处理程序一样,Int 16的功能01h也不是以IRET指令来
    结束的,相反,该功能使用的是RET指令,外加一个能从堆栈中清除剩余字节
    的功能选项。通过这种返回方式,该功能就可用零标志作为返回标志。说不清
    楚程序员们为什么要这样做,但这选择是正确的。或许这样做的用意是为了模
    仿旧的CP/M键盘状态功能,这一功能的操作方式与该功能很相似。
键盘
Int      16h              功能    02h
                          返回键盘标志
    返回指示Shift等键状态的状态字节。
    调用寄存器: AH            02h
    返回寄存器: AL            ROM BIOS的键盘标志字节
    注释:该功能从BIOS状态寄存器(保存在内存中0000:0417h位置)中返回
    键盘触发器和Shift键的状态。
454页
      特殊的键组合能成为特定操作的理想触发器。在旧的程序中,常常用Es-
cape键(Esc)来摆脱应用程序的控制。对那些不能取消的操作来说,Esc并不
是一种安全的选择,但是,在实际操作中太容易按下该键了。为了防止意外地
    碰动了这个键,应该在程序发现按下了Esc键时,必须马上询问这么一个问题
    “Are you sure?”(你肯定要这样吗?)”。当然也可以选定一个不易碰下的组合
键,如Ctrl-左Shift-右Shift。只是应十分小心不要使用双指一齐按的键或其它
    不常用到的特性。
      表15.31显示了从此功能所返回的AL寄存器中各个位的含义。
                        表15.31 BIOS键盘状态标志
                位
                                    含    义
        76543210
      . . . . . . . 1             已按下右Shift键
      . . . . . . 1.             已按下左Shift键
      . . . . . 1. .              已按下Ctrl键
      . . . . 1. . .              已按下Alt键
      . . . 1. . . .              已启用ScrollLock
      . . 1. . . . .              已启用Num Lock
      .1. . . . . .              已启用Caps LOck
      1. . . . . . .              已转换Insert键
键盘
Int      16h              功能    03h
                          调整键盘重复速率
设置键盘重复速率和重复时的延迟。
调用寄存器: AH            03h
              AL          子功能:
                          00h,恢复缺省重复速率和重复延迟(仅适用于
                          PCjr)
                          01h,增加初始的延迟时间(仅适用于PCjr)
                           02h,重复速率减半(仅适用于PCjr)
                          03h,增加初始延迟时间并将重复速率减半(仅
                          适用于PCjr)
                          04h,关掉键盘重复(仅适用于PCjr
                         05h,设置重复速率和重复延时(仅适于Personal
                          Computer AT)
              BH          重复延时(仅适用于AT及PS/2)(03*250毫
                          秒)
455页
                BL            重复速率(仅适用于AT和PS/2)(00h-1Fh,值
                              越低,速率越高)
    返回寄存器:无
    注释:该功能不能用于PC或PC/XT。其具体的使用方法可在实际操作中探
    索或参阅这一方面的专著。
键盘
Int      16h            功能    04h
                        键击声音的开/关
    打开或关掉键击声音(在击键时发出的)。
    调用寄存器: AH          04h
                AL          00h,键击声音关
                            01h,键击声音开
    返回寄存器:无
    注释:该功能只能用于PCjr不能用于PC、PC/XT、Personal Computer AT或
    PS/2。
键盘
Int      16h              功能 05h
                          写入键盘缓冲区
写入增强的键盘缓冲区。
调用寄存器: AH              05h
                CH          扫描码
                CL          字符
返回寄存器: AL             若键盘缓冲区已满,则为1
注释:该功能只能用于采用增强键盘的PS/2和Personal Computer AT上。
要确定系统是否拥有增强键盘,可按下述步骤进行检验:
      1.用功能05h来把FFFFh写入键盘的缓冲区。
      2.用功能10h来从键盘中读出信息。
      若获取的返回信息为FFFF,超出了16次的操作(tries)(键盘缓冲区的大
小),那么就表明系统无增强键盘。
键盘
Int      16h              功能    10h
                          获取按键
从增强键盘中获取按键。
456页
调用寄存器: AH            10h
返回寄存器: AH           扫描码
              AL          字符
注释:该功能只能用于那些采用增强键盘的Personal Computer AT和PS/2,
其作用是对名称相似的键加上键盘识别处理。例如,键盘上有两个Alt键(左
和右);该功能则加上左与右Alt键之间的识别处理(对其它可用键标识表的
有关信息,可参见Int16h,功能12h)。从对Int 16h功能05h的介绍中,我们已
知道如何确定是否存在增强键盘。
键盘
Int      16h              功能    11h
                          检查键盘
返回增强键盘上Shift等键的状态。
调用寄存器: AH            11h
返回寄存器:零标志清除表示键盘可用
              AH          扫描码
              AL          字符
              零标志置位表示无可用的增强键盘
注释:该功能只能用于那些具有增强键盘的PS/2和Personal Computer AT。
同其它键盘输入例程一样,在用字符的时候该功能返回字符和扫描码,并且在
无可用字符的时候返回零标志置位。可用该功能来实现输入例程程序,该例程
能有规则地轮询键盘,只是在等待输入时会处理其它方面的工作。
键盘
Int      16h              功能    12h
                          获取键盘状态标志
    返回增强键盘上Shift键的状态。
    调用寄存器: AH            12h
    返回寄存器: AL           状态标志1
                AH            状态标志2
    注释:该功能只能用于那些有增强键盘的Personal Computer AT和PS/2
    上,其用途和操作方式都与Int 16h,功能02h近似,不同之处在于它所返回的
    是扩展信息。表15.29和表15.30已显示了该功能的状态标志的含义。但这
    里应注意的是,表15.32提供的信息(通过AL返回)与Int 16h的功能02h返
    回的内容(见表15.33)是一样的。
457页
表15.32BIOS 键盘状态标志
        位
                                      含      义
76543210
    . . . . . . . 1                     已按下右Shift键
    . . . . . . 1.                     已按下左shift键
    . . . . . 1. .                      已按下两个Ctrl键之一
    . . . . 1. . .                      已按下两个Alt键之一
    . . . 1. . . .                      已启用scroll Lock
    . . 1. . . . .                      已启用Num Lock
    . 1. . . . . .                      已启用Caps Lock
    1. . . . . . .                      已转换Insert键
表15.33BIOS键盘状态标志
        位
                                      含    义
76543210
. . . . . . . 1                         已按下左Ctrl键
. . . . . . 1.                          已按下左ALt键
. . . . . 1. .                          已按下右Ctrl键
. . . . 1. . .                          已按下右ALt键
. . . 1. . . .                          已按下Scroll Lock
. . 1. . . . .                          已按下Num Lock
.1. . . . . .                          已按下Caps Lock
1. . . . . . .                          已按下SysReq键
打印
Int      17h            功能    00h
                        把字符输出给打印机
把字符输出到并行打印机端口。
调用寄存器: AH              00h
              AL            字符
              DX            打印机号(0-2)
返回寄存器: AH             打印机状态(参见表15.34)
注释:该功能把指定的字符写给打印机端口并返回如表15.34所示的打印机
当前状态。
      并非所有打印机都返回指定的状态信息项。这是由于打印机生产厂家之
间缺少统一的标准,因此,除了使用通用的IBM打印机,对其它打印机最好不
要使用状态信息。在个别情况下,如果没有接通任何打印机,BIOS信息常常会
(但不总是)报告出一种状态来表明打印机已准备就绪,并且已成功地传送了

458页
数据;如果已接通了打印机,但该打印机已关闭电源或已脱机,那么通常情况
下不会显示出“准备就绪”的信息。
                      表15.34打印机状态位
          位
                                              含      义
    76543210
    . . . . . . . 1                     超时
    . . . . . X X .                     未使用
    . . . . 1. . .                      I/O出错
    . . . 1. . . .                      已选择打印机
    . . 1. . . . .                      缺纸
    .1. . . . . .                      已确定
    1. . . . . . .                      打印机不忙碌
打印
Int      17h            功能    01h
                        初始化打印机端口
把一组复位控制序列发送给并行打印机端口。
调用寄存器: AH              01h
              DX            打印机号(0-2)
返回寄存器: AH             打印机状态(参见表15.34)
注释:该功能初始化并行打印机端口,并返回该端口的状态(参见表15.34)。
它输出字节序列08h 0Ch给打印机端口(注意,这一序列是控制信号,不是数
据字符)。Epson和IBM打印机通过实现复位来响应这一序列码。但是,其他
打印机则有可能不作出正确的响应,并且,若它们与Epson和IBM不兼容时,
甚至产生干扰效果。
打印
Int      17h            功能      02h
                        请求打印机端口状态
返回并行打印机端口的状态。
调用寄存器: AH                02h
                DX            打印机号(0-2)
返回寄存器: AH               打印机状态(参见表15.34)
注释:该功能返回指定并行打印机端口的当前状态(参见表15.34)。
      注意,若在使用personal Computer AT、PC XT 286或Personal System/2
459页
机器,并且BIOS确定了打印机处于忙碌状态(参见表15.34中的位7),那么
BIOS就会执行Int 15h的功能90h(其它信息可参见对该功能的描述)。
系统
Int 18h
                                执行ROM BASIC
从ROM中启动BASIC。
调用寄存器:无
返回寄存器:无
注释:在IBM系统上,仍然将ROM BASIC解释程序包括在所有的BIOS
ROM集中。在引导进程期间,如果未找到软盘并且不存在硬盘,此时就会激
活该中断以执行ROM BASIC(一种磁带BISIC解释程序)。很少直接使用该
中断,并且为用户编写的软件没有激活该中断的触发器。
      但是,至今仍然要用ROM BASIC,因为在IBM发布的软件磁盘上BASI-
CA解释程序用ROM BASIC以满足它们自己的许多例程。同时,由于ROM
BASIC不具备兼容能力,因而不能在兼容机上使用IBM BASIC。
      在PS/2系统上,目前仍然将ROM BASIC包括在BIOS范围内。
PS/2
INT  19h
                                  系统热引导
    <PS/2> 初始化引导序列。
调用寄存器:无
返回寄存器:无
注释:该功能的作用与Ctrl-Alt-Del有点类似,即在不丢失当前内存状态的
前提下实现计算机的热引导(Ctrl-Alt-Del能实现热引导并且能将机器状态和
    内存位置复位)。
        与一些参考手册所介绍的情况相反,上述两种方法都与断电重启动方法
不一样,因为这一方法能导致实现完整的系统复位以及通电检查(包括内存检
查)。
      在执行该中断时,它会从磁盘中把磁道0,扇区1(引导代码)读进内存,这
一过程从地址0000:7C00处开始。把DL寄存器置为产生引导的驱动器号,
然后就可执行地址0000:7C00h处的引导代码。如果硬件代码(BIOS不能定
位那些本来可以定位的引导扇区),则执行Int 18h。
460页
时钟
Int      1Ah              功能00h
                          获取时钟计数器
返回系统时钟计数器的值。
调用寄存器: AH              00h
返回寄存器: AL             零点(Midnight)标志
                CX          高顺序字时钟计数
                DX          低顺序字时钟计数
注释:该中断获取系统时钟计数器,该计数器从零点开始,每秒计数18.2065
次。从零点(midnight)开始的一整天共需计86400秒,这段时间内的计数次数
(时钟计数1573040次,经过的时间为86399.9129秒)。经过零点时,RAM中
的标志字节就被置为1。注意,如果在调用此功能之前零点已经过了两次,那
么第二次发生的事件就会被忽略。
      通过执行此功能便可把AL恢复为0。但是,在复位之前应留心其它程序
是否需要经过零点的信息。
时钟
Int      1Ah            功能01h
                        设置时钟计数器
设置系统时钟计数器的值。
调用寄存器: AH              01h
              CX            高位字时钟计数
              DX            低位字时钟计数
返回寄存器:无
注释:该中断设置系统时钟计数器。要把时钟设置为某个特定时间,必须计算
出想要表现出的计数次数(从零点开始)。完成这一操作后,该数字便成了时钟
的新设置。
      要确定计数次数,先应计算出从所期望的时间设置的零点以来经过的秒
数并将该数字乘以18.2065(每秒的计数次数)。但是要注意的是BIOS不能担
保不会出现非法值。如果规定的某个值超出了正常情况下一天的范围(24小
时,或1800Bh计数),BIOS也会接受它。
时钟
Int      1Ah            功能02h
                        读取实时时钟
461页
    返回由实时时钟记录的时间。
    调用寄存器: AH          02h
    返回寄存器:进位标志清除表示成功
                CH          小时数(BCD码)
                CL          分钟数(BCD码)
                DH          秒数(BCD码)
                DL        夏时制时间标记
                            (不是所有的BIOS版本都支持)
                进位标志置位表示出错
    注释:该功能只能用于PC XT 286、Personal Computer AT或PS/2系列,其
    作用是返回BCD码表示的(二进制编码的十进值)时钟值。如果Personal
Computer AT BIOS的注明日期为6/10/85以前,则DL中的用于指明存在夏
    时制时间的选项不起作用,因而也不会返回。
      BCD码的意思是字节(8位)中的每4位解释为一个十进制位,并将忽略
    A至F之间的十六进制数值。表15.35显示了各十进制值所对应的十六进制
    数值的范围,其中每个十六进制值代表一个相应的十进制值,要占4个二进制
    位。
                          表15.35 BCD对应表
十六进制值        十进制值
      0                   0
      1                   1
      2                   2
      3                   3
      4                   4
      5                    5
      6                   6
      7                   7
8                       8
9                       9
A                     未定义
B                     未定义
C                     未定义
D                    未定义
E                     未定义
F                     未定义
        要使用表15.35,可先确定哪一数字同某个已编码成BCD的字节相对
    应,然后再查看每一个四字节的值。例如,一个值为34h的字节代表着采用
    BCD的十进制值34。在BCD编码中,字节A3h是未定义的,因为第一个四位
    字节(A)超出了所允许的BCD码的表示范围。
      如果进位标志置位,则表明时钟未起作用,此时应忽略返回值。
462页
时钟
Int      1Ah              功能03h
                          设置实时钟
设置由实时时钟所保持的时间。
调用寄存器: AH            03h
              CH          小时数(BCD码)
              CL          分钟数(BCD码)
              DH          秒数(BCD码)
              DL          夏时制时间(不为所有的BIOS版本支持)
返回寄存器:无
    注释:该功能只能用PC XT 286、Personal Computer AT或PS/2系列。必须
    按BCD(二进制编码的十进制)来设置时钟值。每一个4位字节就是一个十进
    制数;同时忽略了十六进制数字中的A至F。表15.35显示了与十六进制的值
    相对应的十制值,表中的十六进制值都采用代表BCD数字的四位字节来表
        示。
        可把寄存器AL编码成保存标准时间的时钟(DL=0)或保存为夏时制时
    间的时钟(DL=1)。如果Personal Computer AT BIOS的发行日期早于6/10/
    85,那么DL的值(表明夏时制选项是否存在)不起作用,也不必设置该值。
时钟
Int      1Ah              功能04h
                          从实时时钟内读取日期
    返回由实时时钟保持的日期值。
    调用寄存器: AH          04h
    返回寄存器:进位标志清除表示成功
                CH          世纪(BCD)
                CL          年(BCD)
                DH          月(BCD)
                DL          日(BCD)
                进位标志置位表示出错
    注释:该功能只能用于PC XT 286、Personal Computer AT和ps/2系列上,
    它能返回采用BCD(二进制编码的十进制)的时钟值。每一个四位字节就是一
    个十进制数字;同时还忽略了十六进制数字中的A至F值。表15.35显示了 
463页
与十六进制值相对应的十进制的值都采用代表BCD数字的4位字节来表示。
      如果进位标志已置位,则表明时钟未起作用,此时应忽略返回值。
时钟
Int      1Ah             功能05h
                          设置实时时钟的日期
    设置由实时时钟维护的日期。
    调用寄存器: AH            05h
                CH            世纪(BCD) (19或20世纪)
                CL            年(BCD)
                DH            月(BCD)
                DL            日(BCD)
    返回寄存器:无
注释:该功能只能用于PC XT 286、Personal Computer AT或PS/2系列。在
    使用该功能时,应采用BCD(二进制编码的十进制)方式来设置时钟值。其中
    每一个四位字节代表一个十进制数时,同时还忽略了十六进制数字的A至F
    位。表15.35显示了与十六进制值相对应的十进制值,在该表中,十六进制的
值都采用代表BCD数字的四位字节来表示。
        必须赋给BIOS以正确的值,因为在使用该功能时对BIOS的值不进行范
    围检查。不正确的BIOS值会导致难以预料的时钟设置。
时钟
Int        1Ah              功能06h
                            设置系统闹钟时间
    设置系统闹钟计时器,以便在将来某个时间产生中断。
    调用寄存器: AH          06h
                CH          小时数(BCD)
                CL          分钟数(BCD)
                DH          秒数(BCD)
    返回寄存器:进位标志清除表示成功
                进位标志置位表示出错
    注释:该功能只能用于PC XT 286、Personal Computer AT或PS/2系列。在
    此过程中,闹钟设置必须采用BCD(二进制的十进制)方式。其中,每个四位字
    节就是一个十进制位数字,并且忽略了十六进制数字中的A至F位。表15.35
    给出了与十六制值(采用代码BCD数字的四位字节)相对应的十进制值。
        闹钟设置是当前时间的偏移时间。当时间用完时,系统就会激活Int 04h
    (运算溢出)。设置闹钟信号的程序必须检查所赋给值的有效性,因为BIOS不

464页
进行有效性检查。在复位闹钟信号之前,必须用功能07h来禁止它,并设置中
断处理程序来处理闹钟信号。
    在返回信息中,已置位的进位标志表明已经出错。要么是在未来得及禁止
之前已设置了闹钟信号,或者是时钟未起作用。
时钟
Int      1Ah            功能07h
                        禁止实时时钟闹钟
    关闭系统闹钟计时器。
    调用寄存器: AH            07h
    返回寄存器:无
    注释:该功能只能用于PC XT、Personal Computer AT或PS/2系列,其作用
    是禁止实时闹钟时钟。若已设置了时钟闹钟,那么在对其进行复位之前,必须
    调用该功能。
时钟:
Int      1Ah              功能09h
                          读取实时时钟闹钟信息
返回系统闹钟计时器的状态。
调用寄存器: AH              09h
返回寄存器: CH              BCD小时数
              CL            BCD分钟数
              DH            BCD秒数
              DL            闹钟状态
                            0,未得到允许
                            1,已允许,但未启动
                            2,已允许,准备启动系统(仅用于Convertible)
注释:该功能只能用于PC Convertible和PS/2 Model 30,其作用是报告实时
闹钟时钟的设置和状态。
时钟
Int      1Ah              功能0Ah
                          获取日计数(天数)
返回自1980年1月1日起的天数。
调用寄存器: AH              0Ah
返回寄存器: CX             自1980年1月1日以来的总共天数
465页
注释:该功能只能用于PS/2系列以及那些BIOS发行日期为01/10/86或更
晚的PCXT上,其作用是通过寄存器CX返回自1980年1月1日以来的总天
数。
时钟
Int      1Ah              功能0Bh
                          设置日计数(天数)
设置自1980年1月1日以来的天数。
调用寄存器: AH              0Bh
                CX          自1980年1月1日以来的天数
返回寄存器:无
注释:该功能只能用PS/2系列或那些BIOS发行日期为01/10/86以及更晚
的PCXT上,其作用是通过CX寄存器把自1980年1月1日以来的天数传送
给BIOS。这个值被内在地保存,以维持系统日历;其作用是改变日历设置。
时钟
Int      1Ah              功能80h
                          设置声音源
选择供系统使用的音源。
调用寄存器: AH            80h
              AL          音源
                          00h,8253芯片,通道2
                          01h,磁带输入
                          02h,I/O通道线路中的音频
                          03h,声音生成器芯片
返回寄存器:无
注释:该功能只能用PCjr,其作用是从四种音源中为内部声音系统选择合适
的音源。PC系列中的其它计算机不具备这种声音功能。
系统
Int      1Bh 
                                Ctrl-Break地址
    Ctrl-Break中断处理程序的地址。
    调用寄存器:无
    返回寄存器:无
466页
注释:中断向量1Bh保存着Ctrl-Break中断处理程序的地址。当Ctrl-Break
键顺序终止某个程序时,就会把控制权传送到这一地址。在键盘输入期间,当
ROM BIOS发现Ctrl-Break字符时,BIOS就会立即调用该中断处理程序。由
于这一过程是在位于BIOS水平上的键盘扫描期间发生的,因而不能保证对
DOS的安全(有关中断处理的安全性信息可参见第11章对“中断处理程序”的
讨论)。
      在初始化期间,ROM BIOS中断向量1Bh设置为指向IRET指令。 DOS
将此中断向量重新设置为指向DOS内的处理程序,此时该处理程序就会迫使
Ctrl-C字符进入由DOS维护的键盘缓冲区(从BIOS就会发现下一次它将要
检查的Ctrl-C字符。
      该功能使得Ctrl-C和Ctrl-Break所对应的两种中断处理程序的作用相
    等,不同之处在于,它将延缓Ctrl-Break键击发生作用,直到能安全地进行操
    作为止。 Ctrl-C中断(Int 23h)是一种位于DOS水平上的行为,并且直到DOS
    处于“安全”状态时才执行这一中断。而CtrL-Break是在ROM BIOS水平上执
    行的,因而它不可能知道DOS是否处于安全状态。
      在程序的运行过程中,是最简单的Ctrl-Break(或Ctrl-C)处理程序可把中
    断指向另一个IRET指令,以便忽略Ctrl-Break(或Ctrl-C)字符。这样一旦字
    符进入了输入流,程序就能立刻处理它们。
时钟
Int     1Ch
                                计时器计时中断
      在每一个时钟计时过程中由系统计时器中断调用。
      调用寄存器:无
      返回寄存器:无
      注释:把向量1Ch——由Int 08h(系统节拍器)调用的计时器计时中断初始
      化为指向IRET指令。每当时钟计时时,都需要激活的TSR能把该中断向量
      复位为指向定制的中断处理程序。
          由于是从Int 08h代码内调用Int 1Ch,因而该功能在执行过程中,在具有
      最大优先权的操作完成之前,可共享最大优先权以防止系统应答任何其它硬
      件中断请求,包括串行设备或磁盘单元发出的中断请求。这样,当时间灵敏型
      的应用程序在运行时必须保证对用于该功能的处理程序花费绝对少的时间,
      否则就会丢失数据。
          对TSR来讲最好的方法就是只从该功能中设置一种标志,然后符合另一
      道已挂接Int 28h(DOS OK)链的处理程序中检验这一标志,因为Int 28h链有
      一种样品时间,可在不封锁硬件中断的前提下留心任何必需的处理。
467页
显示
Int       1Dh
                        视频初始化参数表
指向视频控制卡初始化参数表的指针。
调用寄存器:无
返回寄存器:无
注释: Int 1Dh(不是一种真正的中断)指向用于视频控制卡的初始化参数。由
于Int 1Dh不是可执行的代码,因此该中断必须由程序调用。在该中断上,任
何执行代码的尝试都会导致不可预料的结果,就好像是加上了一种系统锁。
磁盘
Int       1Eh
                                磁盘初始化参数表
指向用于磁盘控制卡初始化的磁盘库表的指针。
调用寄存器:无
返回寄存器:无
注释: Int 1Eh(不是一种真正的中断)指向磁盘库表--一种用于磁盘控制
卡的初始化参数表。由于Int 1Eh不是可执行的代码,因此必须通过程序来调
用此中断。在该中断上,任何想执行代码的尝试都会导致难以预料的结果,就
好像是加上了一道系统锁。
      虽然可以修改此表以便优化磁盘访问并调谐系统,但在进行任何修改时
都要极其小心,因为这一过程能毁坏任何内容,包括已保存在磁盘上的每一内
容。
显示
Int       1Fh
                                  图形显示字符位图表
指向用于视频字符生成的位图表的指针。
调用寄存器:无
返回寄存器:无
注释: Int 1Fh(不是一种真正的中断)指向用于代表128至255的ASCII字
符的图形模式字符位图。由于Int 1Fh是不可执行的代码,因此必须通过程序
来调用这一中断。在该中断上,任何执行代码的尝试都会导致难以预料的结
果,就好像是存在一种系统锁。
      位图表中共有128个字符(总计为1K的内存区域),它采用了一种最为

468页
    简单的结构。其中,每一项为8个字节长,并且代表看一个8乘8字符。每一
    字节对应着这种字符中的一个扫描行。
        下面给出一个代表大写字母“I”的实例字符,其编码组成如下:顶部和底
    部各有一个空白扫描行,顶部和底部横条各占一个扫描行,中部的垂直条占据
    四个扫描行:
                                  12345678
                              100000000
                              201111110
                            300011000
                            400011000
                             500011000
                             600011000
                            701111110
                             800000000
                字节串:00h,7eh,14h,14h,14h,14h,7eh,00h
        通过将该指针复位,就能创建出可用于CGA图形模式的字符。
系统
Int     4Ah
                                实时时钟闹钟中断
在出现实时时钟闹钟时调用该中断。
调用寄存器:无
返回寄存器:无
注释:该功能只能用于Personal Computer AT、PC XT 286和PS/2产品系
列。一旦设置了实时时钟闹钟(参见Int 1Ah,功能06h)并且遇到了特定的时
间,此时就会产生闹钟信息并调用该中断。通过截获该中断就能找到供该闹钟
信息执行的例程。
      如果使用了这一中断,那么在返回到DOS之前必须确保将它复位到它的
初始化向量上。
时钟
Int    70h
                                  实时时钟中断
每秒调用1024次,以产生周期性的控制和发挥闹钟功能。
469页
    调用寄存器:无
    返回寄存器:无
    注释:该功能只能用于Personal Computer AT、PC XT 286和PS/2产品系列
      上(在PS/2 Model 30中不存在这种周期性的功能)。
        在每秒钟的时间内调用实时时钟中断的次数大约为1024次。无论何时调
      用该中断,双字计数都会减少976微秒(1/1024秒)。该计数的初始值是通过
    调用Int 15h,功能83h(事件等待)或功能86h延时)来设置的。当该计数小于
      或等于零时,指定等待标志中的位7就会被设置。对于功能83h,等待标志是
      通过ES:BX寄存器指针来指定的,而对于功能86h,该标志位于BIOS数据
      区位置0040:00A0h处(拖延活动的标志)。
        如果通过调用Int 1Ah功能06h把实时时钟作为闹钟功能而激活的话,
      那么当时间用完时,Int 70h就会调用Int 4Ah以激活闹钟处理程序(必须在
      发出对Int 1Ah的调用之前设置闹钟处理程序)。
 

抱歉!评论已关闭.