汇编中断知识之INT 1CH
来源:互联网 发布:雅可比矩阵的性质 编辑:程序博客网 时间:2024/06/06 04:04
最近在编写汇编程序遇到一个使用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 ColorDB1FH ;定义的背景颜色表 Count DW 1 ;Count计数1秒是变换背景 DATAS ENDS STACKS SEGMENT STACK 'S' ;堆栈段代码 DW 80 DUP(0)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSMAINPROC FAR MOV AX,DATAS MOV 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,4CH INT 21HMAINENDP;------------------------------------------------------------------;子程序:显示背景 FAR(主程序和子程序不在同一代码段)INT_1CHPROCFAR PUSH AX ;保存寄存器 PUSH BX PUSH CX PUSH DX PUSH DS STI ;开中断 MOV AX,DATAS MOV DS,AX ;将数据段DATAS存入DS中 ;------------------------------------------ ;- INT 1CH系统中断每秒发生18.2次 - ;- Count计数至18为1秒变换背景颜色 - ;- Count初值为1,先减1执行一次显示蓝色背景 - ;- 执行时赋值为18,每次减1,减至0更换背景色 - ;------------------------------------------ DEC Count ;Count初值为1,先减1 JNZ 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色 -;----------------------------------MOVAH,6 ;清全屏MOVAL,0MOVBH,Color ;起始设置为蓝底白字 1FH=0001(蓝色)|1111B 详解见上表MOVCX,0MOVDX,184FH ;(全屏)表示18行4F列INT10HADD Color,8 ;0001|1111+8=27H=0010(绿色)|0111 同理加8MOV Count,18 ;计数至18(1秒)重新开始,赋值为18减至0执行变色;------------------------------------------------------------------ Exit: CLI ;关中断POPDSPOPDXPOPCXPOPBX POPAX ;恢复寄存器 IRET ;中断返回INT_1CH ENDP;------------------------------------------------------------------ CODES ENDSEND MAIN
它的运行结果是8中背景颜色不断的变换:
这仅仅是作者自己的一些想法和程序,有错误或不足的地方希望大家原谅.同时希望能让大家更加清楚的认识到汇编中的:INT ICH、周期性中断变换、背景颜色的设置等知识.同时该代码参考了自己老师的课件知识.
BY:Eastmount原创于2013-5-8
- 汇编中断知识之INT 1CH
- 汇编中断知识之INT 1CH
- 王爽汇编 实验13编写int 7cH中断例程(1)
- 王爽 汇编 实验16 增加键盘中断调用int 7ch中断例程
- 汇编,编写并安装int 7ch中断例程,功能为完成loop指令的功能
- 汇编: int 3, ----------->软件中断
- 转换大小写int 7ch 中断处理程序
- NJUPT 微机 中断系统 日时钟中断之替换1CH实现字符串动态显示
- 汇编学习历程(int中断学习)
- 内中断、int指令、端口 x86汇编
- 自学计算机中断知识--INT 21
- 自己编写int 7ch中断实现loop指令在屏幕显示80个!
- 汇编学习之中断问题
- GNU ARM汇编--(五)中断汇编之嵌套中断处理
- GNU ARM汇编--(五)中断汇编之嵌套中断处理
- GNU ARM汇编--(五)中断汇编之嵌套中断处理
- int indexOf(int ch,int fromIndex)函数
- 汇编中的10H中断int 10h详细说明
- 软件工程之软件开发流程
- Wine中UE32工具栏乱码问题解决方法
- Linux 基础 第一章
- 安霸SPI 剖析
- 深入了解超线程、双核CPU、双CPU与单CPU的区别
- 汇编中断知识之INT 1CH
- java的HashCode方法
- Android - Binder机制 - client和普通service交互
- php性能监测模块XHProf[转]
- Android - Binder机制 - Binder框架总结
- 稳定排序和不稳定排序
- 1
- C++标准注释原则 - 基于doxygen的C++注释
- Android - Binder机制 - ProcessState和IPCThreadState