-304- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
loop1: exit: install: main code |
mov inc stosb loop inc and mov mov mov pop pop pop pop iret mov int mov mov mov mov int mov int endp ends end |
cx,2000 di loop1 al al,0fh cs:[attrib],al al,0 byte ptr cs:[counter],al di es cx ax ax,3508h 21h word ptr [old08],bx word ptr [old08+2],es ax,2508h dx,offset new08 21h dx,offset install 27h main |
;准备修改屏幕显示属性 ;DI寄存器指向属性字节 ;修改字符属性 ;转LOOP1继续 ;改变属性字节 ;防止属性字节超过16 ;将改变后属性字节送回内存备用 ;准备将计数器清0 ;将AL寄存器中的值存入计数器 ;恢复寄存器 ;中断返回 ;取得原08H中断向量 ;并将其保存至内存中 ;设置新的08H中断向量 ;结束程序并驻留 |
||||||||||||||||||
能够把DOS系统死板的屏幕显示变得有趣一些其实是一件很简单的工作,就象TIMER程序,运行之后屏幕上显示的文字每隔1秒钟就会改变一次颜色,一闪一闪的很好玩。这个程序充分反映了通过08H中断完成定时可以不干扰CPU进行其它工作这个事实。运行这个程序后大家可以进行其它的任何工作,屏幕颜色的改变不会对用户的工作产生任何干扰。 这个程序也是需要同原08H中断服务程序共同工作的,不过它并没有使用JMP指令转去执行原服务程序,而是采用了CALL指令。从"寻址方式"上看CALL指令与JMP指令的用法是完全一样的,但是有一点不同的是CALL指令之前加了一个"PUSHF"指令。为什么要先把标志寄存器压进堆栈呢? |
|||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |