int 10h中断例程
转自汇编--INT 10H功能
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*25 | 2 |
01 | 文字 | 40*25 | 16 |
02 | 文字 | 80*25 | 2 |
03 | 文字 | 80*25 | 16 |
04 | 图形 | 320*200 | 2 |
05 | 图形 | 320*200 | 4 |
06 | 图形 | 640*200 | 2 |
AH=01H
您可以把光标想成一个小的矩形,平时这个矩形扁平位于某字底部,但藉由此功能可以改变其大小与位置。光标起始处与终止处分别由 CL 与 CH 的 0 到 4 位表示,参考下图:
而 CH 的第 7 位必须是 0,第 5、6 位表示光标属性:
位 6 位 5 属性0 0 正常0 1 隐形1 01 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 座标 | 颜色 |
4 | 0~319 | 0~199 | 0、1 |
5 | 0~319 | 0~199 | 0~3 |
6 | 0~639 | 0~199 | 0、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 | 黑色 | black | 1000 | 灰色 | gray |
0001 | 蓝色 | blue | 1001 | 淡蓝色 | light blue |
0010 | 绿色 | green | 1010 | 淡绿色 | light green |
0011 | 青色 | cyan | 1000 | 淡青色 | light cyan |
0100 | 红色 | red | 1100 | 淡红色 | light red |
0101 | 紫红色 | magenta | 1101 | 淡紫红色 | light magenta |
0110 | 棕色 | brown | 1110 | 黄色 | yellow |
0111 | 银色 | light gray | 1111 | 白色 | white |
在彩色显示器里,如 CGA、EGA、VGA 等,常用一个字节 ( 8 个位 ) 来表示文字颜色和背景颜色,通常以第 0~3 位表示文字本身颜色;第 4~6 位表示背景颜色,背景颜色只有上表左栏的 8 种而已;第 7 个位,表示是否闪烁,0 表示不闪烁,1 表示闪烁。
但是在单色显示器里,如 MDA 和 Hercules 卡中,这些颜色表并无意义,所以属性解释方式不同,请看下表:
数值 | 属性 |
00H | 空格,不显示任何数据 |
77H | 显示白色方块 |
07H | 正常的黑底白字 |
70H | 反白的白底黑字 |
01H | 加底线 |
int 10h中断例程相关推荐
- 汇编试验十五:安装新的int 9中断例程
安装新的int 9中断例程(按'A'键后显示满屏幕的'A') int 9 是外中断,同样,程序编写还是和其他中断例程类似,安装(复制),调用: 不同点是在于,他要从端口读取数据60h, Source ...
- 汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17
磁盘读写 3.5 英寸软盘分为上下两面,每面有 80 个磁道,每个磁道又分为 18 个扇区,每个扇区的大小为 512 个字节.下面的磁盘读写均以 3.5 英寸软盘为例. 在读写扇区的时候,要给出面号. ...
- 汇编语言随笔(15)- 对键盘输入进行处理(int 9 和 int 16h 中断例程)
键盘输入 1,前面讲过, int 9 中断例程负责对键盘输入进行处理,具体为:从 60h 端口读出扫描码,并将其转化为相应的ASCII码或状态信息,一起存储到内存的指定空间(键盘缓冲区或状态字节)中. ...
- int 9中断例程-;在屏幕中间依次显示'a'~'z',并可以让人看清。 在显示的过程中,按下Esc键后,改变显示的颜色...
;在屏幕中间依次显示'a'~'z',并可以让人看清. ;在显示的过程中,按下Esc键后,改变显示的颜色 assume cs:code stack segment db 128 dup(0) stack ...
- 安装一个新的int 9中断例程【在DOS下,按Tab建后改变当前屏幕的显示颜色,其它键照常处理】...
;任务: ; 安装一个新的int 9中断例程 ;功能: ; 在DOS下,按Tab建后改变当前屏幕的显示颜色,其它键照常处理 1 assume cs:code 2 3 stack segment 4 d ...
- 实验15 安装新的int 9中断例程
这个实验综合了外中断,内中断,应该是全书最精华的一个实验,常常思考整个程序的流程,指导这个流程觉得熟悉.自然. 代码如下: assume cs:code, ss:stackstack segmentd ...
- 汇编语言随笔(11)- int 指令(返回到应用程序的中断例程),实验13(编写、应用中断例程)
int 指令 int 指令的格式为:int n,n为中断类型码.这里由 n 显式的给出了调用哪一个中断处理程序. CPU 的中断过程仍然是: (1)取中断类型码n (2)标志寄存器入栈,I ...
- 汇编--INT 10H功能
汇编–INT 10H功能 INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内.使用 INT 10H 中 ...
- Int 10 中断功能 详解
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内.使用 INT 10H 中断服务程序时,先指定 AH ...
- BIOS INT 10中断功能
INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内.使用 INT 10H 中断服务程序时,先指定 AH ...
最新文章
- pip install scipy和matplotlib报错的问题详解:(pip install其它时报错通用)
- BigDecimal divide方法结果为无限小数问题
- McAfee----McAfee 2008 中文版
- SQL Server 事务隔离级别的解析
- hashmap,hashTable concurrentHashMap 是否为线程安全,区别,如何实现的
- 三种单例模式的C++实现
- Matlab归一化函数(mapminmax)
- 判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)...
- Firefox Developer Edition已阻止此网站安装未经验证的附加组件的解决办法
- python123数值运算_python123中 Hello World的条件输出 和数值运算
- 收银系统服务器有什么好处,生鲜超市收银系统软件怎么选?收银系统能带来什么好处?...
- h5如何上传文件二进制流_Hadoop如何将TB级大文件的上传性能优化上百倍?
- atitit.元编程总结 o99
- 漏洞C:/Windows/Fonts/csrss.exe文件找不到简单查找方法
- 计算机445端口怎么打开,445端口,详细教您445端口怎么关闭
- 最常见的社会工程攻击
- DS18B20温度传感器c语言编程,单片机中使用DS18B20温度传感器C语言程序(参考7)(DS18B20 测...
- 外接硬盘在电脑中不显示的解决方案
- 香农定理与奈奎斯特定理
- 计算机uc,UC浏览器
热门文章
- [HAOI2009]毛毛虫(树形dp)
- 让我们旋转跳跃不停歇~~~当3D打印遇上八音盒!(一)
- 上海招聘 | 上海人工智能实验室:自动驾驶感知算法研究员、实习生等
- arcgis取消投影_【坐标系杂谈】投影后的数据如何去除投影?
- 计算机随机抽样的方法有,卫生统计学四种随机抽样方法
- 360路由器v2刷第三方固件_路由器刷固件图文教程,刷机OpenWrt第三方固件,路由器升级固件...
- 理解Aode Air,理解RIA开发
- 【python 作日期的折线图和柱状图组合图】
- 现在公开一个DHT网络爬虫网络爬虫供大家一起交流
- 第6章 项目进度管理