LINUX --- 中断 --- INT 0x10

删除线格式

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置显示页AL = 显示页号
5屏幕初始化或上卷
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属性
00正常
01隐形
10
11闪烁缓慢

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加底线
详细解释 org 7c00h ; MBR程序必须从0x7c00开始 mov ah, 0x0e ; BIOS中断0x10功能号,用于在屏幕上输出字符 mov al, 'W' ; 输出自己的姓名拼音 int 10h mov al, 'A' int 10h mov al, 'N' int 10h mov al, 'G' int 10h mov al, ' ' int 10h mov al, 'X' ; 输出自己的学号 int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov al, 'X' int 10h mov bx, 0 ; 将ASCII码总和初始化为0 mov al, 'W' ; 计算姓名字符的ASCII码总和 add bx, al mov al, 'A' add bx, al mov al, 'N' add bx, al mov al, 'G' add bx, al mov al, 'X' ; 计算学号字符的ASCII码总和 add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov al, 'X' add bx, al mov ah, 0x0e ; 输出ASCII码总和的十进制形式 mov al, ' ' int 10h mov al, 'A' int 10h mov al, 'S' int 10h mov al, 'C' int 10h mov al, 'I' int 10h mov al, 'I' int 10h mov al, ':' int 10h mov cx, 10 ; 将ASCII码总和转换为十进制形式 mov dx, 0 div cx add dl, 48 mov ah, 0x0e mov al, dl int 10h mov ah, 0x0e mov al, dh add al, 48 int 10h jmp $ ; 无限循环 times 510-($-$$) db 0 ; MBR程序必须是512字节,填充0以达到字节数 dw 0xaa55 ; MBR程序结尾的引导标记 在运行该程序后,计算机屏幕将会输出 WANG XXXXXXX,其中 X 代表你的学号。接着,在屏幕上会输出 ASCII:xxx,其中 xxx 是自己姓名和学号的 ASCII 码总和。
最新发布
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值