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

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

2013年09月12日 ⁄ 综合 ⁄ 共 27239字 ⁄ 字号 评论关闭

381页
注释:在pc上,把Int 0Fh指派给打印机控制卡,以检测打印机是否出错,以
及打印工作是否完成。通常情况下程序员们并不使用Int 0Fh,因为许多打印
机控制器不一定产生该中断。通常也可忽略此中断。
      若控制卡不能确定是哪一种设备请求服务。
      8259 Priority Interrupt Controller(优先权中断控制器)也可按缺省值来产
生IRQ7请求(因为它是最低优先级的请求)。因此,不可能肯定地假设该处理
程序范围内的中断已被打印机初始化;它有可能在别的地方进行了初始化。
<PS/2> 在PS/2上,将Int 0Fh标记为保留;其功能被用到别的地方上。
显示
Int      10h              功能00h
                          设置视频模式
设置供视频接口卡使用的显示模式
调用寄存器: AH            00h
              AL          显示模式(参见表15.4)
返回寄存器:无
                              表15.4显示模式
    视频模式   模式类型  显示接口卡   象素分辨素  框大小  字符    颜色
00h     文本    CGA   320*200 8*8   40*2516(灰色)
                            EGA^^2       320*350       8*14      40*25     16(灰色)
                MCGA        320*400       8*16      40*25     16
              VGA^1       360*400       9*16      40*25     16
01h       文本  CGA     320*200   8*8   40*2516
                                EGA^^2          320*350         8*14        40*25       16
                                MCGA            320*400         8*16        40*25       16
                                VGA^1           360*400         9*16        40*25       16
02h     文本  CGA     640*200 8*8   80*25  16(灰色)
                          EGA^^2         640*350     8*14      80*25   16(灰色)
                          MCGA          640*400     8*16      80*25     16
                          VGA^1        720*400     9*16      80*25     16
                                  CGA             640*200           8*8         80*25       16
      03h           文本
                                  EGA^^2       640*350           8*14   80* 25       16
                                  MCGA            640*400           8*16        80*25       16
                                  VGA^1           720*400           9*16        80*25       16
      04h           图形          CGA/EGA/      320*200           8*8         40*25       4
                                  MCGA/VGA
    05h       图形      CGA/EGA/     320*200    8*8     40*25   4(灰色)
                                  MCGA/VGA       320*200         8*8         40*25       4
      06h           图形          CGA/EGA/       640* 200       8*8         80*25       2
                                    MCGA/VGA
382页
    视频模式        模式类型        显示接口卡          象素分辩素        框大小         字符         颜色
07h           文本        MDA/EGA      720*350       9*14    80*25     Mono
                     VGA^1         720*400       9*16    80*25     Mono
08h           图形        PCjr          160*200       8*8     20*25     16
09h           图形        PCjr          320*200       8*8     40*25    16
0Ah           图形        PCjr          640*200       8*8     80*25     4
0Bh                          ——保留——
0Ch                           ——保留——
   0Dh        图形        EGA/VGA      320*200       8*8     40*25     16
   0Eh       图形        EGA/VGA      640*200       8*8     80*25     16
    0Fh       图形        EGA/VGA      640*350       8*14    80*25     Mono
    10h       图形        EGA/VGA      640*350       8*14    80*25     16
    11h       图形        MCGA/VGA640*480            8*16    80*30     2
    12h       图形      VGA           640*480       8*16    80*30     16
    13h       图形        MCGA/VGA320*200            8*8     40*25    256
    1增强的VGA模式;如果不是,VGA可以仿真该模式的CGA或EGA特征。
    2当连接上一种增强的彩色显示器时为EGA模式;否则,仿真该字符的CGA特征。
注释:该功能设置视频模式,清除屏幕以及选择视频接口卡(如果出现不止一
个的时候)。要阻止在EGA、MCGA和VGA系统上出现屏幕清除操作,可把
AL的位7置为1。
显示
Int      10h              功能01h
                          设置光标类型
    设置显示光标的高度。
    调用寄存器: AH          01h
                CH          在位0—4中(顶部)光标的开始扫描行
                CL          在位0—4中(底部)光标的终止扫描行
    返回寄存器:无
    注释:该功能通过指定光标的开始和终止扫描行来设置文本模式光标的类
    型。通过打开和关闭扫描行,视频显示系统就会显示出闪烁的光标。在CGA
    中字符单元有8个扫描行,在EGA中字符单元有14个扫描行。要指定光标的
    大小,应从0开始沿顶部向下计数扫描行的行数。
        从第0行开始,分别指定字符框的起始和终止扫描行,即可控制文本模式
    中光标的大小。在CH中指定起始扫描行;在CL中指定终止扫描行。例如,要
    在配备有CGA的机器上产生出占用字符单元中较低两行的两行光标,可把
    CX置为0607h。
        许多程序员并未意识到在很多视频接口卡上光标交换是在字符单元内部

383页
进行的。若CH小于CL通常只显示单段光标。把CH设置为大于CL,就能创
建出双段光标。在某些接口卡上,进行这种光标类型交换的操作会禁止光标显
示。要在这些允许交换的系统上禁止光标,可设置CH=20h(无须改变CL的
值)。在其它的接口卡上,可能需要把光标定位在不能显示的地址上,如行25,
列0处。
      对于所有的视频页面,只存在一种光标类型。若程序在不同的视频页上使
用不同的光标,那么当官改变屏幕页面时,必须管理操作并显式地改变光标。
      对单色视频模式而言,缺省处理的起始行为0h;终止行为0Ch。而对于
彩色视频模式,缺省时的起始行为06h;终止行为07h。这些值提供了一种占据
两个扫描行高度的下划线光标;对于整块的光标,可把上述两种情况下的起始
行号都改变为0。
显示
Int      10h              功能02h
                          设置光标位置
用于指定显示光标的坐标。
调用寄存器: AH              02h
                BH          页号(0代表图形模式)
                DH          行(以0为基数)
                DL          列(以0为基数)
返回寄存器:无
注释:在文本屏幕上,该功能把指定页的光标定位在某一指定的位置上。系统
允许跟踪每个可能显示页的单独光标位置,在文本模式中,最大可能的显示页
为8页。
    当屏幕处于文本模式中时,所定义的位置与左上角(位置0,0)相对应。在
80*25文本模式中右下角的位置为79,24;在40*25文本模式中右下角的位
置为39,24。 DL和DH的有效范围的大小依赖于所对应的视频模式。如下表
所示:
80列的文本模式                  40列的文本模式
DL=0到79                            DL=0到39
DH=0到24                          DH=0到24
    通常情况下,把此光标替换出屏幕(通常使用位置0,25)就能关掉它。如
果打算在43行模式中装备有VGA的系统上或在VGA的50行显示模式中
运行程序,则应慎用此方法,因为这样做可能会回火(backfire)。
    可以在任何页面上定位显示的光标,以便允许程序在屏幕未显示的页面
上处理扩展工作。这样,当完整的屏幕已准备好时,可以几乎同时把该光标显

384页
示给用户。表15.5列出了不同显示模式下的有效页号。只可以显示那些视频
接口卡有充足内存的显示页。例如,MDA只有一个显示页;其余的显示接口
卡(根据各自所处的模式)可以有0-7个显示页。
                    表15.5不同显示模式下的有效页号
页号                              板式                  接口卡
0—7                                    00-01h               CGA,EGA,MCGA,VGA
  0—3                                 02—03h             CGA
0—7                                    02—03h               EGA,MCGA,vGA
0                                         07h                 MDA
0—7                                      07h                 EGA,VGA
        若在图形模式中工作,就必须把页号置为0。可用功能05h来设置当前显
    示的页面。
显示
Int      10h                功能03h
                            读取光标位置和配置情况
返回光标坐标和类型。
调用寄存器: AH              03h
                BH          页号
返回寄存器: BH             显示页号
                CH          光标的起始行
                CL          光标的终止行
                DH          行
                DL          列
注释:该功能用于获取当前光标位置并返回通过功能02h来定位光标时设置
的值。在80*25模式中,位置0,0为左上角;右下角的位置为79,24;在40*
25模式中,右下角的位置为39,24;左上角的位置同样为0,0。
      该功能也返回光标的起始位置与终止位置(关于设置这些值的信息参见
功能01h)。在改变光标类型前,可以使用该功能来确定最理想的光标类型(因
而在程序完成其工作后,可恢复到该类型)。若程序必须在某个混合程序环境
中与其它程序共存,那么最好的办法就是把它的光标恢复到程序开始时的状
态。
      并非所有程序都用BIOS来处理各自的光标定位。 TSR弹出式程序倾向
于绕过BIOS并直接到达视频控制器芯片;当这一过程实现时,所反馈的信息
是BIOS调用无意义。几乎没有什么办法可让其它的程序按你的意志行事,但

385页
      至少能保证不受这些杂事的干扰。最好经常使用BIOS来进行光标定位,至少
      对每一操作时最后重写的字符应采用此方法,这样可使得其它的程序能正确
      地恢复他自己的光标位置和类型。
    Int      10h              功能04h
显示                          设置光标位置
返回光笔的坐标。
调用寄存器: AH              04h
            CH        在位0-4中(顶部)光标的开始扫描行。
返回寄存器: AH        0,光笔未放下或未触发
                          1,光笔已放下或已触发
              BX          象素列(0—39或0-639,根据实际模式而定)
              CH          象素行(0—199)
              CX          象素行(0-nnn,依实际模式而定)
              DL          字符列(0—79或0—36,依具体模式而定)
注释:此功能读取光笔的状态和位置。在PC系统上,虽然鼠标比光笔应用得
更广泛,但有些应用程序却只使用光笔(其余的应用程序也可使用光笔)。在使
用光笔前,必须检查是否已激活光笔AH=1);。若未激活光笔,保存在其它寄
存器中的信息无意义,并应将其忽略。
      光笔返回精确到只有两个扫描行的垂直位置。光笔的水平精确度不高于
2个象素(每扫描行320个象素)或4个象素(每扫描行640个象素)。因而,光
笔不适合于高分辨率的图形控制。在大多数单色监视器上,使用光笔的效果并
不理想,因为显示磷光有很长的映象保持时间。
      PS/2系统(MCGA或VGA)不支持光笔(AH总是返回00h)。
显示
Int      10h              功能05h
                          选择活动的显示页
    用于选择将被显示的视频显示页
    调用寄存器: AH          05h
                AL          所选择的页号(参见表15.6)
    返回寄存器:无
注释:选择活动(要显示的)视频页的功能可用于CGA、MCGA、EGA和
VGA。不能将它用于单色接口卡,因为单色接口卡只有一个内存的显示页。表
    15.6显示了有效的页数。

386页
表15.6有效的页号
页号                  模式                          接口卡
0-7                        00h,01h                      CGA,EGA,MCGA,VGA
  0-3                          02h,03h                      CGA
0-7                        02h,03h                      EGA,MCGA,VGA
0-7                        07h,0Dh                      EGA,VGA
0-3                        0Eh                           EGA,VGA
  0-1                          0Fh,10h                      EGA,VGA
      注意,当该功能在处理其它型号时,其操作不同于PCjr,在PCjr中,AL
寄存器保存的是子功能代码而不是页号,并且BX保存着CRT以及CPU页
号,这种区别是最主要的,并且大多数PC参考手册缺乏可靠的信息。若需要
在这种机器上进行动画制作,可参见《PCjr技术参考手册》,且不必担心会有
意外的情况发生。
      该功能在建立壮观的文本屏幕显示时特别有效。通过在某个未显示的页
面中建立屏幕并接着调用该功能来显示此屏幕,就能创建几乎是同时的屏幕
切换,并给程序一个令人难忘的漂亮外表。大多数重要的输出功能可以写给任
何页面。       
显示
Int      10h              功能06h
                          上滚窗口
用于清空屏幕或将屏幕的某个已定义的区域向上滚动指定的行数。
调用寄存器: AH          06h
              AL        要滚动的行数(若为0,表示清空整个窗口)
              BH        面向已清空的区域所使用的属性
              CH            行,左上角
                CL          列,左上角
                DH          行,右下角
                DL          列,右下角
返回寄存器:无
注释:该功能(与Int10h,功能07h相反)用指定的属性把窗口初始化为空
白,或者将窗口上滚一个指定的行数。这种上滚功能将窗口中所有的行都往上
移动一行。同时在窗口的底部留出一空白行(用指定的属性),所消除的行是先
前位于该窗口的顶部(若要把新的行中填满文字,程序必须进行这项工作)。
      可以使用这种面向窗口的功能来定义要在屏幕上清除(或上滚)的矩形区

387页
域,并在窗口中设置被清除行的属性字。
      要清除窗口,可把AL置为0或大于此窗口中行数的值。《IBM技术参考
手册》早期版本中的BIOS列表显示了这种功能的实现方式;即“清除一行,减
少一个计数”,直到该计数达到零(在技术参考手册的当前版本中,IBM删去
了BIOS程序清单。若使用这一算法,那么把AL置为0来实现“清除窗口”比
把AL设置为 25(或其它大于所要清除的矩形高度的值所占用的时间要长一
些。除非应用程序是极端的屏幕灵敏型的程序,否则把AL设置为0所造成的
时间误差可以忽略不计。
      必须明白的是:在某些BIOS实现程序上,只有把AL置为0才能实现屏
幕清除。如果不是把AL置为非零值而是大于屏幕行数的值,其结果往往是难
以预料的。有了这种概念,若想清除整个屏幕,这时就会想到只需要设置屏幕
模式(功能00h)就行了。若只想清除屏幕中的一部分(仅仅只清除某个指定的
窗口),此时应确保把AL置为0就能保证程序与所碰到的一切BIOS实现程
序兼容。
      该功能只对活动的显示页起作用。
显示 int  10h  功能07h
               向下滚动窗口
用来把屏幕中某个指定区域里的文本屏幕下滚一个指定的行数
调用寄存器: AH             07h
              AL            下滚的行数(若为0表示清除了整个窗口)
              BH            为所清除的区域而使用的属性
              CH            行,左上角
              CL            列,左上角
              DH            行,右下角
              DL            列,右下角
返回寄存器:无
注释:该功能通过用指定的属性或者把窗口下滚一指定的行数来把窗口初始
化为空白。使用该功能(与Int 10h的功能06h相反)可下滚屏幕。这种下滚功
能把窗口中所有的行都下滚一行,这样就在此窗口的顶部增加了一个空白行
(用指定的属性),并消除了先前曾在该窗口底部的那一行(如果必须将新的一
行填满文字,程序就得处理这项工作)。
      可以使用这一面向窗口的功能来定义屏幕上所要清除(或下滚)的矩形区
域,并在窗口中设置被清除行的属性字。
      要清除窗口,可把AL置为0或一个大于此窗口中行数的值。《IBM技术
参考手册》早期版本中的BIOS清单介绍了这种功能的实现方式,即为:“清除

388页
    一行,减少一个计数”,直到该计数达到零(《IBM技术参考手册》的当前版本
    删去了BIOS的程序清单)。若使用这种算法,那么把AL置为0来实现“清除
    窗口”比把AL设置为25(或其它大于所要清除的矩形高度的值)所用的时间
    要长一些。除非所用的应用程序对屏幕的大小极为敏感,否则可以不考虑由于
    把AL设置为0所造成的时间上的差异。
      该功能只对当前活动的显示页起作用。
显示:
Int      10h              功能08h
                          读取字符和属性
在当前的光标位置上返回字符和属性。
调用寄存器: AH              08h
                BH          显示页
返回寄存器: AH             属性字节
                AL          ASCII字符
注释:该功能在光标的当前位置读取字符和属性字节(用于指定的显示页)。
    由于可以从屏幕中直接读取这种信息,因而既不用在程序中保存关于屏幕的
信息,也不必千方百计地从一道程序到另一道程序的转换过程中绕过屏幕显
    示。屏幕就处在屏幕内存中。
       TSR拼写检查实用程序和TSR词库实用程序使用该功能来读取屏幕,
    以便这两种实用程序能终止所要检查的词。但是,若要编写这种实用程序,则
    应谨慎从事。因为有些程序可直接访问内存,而不必更新屏幕光标,这时,功能
    01h至03h中所介绍的光标也可能不指示到你想要的字。
显示
Int      10h                功能09h
                            写入字符属性
      从光标位置开始,用所定义的属性来保存指定的字节个数。
      调用寄存器: AH          09h
                  AL          字符
                  BH          显示页
                  BL           AL中字符的属性字节
                  CX          要写入的字符个数
      返回寄存器:无
      注释:从指定显示页上的当前光标位置开始,该功能把字符和属性字节逐一

389页
    地写到屏幕上。使用该功能可以把多个字节快速地写到屏幕上(所有的字符和
    属性必须相同)。
        在文本模式中,该功能可以把多达65536个字节写到屏幕上(通常情况
    下,最大的文本模式显示有132列、50行,能在一个显示页内容纳6600个字
    符,但在随后的显示页上若出现这么多的字节则会溢出)。随着该功能不断地
    写入字符,它会不断地换行,即从前一行的未尾写至下一行的开头。在图形模
    式中,该功能则只能从一行的开头写至该行的末尾。在每个字符不断地出现在
    屏幕上时,光标的位置没有改变。
        对于使用该功能来说,有一种令人感兴趣的方式:即在调用该字符输出功
    能之前,清除屏幕上某个区域文字项。可以用不同的颜色属性来设置这个区域
    以使它格外醒目。由于该功能可以清除一个比屏幕还要大的区域。因此可根
    据数据项的需要,随意设置区域的大小。同时,由于光标位置未变,因而在输入
    数据项之前没有必要重新定位光标。
        在图形模式中,可使用BL内的视频属性字节来确定所要写入的字符颜
    色。但是,若设置了位7,那么在显示字符时,BL中的值就XOR(异或)上了背
    景颜色(这种功能很有用)。这样的话,若打开位7,在图形模式中把字符写到
    显示器并重写该字符时,就能从屏幕中擦除该字符。
        在图形模式中,用于代码80-FFh的字符出自于一个其地址被保存在中
    断向量1Fh中的位图表。通过把此指针重置为指向你自己的某个位图表,就
    能创建你自己的字符表(关于位图字符表的情况可参见对功能1Fh的讨论)。
    用于代码00-7Fh的字符由不能重置的ROM字符表产生(EGA和VGA用户
    可以重置常规的显示字体;具体可参见Int 10h功能11h)。
显示
Int      10h              功能0Ah
                            在光标处写入字符
    从光标位置开始,保存指定的字符个数
    调用寄存器: AH          0Ah
                AL          字符
                BH          显示页号
                BL           AL中字符的颜色(只限于图形模式)
                CX          要写入字符和属性字数
    返回寄存器:无
    注释:该功能(除了不能在文本模式中设置字符的属性字节外,该功能等同于
    功能09h)可在指定显示页的当前光标位置处写入一定数量的字符。每个字符
    所写入的位置处的属性继续保持不变。
        若想把许多字符快速地写给屏幕,最好使用该功能。在文本模式中,该功

390页
能可以把多达65536个字符写给屏幕。随着该功能不停地写入字符,它也会不
断地换行(即从前一行的未尾写向后一行的开头,如此不停地循环下去)。在图
形模式中,该功能则只能写满一行,即从该行的开头写至未尾,而不能换行。在
整个操作过程中,光标的位置始终保持不变。
      在图形模式下,BL确定了所要写入的字符的颜色。但是,若设置了位7,
那么在显示字符中,BL中的值就被XOR(异或)上背景的颜色。对于擦除屏幕
上的字符来说,该功能十分有效,即只需在图形模式中打开位7,再把字符写
给显示并接着重写该字符,就能实现这个目的。
      在图形模式中,用于代码80-FFh;的字符出自于一个其地址被保存在中
断向量1Fh中的位图表。通过把指针重新设置为指向你自己的某个位图表,
即可创建出相应的字符表(关于位图字符表的情况,可参见对功能1Fh的讨
论)。用于代码00-7Fh的字符由不能重置的ROM字符表产生(EGA/VGA用
户能重新设置常规的显示字体,具体可参见Int 10h功能11h)。
显示
Int      10h              功能0Bh
                          设置色彩调色板
选择用于图形显示的颜色。
调用寄存器: AH              0Bh
                BH          要设置的调色板的ID号
                            0,BL拥有背景颜色和边框颜色
                            1,BL拥有调色板颜色
                BL          为这种色彩ID所使用的色彩值
                CL          在位0-4中(底部)光标的终止扫描行
返回寄存器:无
注释:当BH为1时,该功能选择或设置用于中分辨率(4色的)图形显示如
模式4的调色板的内容,该功能对内存没有直接的影响。或者可以说通过解释
代码和改变彩色,该功能可以影响6845控制器解释视频内存的方式。用该功
能来迅速地改变调色板,就能产生一次显示清空。功能10h提供了其它的用于
PCjr、EGA、VGA、和MCGA的调色板控制。
      在文本模式中(BH=0),此功能设置屏幕的边框色彩。
      表15.7列出了该功能可以设置的有效色彩调色板。
                                表15.7色彩调色板
调色板                  象素                      颜色
    0                       0                       同背景一样
                            1                       绿色
391页
调色板                  象素                    颜色
                            2                         红色
                            3                         褐色
    1                       0                         同背景一样
                            1                         青蓝色
                            2                         品红色
                            3                         白色
显示
Int      10h                功能0Ch
                      写入图形象素
在光标的当前位置处把单个象素写到屏幕上。
调用寄存器: AH              0Ch
                AL          颜色值
                BH          页号
                CX          象素列数
                DX          象素行数
返回寄存器:无
注释:该功能能够在指定的图形坐标上把单个象素写到屏幕上,这是一个最
基本的图形绘图服务。复杂的图形处理功能是由设置屏幕象素的值的操作集
合来建立的。
      在中等分辨率模式中,该功能能否获得最佳效果依赖于所使用的调色板。
高分辨率的CGA(模式5允许从4种颜色的调色板中设置出象素。使用该功
能时,若把AL的位7置为1,则新的颜色为当前象素XOR(异或)的结果;通
过把该象素写入第二次即可擦除该象素。
      根据所使用的图形模式,该功能可以定址的屏幕位置范围,在纵向上为0
—199或0—349;在横向上为0—319或0—639。由模式所规定的屏幕边限的
具体情况可参见表15.4。表15.8给出了此功能使用的有效的页号(BH寄存
器)。
                          表15.8有效的页号
      页号              模式              接口卡
    0—7                      0Dh                       EGA,VGA
    0—3                      0Eh                       EGA,VGA
    0—1                      0Fh,10h                  EGA,VGA
392页
显示
Int      10h              功能0Dh
                          读取图形象素
返回指定屏幕坐标上象素的颜色。
调用寄存器: AH            0Dh
              BH          页号
              CX          象素列数
              DX          象素行数
返回寄存器: AL           颜色值
注释:此功能用于获取指定图形坐标处理象素的颜色值。该功能经常用于显
示游戏和高级图形应用程序中。在显示游戏中,它的作用是确定冲突。当高级
的图形程序在屏幕上移动一个图形对象时,可用此功能来确定边界。
      垂直方向上的地址限制为0—199或0—349,水平方向上的地址为0—
319或0—639,具体的上限要看使用的是哪一个显示模式。可查阅表15.4来
看看各种显示模式下的地址上限。 BH中可设置的有效页号可参见表15.8。
显示
Int      10h              功能0Eh
                          以电传方式写文本
        用带限制的控制处理来输出字符。
        调用寄存器: AH            0Eh
                   AL           字符
                    BH            显示页(字符模式)
                    BL            前景颜色(图形模式)
        返回寄存器:无
        注释:即使屏幕为旧式的电传机器,该功能也能够把文本写入屏幕。该功能解
        释用于响铃(07h)、退格(08h)、回车(0Dh)和换行(0Ah)的ASCII字符代码,
        以便相应地拉响控制台响铃、退回光标、把光标移到该行的开头或移至下一
        行。其余所有的控制字符,包括标记字符和换页字符都被显示出(闪烁的外表、
        指示箭头等等)而不是受到了影响。写操作完成后,光标移至下一个字符位置。
            尽管在某种程度上略有一些古体风格(这使得你会想到旧的电传打字
        机),但该功能的确是很有用的。 DOS将它用在控制台驱动程序中,把操作系
        统的文本和信息送至屏幕上。
            若在注明日期为4/24/81和10/19/81的PC BIOS ROM上用功能0Eh
        来工作,BH寄存器就必须指向当前被显示的页面。若使用日期更晚的ROM,

393页
    则该功能既可在已显示的页上又可以在未显示的页上工作。
        功能0Eh与其它显示功能间的主要区别在于它除了能换行或上滚行外,
    还能自动地处理常规的响铃、换页、换行和回车等的控制功能。尽管该功能不
    允许改变所写入字符的视频属性,但对于简单的输出而言,该功能是最理想的
    使用对象。
        即使在未显示的页面上工作,响铃字符也能拉响系统警铃以引起所有后
    台操作的注意。遗憾的是该功能不能把tab字符扩展到指定的位置。
显示:
Int      10h              功能0Fh
                            获取当前显示模式
返回视频显示模式、屏幕宽度和活动页号。
调用寄存器: AH            0Fh
返回寄存器: AH           屏幕上的列数
              AL          显示模式(参照表15.4)
              BH          活动的显示页
注释:该功能可获取视频控制器的显示模式,包括字符列数和当前显示页,在
程序初始化过程中,该功能最有用。可以用功能0Fh来确定显示系统的当前
设置,从而当程序操作完成时,可以把显示系统恢复到其初始化显示模式。
      若要编写TSR(终止并驻留)实用程序,弄清当前的显示模式就显得极其
重要,因为在另一应用程序的运行过程中,TSR实用程序会突然出现在屏幕
上。实用程序可以在字符屏幕上运行,但该实用程序被启动时,具有控制权的
程序可能已经在使用某个你并不想使用的模式。在大多数情况下,早期的
TSR不能正确地处理屏幕显示,显示的结果往往就像是计算机内已爆炸了一
颗炸弹。
      尽管可以用功能0Fh来确定屏幕的宽度,但建议你最好设置想要使用的
模式,而不是去费力地弄清已存在的是什么模式。
显示:
Int      10h              功能10h
                          设置调色板寄存器
在PCjr、EGA、VGA和MCGA视频控制器中控制调色板寄存器上的操作。
调用寄存器: AH              10h
              AL             00h设置调色板寄存器
              BX             0712h为唯一允许的值(仅限于MCGA)
              BH            彩色值
     
394页
BL              要设置的调色板
AL              01h,设置边框彩色寄存器(不用于MCGA)
BH              彩色值
AL               02h,设置所有的寄存器和边框(MCGA除外)
ES:DX         指向17字节彩色列表的指针
AL              03h,闪烁/亮度切换
BL              闪烁/亮度  位
                00h             允许亮度
                01h             允许闪烁
AL               07h,读取调色板寄存器(仅用于VGA)
BL              读调色板寄存器(0—15)
AL            08h,读取过扫描(边框)寄存器(仅用于VGA);
AL            09h,读取调色板寄存器和边框(仅用于VGA)
ES:DX      指向保存值的17字节表的指针
AL             10h,设置单独的彩色寄存器(仅用于VGA和
                    MCGA)
BX            要设置的彩色寄存器
CH            要设置的绿色值
CL            要设置的蓝色值
DH            要设置的红色值
AL             12h,设置彩色寄存器块(仅用于VGA和 
                    MCGA)
BX            要设置的第一个彩色寄存器
CX            设置彩色寄存器数
ES:DX      指向彩色值的指针
AL             13h,选择彩色页面(仅用于VGA)
BL             00h,选择分页模式
BH            分页模式
              00h 64个寄存器中的4寄存器块
               01h 16个寄存器中的16寄存器块
AL             13h选择彩色页面(仅用于VGA)
BL            01h选择页面
BH            分页号
              00-03h代表64个寄存器块
              00-0Fh代表16个寄存器块
AL            15h,读取彩色寄存器(仅用于VGA和MCGA)
BX            要读取的彩色寄存器
AL             17h,读取彩色寄存器块(仅用于VGA和
395页
                                    MCGA)
                BX          要读取的第一个彩色寄存器
                CX          要读取的彩色寄存器的个数
                ES:DX    指向保存有彩色寄存器值的缓冲区的指针
                AL           18h,更新视频DAC屏蔽寄存器(仅用于VGA
                            和MCGA)
                BL           DAC屏蔽寄存器的值
                AL          19h,读取DAC屏蔽寄存器(仅用于VGA和
                                    MCGA)
                AL           1Ah,读取彩色页状态(仅用于VGA)
                AL           1BH,将彩色值相加变换成灰度(仅用于VGA
                            和MCGA)
                BX          要相加的第一个彩色寄存器
                CX          要相加的彩色寄存器个数
返回寄存器:子功能          07h—08h
              BH            读取的值
                                子功能09h
              ES:DX      指向17字节表的指针
                                子功能15h
              CH            读取的绿色值
              CL            读取的蓝色值
              DH            读取的红色值
                                子功能17h
              ES:DX      指向彩色表
                                子功能19h
              BL            读取的值
                                子功能1Ah
              BL            当前分页模式
              CX            当前页
注释:在PCjr、MCGA、EGA和VGA显示系统上,该功能通过子功能来控制
对应于不同象素值的颜色。虽然在IBM Personal Computer AT BIOS上将该
功能列为保留,但它仍然是BIOS的扩展,可应用于EGA和VGA显示系统。
      本功能的详细说明超出了本书的范围,对直接的显示系统编程有兴趣的
读者可以从本书前面的书目提要为指南,以便系统地阅读本书对此功能各个
方面的介绍。
<PS/2> 在PS/2 Model 30系统上,有些子功能是不可用的(调用这些功能
时,它们的子功能号由AL中的内容指定)。这些子功能分别是01h、02h、07h、
08h、09h、13h和1Ah。

396页
显示:
Int      10h              功能11h
                          字符生成程序
支持图形字符生成程序的功能,允许设置各自的字符生成程序表。
调用寄存器: AL          00h用户字母装载
                              (用于EGA、VGA和MCGA)
                BH            每字符的字节数
                BL            要装载的块
                CX            要保存的计数
                DX            表中的字符偏移
                ES:BP       指向用户表的指针
                AL             01h,ROM单色集(用于EGA和VGA)
                BL            要装载的块
                AL            02h,ROM 8*8双点(用于EGA、VGA和
                                    MCGA)
                    BL          整块装载
                    AL             03h,设置块说明符(用于PCjr,EGA、VGA和
                                            MCGA)
                    BL            字符生成程序块选择
                    AL            04h,装载8*16ROM(用于VGA和MCGA)
                    AL            10h,用户字母装载(用于EGA、VGA和
                                          MCGA)
                    BH            每字符的字节数
                    BL            要装载的块
                    CX            要保存的计数
                    DX            表中的字符偏移值
                    ES:BP      指向用户表的指针
                    AL             11h,ROM单色集(用于EGA和VGA)
                    BL            要装载的块
                    AL            12h,ROM8*8双点(用于EGA、VGA和MC-
                                          GA)
                    BL            要装载的块
                    AL            14h,装载8*16ROM(用于VGA和MCGA)
                    AL             20h,在1Fh上设置用户图形字符指针(用于
                                  EGA、VGA和MCGA)
                    ES:BP      指向用户表的指针
                                                       
397页
                      AL           21h,在43h处设置用户图形字符指针(用于
                                EGA、VGA和MCGA)
                  BL          行说明符
                      CX         每字符字节数
                       ES:BP   指向用户表的指针
                      AL          22h,ROM8*14集(用于EGA、VGA和MC-
                                          GA)
                      BL          行说明符
                      AL          23h,ROM8*8双点(EGA、VGA和MCGA)
                      BL          行说明符
                      AL          24h,ROM8*16(用于VGA)
                      BL          行说明符
                      BH          每屏幕的行数
                      AL           30h,字体信息(用于EGA、VGA和MCGA)
                      BH          字体指针
        返回寄存器:随子功能的改变而变化
        注释:尽管IBM Presonal Computer AT BIOS将该功能列为保留,但它依然
        是BIOS的扩展,可应用于EGA和VGA显示系统。
            本功能的详细说明超出了本书的范围。对直接的显示系统编程有兴趣的
        读者可以本书的目录为指南来参看各方面的信息。
            在PS/2 Model 30上,以下几种子功能是不能使用的(各子功能号是由
        AL中的内容确定的),它们分别是:01h、10h、11h、12h和22h。
显示
Int      10h                功能12h
                            备用选择
提供EGA(和EGA的PS/2仿真)的其它控制。
调用寄存器: AH              12h
                AL           00h,允许子功能31h-34h以及36h
                            01h,禁止子功能31h-34h以及36h
                BL           10h,返回EGA信息
                BL           20h,选择备用的打印屏幕例程
                BL           30h,选择用于A/N模式的扫描行
                AL          扫描行数
                            00h 200个扫描行

398页
                            01h 350个扫描行
                            02h 400个扫描行
                BL           31h,在设置模式命令操作期间控制调色板的
                                装入
                BL           32h,视频开/关
                BL           33h,求和至灰色阴影转换的开/关
                BL          34h,光标仿真
                BL           35h,视频显示切换
                AL           00h,初始的接口卡视频关
                            01h,初始的接口卡视频开
                            02h,关掉活动的视频
                            03h,打开不活动的视频
                ES:DX      指向128字节的保存区域的指针(用于AL=
                              00h、02h或03h)
                BL             36h,视频清除控制
    返回寄存器:子功能10h
                BH            缺省BIOS视频模式
                00h           彩色
                01h           单色
                BL             EGA视频RAM的总数
                   00h               64K
                    01h               128K
                    02h               192K
                    03h               256K
                CH            功能位
                CL            配置切换设置
                子功能30h-36h
                    AL              12h
    注释:虽然IBM Personal Computer AT BIOS将该功能列为保留,但它仍然
    是BIOS的扩展,可应用于EGA/VGA显示系统。
      本功能的详细说明超出了本书的范围。对直接的显示系统编程有兴趣的
    读者可以本书的目录为指南,全面地了解该功能的有关信息。
显示
Int    10h                功能13h                     〈AT〉
                          写入串
399页
把ASCII串写到显示器上。
调用寄存器: AH             13h
                AL          写入模式(参见表15.9)
                BH          视频页
                BL          属性(写入模式0和1)
                CX          串长度
                DH          串写入的行
                DL          串写入的列
                ES:BP      指向串的指针
返回寄存器:无
                          表15.9写串的模式
模式            注    释
   0         BL中的属性。串只能是字符。未更新光标。
    1         BL中的属性。串只能是字符。已更新光标。
    2         串可采用字符或属性。未更新光标。
    3         串可采用字符或属性。已更新光标。
    注释:仅仅在BiOS日期为1/10/86或以后的PC XT Personal Computer AT
    以及PS/2系列的机器上该功能才可用,其作用就是把字符串写到当前活动
    的显示页上。
        可用该功能来标识某个串(通过字符的嵌入或全局属性来标识),并接着
    把它写给屏幕。由于该功能依靠其它的BIOS功能来写入串,因而其速度不是
    很快。
        功能13h是用电传式中断(Teletype interrupt)(Int 10h,功能0Eh)来进行
    输出的,这就决定了它通过把光标回移一个位置、拉响控制台报警器、下移一
    行或把光标移至当前行的开头的方式来分别响应退格(ASCII 08h)、响铃
    (ASCII 07h)、换行(ASCII 0Ah)以及回车(ASCII 0Dh)等字符。它还能实现显
    示行的下滚和上滚。
显示
Int     10h              功能1Ah                   < PS/2>
                          读或写显示器代码
读或写显示器代码。
调用寄存器: AH              1Ah
              AL             00h,读取显示器代码
              BH            备用显示器代码

400页
                  AH           01h,写显示器代码
                  BL          活动的显示代码
    返回寄存器:如果读显示器代码:
                  BH          备用的显示器代码
                  BL          活动的显示器代码
                  如果写显示代码: 
                  AL           1Ah,已改换的代码
    注释:这一功能只被PS/2各型号的系统支持,它允许读或写显示器的代码。
    可供使用的代码如下表所示:
值              含    义
00h             无显示
01h             具有单色监视器的Mono
02h             具有彩色监视器的CGA
03h             保留
04h             具有彩色监视器的EGA
05h             具有单色监视器的EGA
06h             具有彩色监视器的Professional Graphics System
07h             具有模拟单色监视器的VGA(不能用于Model 30)
08h             具有模拟彩色监视器的VGA(不能用于Model 30)
09h             保留
0Ah             保留
0Bh             具有模拟单色监视器的MCGA(用于Model 30)
0Ch             具有模拟彩色监视器的MCGA(用于Model 30)
0Dh- FEh        保留准备扩展用
FFh             未知的监视器类型
在确定与系统相连接的监视器的类型时,这些代码非常有用。
PS/2
Int      10h              功能1Bh
                          获取显示状态
(显示)提供与视频系统的具体信息有关的51个字节。
调用寄存器: AH            1Bh
              ES:DI    指向64个字节的缓冲区以接收视频状态信息。
返回寄存器: AL           若缓冲区内容有效则为1Bh
注释:该功能只能用于PS/2计算机系统上。若要返回的内容是具有51个字
节的指定数据,则需要用64字节的缓冲区,因为此缓冲区中有13个字节作为
401页
保留。在将来的系统上或许会用到这些保留的字节。
    本功能详细的说明超出了本书的范围。对显示系统编程有兴趣的读者可
以本书的目录来详细地了解相关信息。
PS/2
Int      10h              功能1Ch
                          保存/恢复显示状态
保存或恢复VGA显示系统的状态。
调用寄存器: AH        1Ch
              AL       00h,返回所需要的缓冲区大小
                      01h,保存视频状态
                      02h,恢复视频状态
              CX      请求状态的位图
                  FEDCBA98          76543210
              .. . . . . . . . . . . . . . 1 视频硬件
              .. . . . . . . . . . . . . 1. 视频BIOS
              .. . . . . . . . . . . . 1. .  视频DAC和彩
                                              色寄存器
              0000000000000. . .            未使用
              ES : BX  若AL=01或02,则指向视频状态信息的缓冲区
返回寄存器: AL          1Ch如果结果是有效的
              BL        为保存缓冲区而请求的64字节块数
注释:该功能只适用于PS/2系列中的50、60和80型号,可用它来保存或恢
复VGA特有的状态信息;如数字视频至模拟视频转换器的状态,彩色寄存器
的状态以及驱动程序数据区的状态。在保存过程中VGA的状态是不稳定的;
必须在保存操作之后跟着进行恢复操作。
      如果结果有效,该功能通过AL返回1Ch;其余的任何值都表示不支持此
功能(例如,未安装VGA或安装了非标准的VGA)。
      本功能的详细说明超出了本书的范围。直接对显示系统编程有兴趣的读
者可以参照本书的目录,以掌握更多的信息。
显示
Int      10h            功能4Fh   子功能00h
                        返回Super VGA信息
在此处的VESA功能,其作用是返回所支持的super VGA功能的数据。

402页
调用寄存器: AH              4Fh 
                    AL            00h
                ES:DI     256字节缓冲区的地址
返回寄存器: AX             状态(参见表15.10)
                ES:DI     256字节缓冲区的地址,其结构如下:
                              字节03,标记(‘VESA’)
                              字节4,次版本号
                              字节5,主版本号
                              字节6-9,指向ASCIIZ的指针OEM串
                              字节10-13,当前定义和未使用的功能位,必
                              须为零        
                             字节14-17,指向受到支持的模式列表的指
                              针,通过FFFFh结尾的字列表来表示。
                              (标准VESA显示模式的信息可参见
                              表15.11)
注释:在调用其它VESA功能之前(都通过Int 10h,功能4Fh进行访问),必
须调用该功能来确定所支持的VESA状态。
                        表15.10 VESA状态返回值
寄存器                          含义
    AL = 4Fh                       支持此功能
    AH=0                          功能成功地返回
    AH=1                           功能失败
    AH=2-FF                       保留(必须当作失败处理)
表15.11标准的VESA显示模式
模式号                  分辨率                  颜色数
100h                        640*400                         256
101h                        640*480                         256
102h                        800*600                         16
103h                        800*600                         256
104h                        1024*768                        16
105h                        1024*768                         256
106h                        1280x1024                       16
107h                        1280*1024                        256
6Ah                        800 *600                        16
    注意:在得到支持的情况下,可使用标准的VGA BIOS模式Select(设置)
403页
调用(功能00)来设置6Ah模式。
显示
Int      10h              功能4Fh     子功能01h
                          返回Super VGA模式信息
VESA在此处的功能是返回指定模式的信息。
调用寄存器: AX            4F01h
              CX          所期望的模式
              ES:DI      256字节缓冲区的地址
返回寄存器: AX           状态(参见表15. 10)
              ES:DI     256字节缓冲区的地址,其结构如下:
                            字节0—1,模式属性,其位图分布如下:
                            位0,当前显示器支持的模式
                            位1,任选的信息块有效
                            位2,支持BIOS文本功能
                            位3,彩色模式
                            位4,图形模式
                            字节2,窗口A属性,其位图分布如下:
                            位0,支持窗口
            

抱歉!评论已关闭.