最近在编写汇编程序遇到一个使用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相关推荐

  1. Golang 汇编入门知识总结

    作者:ivansli,腾讯 IEG 运营开发工程师 在深入学习 Golang 的 runtime 和标准库实现的时候发现,如果对 Golang 汇编没有一定了解的话,很难深入了解其底层实现机制.在这里 ...

  2. 键盘I/O中断调用(INT 16H)和常见的int 17H、int 1A H

    说明:下文为转载的,下文中的"扩展码"其实就是"扫描码(scan code)"的意思 键盘扫描码:是每个键盘生产厂家为自己所生产的键盘设置的扫面方式,目的检测是 ...

  3. intel 汇编中断解释

    汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...

  4. 汇编基础知识之输入输出

    最近在学习汇编程序,但输入输出是我遇到的第一个难题,这里就简单讲诉一些汇编的基本输出输出字符串.字符.输出数字等知识,仅供大家学习.这只是一些基础知识,汇编高手亦可以温习一些基础的输入输出知识. 一. ...

  5. c语言 汇编中断程序,ARM7 C语言嵌入汇编开关中断

    __inline void IRQEnable(void) { int tmp; __asm { MRS tmp,CPSR       ///读取CPSR的值 BIC tmp,tmp,#0x80 // ...

  6. BIOS中断大全:“INT 10H ~ INT 1AH”

    BIOS中断: 1.显示服务(Video Service--INT 10H) 00H -设置显示器模式 01H -设置光标形状 02H -设置光标位置 03H -读取光标信息 04H -读取光笔位置 ...

  7. 尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4984530.html 公司引擎目前是使用CPU计算骨骼动画(采用了D3DX提供的函数 ...

  8. 汇编排序知识之冒泡排序

    这里简单介绍汇编中是如何进行冒泡排序的,首先先回顾C语言中的冒泡排序知识及算法,再讲解汇编实现的过程,更好的巩固和联系了编程的思想. 一. C语言--冒泡排序 冒泡排序的基本概念: 依次比较相邻的两个 ...

  9. 8086的内中断典型如int 21h的分析

    除法错误:0执行div指令产生除法溢出 单步执行:1 执行into指令:4 执行int n指令,立即数n为中断类型码 CPU接到中断信息:执行中断处理程序 中断信息和入口地址联系:中断向量表共1024 ...

最新文章

  1. 超长JVM总结,面试必备
  2. 如何用纯 CSS 创作一个单元素抛盒子的 loader
  3. 【已解决】Dreamweaver修改快捷键
  4. (背)顺序容器的操作-向容器中插入元素详细总结
  5. I/O复用函数的使用——epoll
  6. Testin云測与ARM 战略合作:推动全球移动应用加速进入中国市场
  7. Hadoop框架:HDFS读写机制与API详解
  8. 07_Python的控制判断循环语句1(if判断for循环)_Python编程之路
  9. linux增加临时编译bin,Linux Rpmbuild 包制作
  10. 空间说说html,适合发空间说说的经典心情短语
  11. apex创建快捷方式_盖伦下载的Origin平台、Apex游戏手动添加快捷方式
  12. HttpSession详解(简称session)
  13. centos防火墙的关闭,硬盘挂载,yum配置,创建实验快照
  14. 邮件的服务器密码不正确,企业邮箱foxmail提示接收密码错误解决方法
  15. 从零开始学编程——环境配置
  16. EXCEL-日常技巧整理-2-单元格拆分后原数据填充
  17. 2021-08-29 网安实验-网络协议栈渗透测试之DDOS攻击之CC攻击
  18. 【破解】PyCharm2018专业版激活(激活到2100年)
  19. 惠普HP LaserJet M5035 打印机驱动
  20. java编辑遗忘曲线代码_通过excel vba 实现艾宾浩斯遗忘曲线的复习提醒

热门文章

  1. SQLPLUS命令的使用大全
  2. Python【每日一问】16
  3. 专注力 化繁为简的惊人力量
  4. 虚幻4 ue4 学习笔记pwan篇 1.4 pawn结合UPawnMovementComponent类 移动组件实现 移动球体添加物理碰撞...
  5. C# 两时间,时间间隔
  6. web页面优化之动态加载js和文件
  7. Android 访问本地 HTML
  8. C#静态变量和非静态变量的区别
  9. 模块间接口设计的原则
  10. c++ 不允许使用不完整的类型_Python入门高级教程--Python?变量类型