外中断03 - 零基础入门学习汇编语言71
第十五章:外中断03
让编程改变世界
Change the world by program
继续编写int 9中断例程
第三步:如果是Esc键的扫描码,改变显示的颜色后返回。。。。。。
那么,下一个问题:如何改变显示的颜色?
显示的位置是屏幕的中间,即第12行40列,显存中的偏移地址为:160*12+40* 2。所以字符的ASCII码要送入b800:160*12+40*2处。 而b800:160*12+40*2+1 处是字符的属性,我们只要改变此处的数据就可以改变在b800:160*12+40*2 处显示的字符的颜色了。 该程序的最后一个问题是,要在程序返回前,将中断向量表中的ini 9中断例程的入口地址恢复为原来的地址。否则程序返回后,别的程序将无法使用键盘。 经过分析,整理得到完整的程序代码:相关代码下载(http://bbs.fishc.com) 注意,本章中所有关于键盘的程序,因要直接访问真实的硬件,则必须在DOS实模式下运行。 在Windows 2000 的DOS 方式下运行,会出现一些和硬件工作原理不符合的现象。检测点15.1
安装新的 int 9中断例程
下面,我们将安装一个新的int 9中断例程,使得原int 9中断例程的功能得到扩展。 任务:安装一个新的int 9中断例程 功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理。我们进行一下分析:
(1)改变屏幕的显示颜色 怎么改变屏幕的颜色呢? 学习win 32 的朋友立马百度:有相应的函数吗? 其实,我们认真考虑下原理应该不难:改变从B800 开始的4000 个字一节中的所有奇地址单元中的内容,当前屏幕的显示颜色即发生改变。 实现 - - - - > > > 改变屏幕的显示颜色程序[codesyntax lang="asm"]mov ax,0b800h mov es,ax mov bx,1 mov cx,2000 s: inc byte ptr es:[bx] add bx,2 loop s[/codesyntax] (2)对于其他键则照常处理,我们可以调用原int 9中断处理程序,来处理其他的键盘输入。 (3)原int 9 中断例程入口地址的保存 因为在编写的新int 9中断例程中要调用原int 9中断例程,所以,要保存原int 9中断例程的入口地址。保存在哪里?显然不能保存在安装程序中, 因为安装程序返回后地址将丢失。我们因此又将目标锁定在0:200单元处。 (4)新int 9中断例程的安装 这个问题在前面己经详细讨论过。 我们可将新的int 9中断例程安装在0:204 处。