汇编中的10H中断int 10h详细说明

汇编中的10H中断int 10h详细说明


Admin
2011年6月13日
名人名言:思想好比火星:一颗火星会点燃另一颗火星。一个深思熟虑的教师和班主任,总是力求在集体中创造一种共同热爱科学和渴求知识的气氛,使智力兴趣成为一些线索,以其真挚的、复杂的关系——即思信的相互关系把一个个的学生连接在一起。——苏霍姆林斯基 
汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序。使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用。

显示服务 (Video Service:int 10h)

00H:设置显示器模式

01H:设置光标形状

02H:设置光标位置

03H:读取光标信息

04H:读取光笔位置

05H:设置显示页

06H、07H:初始化或滚屏

08H:读光标处的字符及其 属性

09H:在光标处按指定属性显示字符

0AH:在当前光标处显示字符

0BH:设置调色板、背景色或边框

0CH: 写图形象素

0DH:读图形象素

0EH:在Teletype模式下显示字符

0FH:读取显示器模式

10H:颜色

11H: 字体

12H:显示器的配置

13H:在Teletype模式下显示字符串

1AH:读取/设置显示组合编码

1BH: 读取功能/状态信息

1CH:保存/恢复显示器状态

以下是每个功能号的详细说明:

1、功能00H
功能描述:设置显示器模式

入口参数:AH=00H


AL= 显示器模式,见下表所示


出口参数:无


可用的显示模式如下所列:

00H:40×25 16色 文本

01H:40×25 16 色 文本

02H:80×25 16色 文本

03H: 80×25 16色 文本

04H:320×200 4色

05H:320×200 4 色

06H:640×200 2色

07H:80×25 2色 文本

08H:160×200 16色

09H:320×200 16 色

0AH:640×200 4色

0BH:保留

0CH:保留

0DH:320×200 16色

0EH:640×200 16 色

0FH:640×350 2(单色)

10H:640×350 4色

10H:640×350 16色

11H:640×480 2 色

12H:640×480 16色

13H:640×480 256色


对于超级VGA显示卡,我们可用AX=4F02H和下列BX 的值来设置其显示模式。


BX显示模式属性

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:1280×1024 16 色

107H:1280×1024 256色

108H:80×60 文本模式

109H:132×25 文本模式

10AH:132×43 文 本模式

10BH:132×50 文本模式

10CH:132×60 文本模式

2、功能01H
功能描述:设置 光标形状

入口参数:AH=01H


CH低四位=光标的起始行

CL低四位=光标的终止行


出口参数:无

3、 功能02H
功能描述:用文本坐标下设置光标位置

入口参数:AH=02H


BH=显示页码

DH=行(Y坐标)

DL= 列(X坐标)


出口参数:无

4、功能03H
功能描述:在文本坐标下,读取光标各种信息

入口参 数:AH=03H


BH=显示页码


出口参数:CH=光标的起始行


CL=光标的终止行

DH=行(Y坐标)

DL=列 (X坐标)

5、功能04H
功能描述:获取当前状态和光笔位置

入口参数:AH=04H


出口参 数:AH=00h——光笔未按下/未触发,01h——光笔已按下/已触发


BX=象素列(图形X坐标)

CH=象素行(图形Y坐标,显示模 式:04H~06H)

CX=象素行(图形Y坐标,显示模式:0DH~10H)

DH=字符行(文本Y坐标)

DL=字符列(文本X坐 标)

6、功能05H
功能描述:设置显示页,即选择活动的显示页

入口参数:AH=05H


AL=显示页


对 于CGA、EGA、MCGA和VGA,其显示页如下表所列: 模式页数显示器类型


00H、01H0~7CGA、EGA、MCGA、VGA

02H、 03H0~3CGA

02H、03H0~7EGA、MCGA、VGA

07H0~7EGA、VGA

0DH0~7EGA、VGA

0EH0~3EGA、 VGA

0FH0~1EGA、VGA

10H0~1EGA、VGA


对于PCjr:

AL=80H——读取CRT/CPU页寄存 器

81H——设置CPU页寄存器

82H——设置CRT页寄存器

83H——设置CRT/CPU页寄存器

BH=CRT页(子 功能号82H和83H)

BL=CPU页(子功能号81H和83H)


出口参数:对于前者,无出口参数,但对PCjr在子功能80H~83H 调用下,有:BH=CRT页寄存器,BL=CPU页寄存器

7、功能06H和07H
功能描述:初始化屏幕或滚屏

入口 参数:AH=06H——向上滚屏,07H——向下滚屏


AL=滚动行数(0——清窗口)

BH=空白区域的缺省属性

(CH、CL)= 窗口的左上角位置(Y坐标,X坐标)

(DH、DL)=窗口的右下角位置(Y坐标,X坐标)

出口参数:无

8、功能 08H
功能描述:读光标处的字符及其属性

入口参数:AH=08H


BH=显示页码


出口参数:AH=属性

AL=字符

9、功能09H
功能描述:在当前光标处按指定属性显示字符

入口参数:AH=09H


AL=字符

BH= 显示页码

BL=属性(文本模式)或颜色(图形模式)

CX=重复输出字符的次数


出口参数:无

10、功能 0AH
功能描述:在当前光标处按原有属性显示字符

入口参数:AH=0AH


AL=字符

BH=显示页码

BL=颜色 (图形模式,仅适用于PCjr)

CX=重复输出字符的次数


出口参数:无

11、功能0BH
功能描述:设置调 色板、背景色或边框

入口参数:AH=0BH


设置颜色:BH=00H,01=颜色

选择调色板:BH=01H,BL=调色板 (320×200、4种颜色的图形模式)


出口参数:无

12、功能0CH

功能描述:写图形象素


入口参 数:AH=0CH

AL=象素值

BH=页码

(CX、DX)=图形坐标列(X)、行(Y)


出口参数:无


13、功能0DH
功能描述:读图形象素

入口参数:AH=0DH

BH=页码

(CX、DX)=图形坐标列(X)、行(Y)


出 口参数:AL=象素值

14、功能0EH
功能描述:在Teletype模式下显示字符

入口参数:AH=0EH

AL= 字符

BH=页码

BL=前景色(图形模式)


出口参数:无

15、功能0FH
功能描述:读取显示器模式

入 口参数:AH=0FH


出口参数:AH=屏幕字符的列数

AL=显示模式(参见功能00H中的说明)

BH=页码

16、功能10H
功能描述:颜色中断。

其子功能说明如下:


00H — 设置调色板寄存器

01H — 设置边框颜色

02H — 设 置调色板和边框

03H — 触发闪烁/亮显位

07H — 读取调色板寄存器

08H — 读取边框颜色

09H — 读取调 色板和边框

10H — 设置颜色寄存器

12H — 设置颜色寄存器块

13H — 设置颜色页状态

15H — 读取颜色寄 存器

17H — 读取颜色寄存器块

1AH — 读取颜色页状态

1BH — 设置灰度值

17、功能11H
功能描述:字体中断。

其子功能说明如下:

00H装入用户字体和可编程控制器

10H装入用户字体和可编程控制器

01H装入 8×14 ROM字体和可编程控制器

11H装入8×14 ROM字体和可编程控制器

02H装入8×8 ROM字体和可编程控制器

12H 装入8×8 ROM字体和可编程控制器

03H设置块指示器

04H装入8×16 ROM字体和可编程控制器

14H装入 8×16 ROM字体和可编程控制器

20H设置INT 1Fh字体指针

21H为用户字体设置INT 43h

22H为 8×14 ROM字体设置INT 43H

23H为8×8 ROM字体设置INT 43H

24H为8×16 ROM字体设置INT 43H

30H 读取字体信息

18、功能12H
功能描述:显示器的配置中断。

其子功能说明如下:

10H — 读取配置信息

20H — 选 择屏幕打印

30H — 设置扫描行

31H — 允许/禁止装入缺省调色板

32H — 允许/禁止显示

33H — 允许/ 禁止灰度求和

34H — 允许/禁止光标模拟

35H — 切换活动显示

36H — 允许/禁止屏幕刷新

19、功能 13H
功能描述:在Teletype模式下显示字符串

入口参数:AH=13H

BH=页码

BL=属性(若AL=00H或 01H)

CX=显示字符串长度

(DH、DL)=坐标(行、列)


ES:BP=显示字符串的地址 AL=显示输出方式

0—— 字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变

1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变

2 ——字符串中含显示字符和显示属性。显示后,光标位置不变

3——字符串中含显示字符和显示属性。显示后,光标位置改变


出口参数:无

20、 功能1AH
功能描述:读取/设置显示组合编码,仅PS/2有效,在此从略

21、功能1BH
功能描述:读取功能/ 状态信息,仅PS/2有效,在此从略

22、功能1CH
功能描述:保存/恢复显示器状态,仅PS/2有效,在此从略

参考

INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 
10H 内。使用 INT 10H 中断服务程序时,先指定 AH 
寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用 INT 
10H。底下是它们的说明:



AH

功 能

调用参数

返回参数 / 注释

1

 置光标类型

  (CH)0―3 = 光标开始行

  (CL)0―3 = 光标结束行


2

 置光标位置

  BH = 页号 

  DH = 行

  DL = 列  


3

 读光标位置

  BH = 页号

 CH = 光标开始行

 CL = 光标结束行

 DH = 行

 DL = 列

4

   读光笔位置

  

AH=0 光笔未触发

=1 光笔触发

CH=象素行

BX=象素列

DH=字符行

DL=字符列

5

 显示页

      AL = 显示页号


6

 屏幕初始化或上卷

  AL = 上卷行数 

  AL =0全屏幕为空白 

  BH = 卷入行属性

  CH = 左上角行号 

  CL = 左上角列号 

  DH = 右下角行号 

  DL = 右下角列号


7

 屏幕初始化或下卷

  AL = 下卷行数

  AL = 0全屏幕为空白 

  BH = 卷入行属性

  CH = 左上角行号 

  CL = 左上角列号 

  DH = 右下角行号 

  DL = 右下角列号


8

 读光标位置的属性和字符

  BH = 显示页

 AH = 属性

 AL = 字符

9

 在光标位置显示字符及其属性

  BH = 显示页

  AL = 字符

  BL = 属性

  CX = 字符重复次数


A

 在光标位置只显示字符

  BH = 显示页

  AL = 字符 

  CX = 字符重复次数


E

 显示字符(光标前移)

  AL = 字符

  BL = 前景色

 光标跟随字符移动

13

 显示字符串

  ES:BP = 串地址 

  CX = 串长度 

  DH, DL = 起始行列 

  BH = 页号

  AL = 0,BL = 属性 

  串:Char,char,……,char

  AL = 1,BL = 属性 

  串:Char,char,……,char 

  AL = 2 

  串:Char,attr,……,char,attr 

  AL = 3 

  串:Char,attr,……,char,attr











 光标返回起始位置



 光标跟随移动





 光标返回起始位置





 光标跟随串移动





AH=00H


AH=00/INT 10H 是用来设定显示模式的服务程序,AL 寄存器表示欲设定的模式:


AL文字/图形分辨率颜色
00文字40*252
01文字40*2516
02文字80*252
03文字80*2516
04图形320*2002
05图形320*2004
06图形640*2002

AH=01H


您可以把光标想成一个小的矩形,平时这个矩形扁平位于某字底部,但藉由此功能可以改变其大小与位置。光标起始处与终止处分别由 CL 与 CH 的 0 到 4 位表示,参考下图:


而 CH 的第 7 位必须是 0,第 5、6 位表示光标属性:


位 6       位 5        属性

        0           0           正常

        0           1           隐形

        1           0

        1           1           闪烁缓慢

AH=02H


此功能是设定光标位置,位置用 DH、DL 表示,DH 表示列号,DL 
表示行号。由左至右称之为『列』,屏幕最上面一列为第零列,紧靠第零列的下一列称为第一列……;由上而下称之为『行』,屏幕最左边一行称之为第零行,紧靠
第零行右边的一行为第一行。故最左边,最上面的位置为 DH=0 且 DL=0;最左边第二列,DH=1,DL=0。如果是文字模式时,BH 
为欲改变光标位置的显示页,如果是图形模式,BH 要设为 0。


以行列来说明 DH、DL 之意义,小木偶常常搞混,底下以座标方式解释。在文字模式下,字符的位置类似数学直角座标系的座标,但是 Y 
轴方向相反,Y 轴是以屏幕最上面为零,越下面越大,直到 24 为止,存于 DH 内。X 轴和直角座标系相同,越右边越大,存于 DL 
内,其最大值视显示模式而变。


AH=03H


AH=03H/INT 10H 这个中断服务程序返回时,会在 DX 里面有光标的行列位置,CX 内有光标的大小,DX、CX 之数值所代表的意义和 AH=02H/INT 10H、AH=01H/INT 10H 相同。


AH=04H


此功能是探测光笔之位置,似乎只有 CGA 卡有接上光笔??


AH=05H


这个功能是把指定的显示页显示于屏幕上,欲显示的显示页于 AL 寄存器中指定。此功能只能在文字模式下才能发生作用。


AH=06H/07H


这个服务程序的功用是把某一个设定好的矩形区域内的文字向上或向下移动。先说明向上移动,即调用 AH=06H/INT 
10H。当此服务程序工作时,会使矩形区域的文字向上移动,而矩形区域底端移进空格列。向上移动的列数存入 AL 中 ( 如果 AL 
为零,表示使矩形区域的所有列均向上移 ),底端移入空格列的属性存于 BH,矩形区域是藉由 CX、DX 
来设定左上角与右上角的座标,左上角的行与列分别由 CL、CH 设定,右下角的行与列由 DL、DH 设定。


AH=07H/INT 10H 和 AH=06H/INT 10H 相似,只是卷动方像不同而已。


AH=08H


这个服务程序是用来取得光标所在位置的字符及属性,调用前,BH 表示欲读取之显示页,返回时,AL 为该位置之 ASCII 字符,AH 为其属性。有关属性的说明,请参考注一。


AH=09H


这个功能是在光标位置显示字符,所要显示字符的 ASCII 码存于 AL 寄存器,字符重复次数存于 CX 寄存器,显示页存于 BH 寄存器,属性存于 BL 寄存器,其属性使用与 AH=08/INT 10H 一样。


AH=0AH


这个功能和 AH=09H/INT 10H 一样,差别在 AH=0AH 只能写入一个字符,而且不能改变字符属性。


AH=0BH


这个服务程序是选择调色盘。显示模式 5 是 320*200 的图形模式,最多可以显示 4 
种颜色,这四种颜色的意思是最多可以『同时』显示一种背景色及三种前景色,而这三种前景色有两种方式可供选择,因此事实上,在显示模式 5 
有两种调色盘可供选择。就好像您去买 12 种颜色的水彩,但可在调色盘上以任意比例搭配出许多种颜色。


调色盘 0 的三色是绿、红、黄;调色盘 1 的三色是青、紫红、白。背景色有 16 六种可供选择,这 16 种就是注一的 16 色。调用此中断时,先决定要设定背景色抑或调色盘,

  • 要设定背景色时,则使 BH 为 0,再使 BL 之数值为 0 到 0fh 之间表示注一的 16 色之一。
  • 要设定调色盘时,则使 BH 为 1。再设定 BL 为零或一表示选择那一种调色盘。

背景色只有在前景色为 0 时才会显现出来。


AH=0CH


AH=0Ch/INT 10H 是在绘图模式中显示一点 ( 也就是写入点像,write graphics pixel ),而 AH=0DH/INT 10H 则是读取点像 ( read graphics pixel )。


写入时,要写入位置 X 座标存于 CX 寄存器,Y 座标存于 DX 寄存器,颜色存于 AL 寄存器。和文字模式相同,萤光幕上的 Y 座标是最上面一列为零,越下面越大,X 座标则和数学的定义相同。CX、DX、AL 值之范围与显示模式有关:


显示模式X 座标Y 座标颜色
40~3190~1990、1
50~3190~1990~3
60~6390~1990、1

AH=0DH/INT 10H 则是读取某一位置之点像,您必须指定 CX、DX,而 INT 10H 会传回该位置点像之颜色。


AH=0EH


这个子程序是使显示器像打字机一样的显示字符来,在前面用 AH=09H/INT 10H 和 AH=0AH/INT 10H 
都可以在萤光幕上显示字符,但是这两奘方式显示字符之后,光标位置并不移动,而 AH=0EH/INT 10H 
则会使光标位置移动,每显示一个字符,光标会往右移一格,假如已经到最右边了,则光标会移到最左边并移到下一列,假如已经移到最下面一列的最右边,则屏幕
会向上卷动。


AL 寄存器存要显示的字符,BH 为目前的显示页,如果是在图形模式,则 BH 须设为 0,假如是在图形模式下,也可以设定 BL 来表示文字的颜色,文字模式下的 BL 则无功能。


AH=0FH


这个服务程序是得到目前的显示模式,调用前只需使 AH 设为 0fh,当由 INT 10H 返回时,显示模式存于 AL 寄存器 ( 参考 AH=00H/INT 10H 的显示模式表 ),目前的显示页存于 BH 寄存器,总字符行数存于 AH 寄存器。




注一: 所谓属性是指字符的颜色、背景颜色、是否闪烁、有没有底线等性质。在彩色显示卡 ( CGA/EGA/VGA 等 ) 的文字模式中,颜色是用 4 个位表示,故可以表现出 16 种颜色,如下表:

二进制数颜色例子二进制数颜色例子
0000黑色black1000灰色gray
0001蓝色blue1001淡蓝色light blue
0010绿色green1010淡绿色light green
0011青色cyan1000淡青色light cyan
0100红色red1100淡红色light red
0101紫红色magenta1101淡紫红色light magenta
0110棕色brown1110黄色yellow
0111银色light gray1111白色white

在彩色显示器里,如 CGA、EGA、VGA 等,常用一个字节 ( 8 个位 ) 来表示文字颜色和背景颜色,通常以第 0~3 
位表示文字本身颜色;第 4~6 位表示背景颜色,背景颜色只有上表左栏的 8 种而已;第 7 个位,表示是否闪烁,0 表示不闪烁,1 表示闪烁。


但是在单色显示器里,如 MDA 和 Hercules 卡中,这些颜色表并无意义,所以属性解释方式不同,请看下表:

数值属性
00H空格,不显示任何数据
77H显示白色方块
07H正常的黑底白字
70H反白的白底黑字
01H加底线

trackback: http://www.itzhai.com/assembly-int-10h-description.html


            http://hi.baidu.com/oneorzero/blog/item/4db987ad6818950d4a36d62e.html


这个问题需要用到汇编语言编写程序,以下是实现该功能的汇编代码: ``` .model small .stack 100h .data num db ? .code mov ax, @data mov ds, ax mov ah, 01h ; 从键盘读入一个字符 int 21h sub al, 30h ; 将字符转换为数字 cmp al, 0 ; 判断输入是否为0 je exit cmp al, 9 ; 判断输入是否大于9 ja exit cmp al, 1 ; 判断输入是否小于1 jb exit test al, 01h ; 判断输入是否为偶数 jz even jmp odd even: inc al ; 将偶数加1变成奇数 odd: mov num, al ; 将输入的数字存入变量num mov cx, num ; 循环次数为输入的数字 mov si, 0 ; 初始化偏移量 mov di, num ; 初始化星号数量 mov ah, 02h ; 设置光标位置 mov bh, 0 ; 设置显示页 mov dl, '*' ; 设置显示字符 mov dh, 0 ; 第一行 int 10h ; 设置光标位置 inc si ; 偏移量加1 dec di ; 星号数量减1 loop1: mov ah, 02h ; 设置光标位置 mov dl, ' ' ; 设置显示字符为空格 int 10h ; 设置光标位置 add si, 2 ; 偏移量加2 mov ah, 02h ; 设置光标位置 mov dl, '*' ; 设置显示字符为星号 int 10h ; 设置光标位置 dec di ; 星号数量减1 cmp di, 0 ; 判断星号数量是否为0 jne loop1 mov ah, 02h ; 设置光标位置 mov dl, '*' ; 设置显示字符为星号 int 10h ; 设置光标位置 mov ah, 02h ; 设置光标位置 mov dh, 1 ; 第二行 int 10h ; 设置光标位置 mov cx, num ; 循环次数为输入的数字 mov si, 1 ; 初始化偏移量 mov di, num ; 初始化星号数量 loop2: mov ah, 02h ; 设置光标位置 mov dl, ' ' ; 设置显示字符为空格 int 10h ; 设置光标位置 add si, 2 ; 偏移量加2 mov ah, 02h ; 设置光标位置 mov dl, '*' ; 设置显示字符为星号 int 10h ; 设置光标位置 dec di ; 星号数量减1 cmp di, 0 ; 判断星号数量是否为0 jne loop2 exit: mov ah, 4ch ; 退出程序 int 21h end ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值