![]() | 第11章 更高级的技术 | -303- | |||||||||||||||||||
按下[PrtSc]键,此时屏幕上所有的文字都被保存在一个名为TEXT.SCR的文本文件中,使用TYPE命令或EDIT程序可以观察到抓到的内容。 (3)08H中断 前面讨论定时器时对08H中断做过介绍,这个中断是定时电路的通道0控制,每一秒中产生18.2次,每两次之间的时间间隔为55Ms。它的服务程序控制着BIOS数据区中的一个双字变量,每执行一次就将这个变量加1。同时它还控制着软盘驱动器的马达,软驱工作完毕后总要隔2秒钟左右才会停转,这2秒的延时就是由08H中断控制的。 重新编制08H中断服务程序可以很方便地完成精确定时,最重要的是用这种方法定时不需要CPU循环等待。如果把CPU比作一个正在忙于工作的人,那么这个"人"实际上是一边做本职工作一边每隔55Ms看一下"表"。当到达预定时间后他会转去做另一件事,然后再回来继续工作。请大家仔细分析下面这个程序的运行情况: |
|||||||||||||||||||||
TIMER.ASM code main counter attrib old08 new08: |
segment assume org proc jmp db db dd push push push push pushf call mov inc cmp jnz mov mov mov mov |
cs:code,ds:code 100h near install ? 0 ? ax cx es di dword ptr cs:[old08] al,cs:[counter] al al,18 exit ax,0b800h es,ax di,0 al,cs:[attrib] |
;跳转至驻留程序的安装部分 ;定义一个计数器 ;字符属性字节 ;原08H中断向量 ;保存寄存器 ;标志寄存器入栈 ;调用原08H中断服务程序 ;取得计数值 ;计数值加1 ;计到1秒钟了吗? ;未到1秒钟,转EXIT退出服务程序 ;ES:DI向显示缓冲区 ;取得属性字节 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |