汇编中断知识之INT 1CH
最近在编写汇编程序遇到一个使用INT 1CH的程序,INT 1CH是实现定时或周期性的工作,难道INT 1CH就像INT 21H一样直接调用它里面的功能号吗?下面就通过一个程序简单的看看传说中的INT 1CH的.这个程序是实现屏幕背景颜色1秒钟变换一次的实验.
1.INT 1CH中断
INT 1CH其实是调用INT 21H中的25号功能:置中断向量AL=中断号,DS:DX=入口,同时INT21H中的35号功能:取中断向量,AL=中断号,ES:BX=中断程序入口.
2.该程序中的INT1CH
该程序中是调用子程序设置背景颜色,子程序中使用STI打开中断,CLI关中断,IRET中断返回.
INT 1CH系统中断是每秒发生18.2次,即调用每秒它18次,所以Count初值赋值为1,先DEC减1,为0执行一次背景色输出,即运行程序就输出背景色.然后Count赋值为18,Count减1,当它为0时变换背景颜色.(1秒)然后继续Count赋值为18,继续执行中断周期调用.
3.设置背景颜色
调用BIOS INT 10H的06号功能设置屏幕初始化或上卷:属性如下,故背景只有RGB(取0或1)共组合成8种颜色.故Color初值为1FH,每次加8刚好变换成另一种颜色.
详细的代码及注释如下:
DATAS SEGMENT Color DB 1FH ;定义的背景颜色表Count DW 1 ;Count计数1秒是变换背景
DATAS ENDSSTACKS SEGMENT STACK 'S';堆栈段代码DW 80 DUP(0)
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FARMOV AX,DATASMOV DS,AX ;将数据段DATAS存入DS中
;------------------------------------------------------------------ MOV DX,SEG INT_1CH ;SEG标号段地址MOV DS,DXLEA DX,INT_1CH ;调用子函数INT_1CH 取偏移地址 ;AH=25H功能:置中断向量AL=中断号 DS:DX=入口MOV AH,25H MOV AL,1CH ;设置新的1CH中断向量INT 21H;退出程序并返回操作系统MOV AH,4CHINT 21H
MAIN ENDP
;------------------------------------------------------------------
;子程序:显示背景 FAR(主程序和子程序不在同一代码段)
INT_1CH PROC FARPUSH AX ;保存寄存器PUSH BXPUSH CXPUSH DXPUSH DSSTI ;开中断MOV AX,DATASMOV DS,AX ;将数据段DATAS存入DS中;------------------------------------------;- INT 1CH系统中断每秒发生18.2次 -;- Count计数至18为1秒变换背景颜色 -;- Count初值为1,先减1执行一次显示蓝色背景 -;- 执行时赋值为18,每次减1,减至0更换背景色 -;------------------------------------------DEC Count ;Count初值为1,先减1JNZ Exit ;JNZ(结果不为0跳转) 否则Count=0执行背景色输出
;------------------------------------------------------------------ ;调用BIOS10H的06号中断设置屏幕初始化或上卷;--------------------------------;- AL=上卷行数 AL=0全屏幕为空白 -;- BH=卷入行属性 -;- CH=左上角行号 CL=左上角列号 -;- DH=右下角行号 DL=右下角列号 -;-------------------------------- ;----------------------------------;- BL的颜色属性为IRGB|IRGB -;- 高4位是背景色 低4位是前景色 -;- I=高亮 R=红 G=绿 B=蓝 共8色 -;----------------------------------MOV AH,6 ;清全屏MOV AL,0MOV BH,Color ;起始设置为蓝底白字 1FH=0001(蓝色)|1111B 详解见上表MOV CX,0MOV DX,184FH ;(全屏)表示18行4F列INT 10HADD Color,8 ;0001|1111+8=27H=0010(绿色)|0111 同理加8 MOV Count,18 ;计数至18(1秒)重新开始,赋值为18减至0执行变色
;------------------------------------------------------------------
Exit: CLI ;关中断POP DSPOP DXPOP CXPOP BXPOP AX ;恢复寄存器 IRET ;中断返回
INT_1CH ENDP
;------------------------------------------------------------------
CODES ENDS
END MAIN
它的运行结果是8中背景颜色不断的变换:
这仅仅是作者自己的一些想法和程序,有错误或不足的地方希望大家原谅.同时希望能让大家更加清楚的认识到汇编中的:INT ICH、周期性中断变换、背景颜色的设置等知识.同时该代码参考了自己老师的课件知识.
BY:Eastmount原创于2013-5-8
汇编中断知识之INT 1CH相关推荐
- Golang 汇编入门知识总结
作者:ivansli,腾讯 IEG 运营开发工程师 在深入学习 Golang 的 runtime 和标准库实现的时候发现,如果对 Golang 汇编没有一定了解的话,很难深入了解其底层实现机制.在这里 ...
- 键盘I/O中断调用(INT 16H)和常见的int 17H、int 1A H
说明:下文为转载的,下文中的"扩展码"其实就是"扫描码(scan code)"的意思 键盘扫描码:是每个键盘生产厂家为自己所生产的键盘设置的扫面方式,目的检测是 ...
- intel 汇编中断解释
汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...
- 汇编基础知识之输入输出
最近在学习汇编程序,但输入输出是我遇到的第一个难题,这里就简单讲诉一些汇编的基本输出输出字符串.字符.输出数字等知识,仅供大家学习.这只是一些基础知识,汇编高手亦可以温习一些基础的输入输出知识. 一. ...
- c语言 汇编中断程序,ARM7 C语言嵌入汇编开关中断
__inline void IRQEnable(void) { int tmp; __asm { MRS tmp,CPSR ///读取CPSR的值 BIC tmp,tmp,#0x80 // ...
- BIOS中断大全:“INT 10H ~ INT 1AH”
BIOS中断: 1.显示服务(Video Service--INT 10H) 00H -设置显示器模式 01H -设置光标形状 02H -设置光标位置 03H -读取光标信息 04H -读取光笔位置 ...
- 尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4984530.html 公司引擎目前是使用CPU计算骨骼动画(采用了D3DX提供的函数 ...
- 汇编排序知识之冒泡排序
这里简单介绍汇编中是如何进行冒泡排序的,首先先回顾C语言中的冒泡排序知识及算法,再讲解汇编实现的过程,更好的巩固和联系了编程的思想. 一. C语言--冒泡排序 冒泡排序的基本概念: 依次比较相邻的两个 ...
- 8086的内中断典型如int 21h的分析
除法错误:0执行div指令产生除法溢出 单步执行:1 执行into指令:4 执行int n指令,立即数n为中断类型码 CPU接到中断信息:执行中断处理程序 中断信息和入口地址联系:中断向量表共1024 ...
最新文章
- 超长JVM总结,面试必备
- 如何用纯 CSS 创作一个单元素抛盒子的 loader
- 【已解决】Dreamweaver修改快捷键
- (背)顺序容器的操作-向容器中插入元素详细总结
- I/O复用函数的使用——epoll
- Testin云測与ARM 战略合作:推动全球移动应用加速进入中国市场
- Hadoop框架:HDFS读写机制与API详解
- 07_Python的控制判断循环语句1(if判断for循环)_Python编程之路
- linux增加临时编译bin,Linux Rpmbuild 包制作
- 空间说说html,适合发空间说说的经典心情短语
- apex创建快捷方式_盖伦下载的Origin平台、Apex游戏手动添加快捷方式
- HttpSession详解(简称session)
- centos防火墙的关闭,硬盘挂载,yum配置,创建实验快照
- 邮件的服务器密码不正确,企业邮箱foxmail提示接收密码错误解决方法
- 从零开始学编程——环境配置
- EXCEL-日常技巧整理-2-单元格拆分后原数据填充
- 2021-08-29 网安实验-网络协议栈渗透测试之DDOS攻击之CC攻击
- 【破解】PyCharm2018专业版激活(激活到2100年)
- 惠普HP LaserJet M5035 打印机驱动
- java编辑遗忘曲线代码_通过excel vba 实现艾宾浩斯遗忘曲线的复习提醒