目录 上一页 下一页 附录A

-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

目录 上一页 下一页 附录A