-298- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
DS:DX=新的中断服务程序入口地址 调 用:INT 21H 返 回:无 |
|||||||||||||||||||||
我们一般提倡使用系统功能调用设置中断服务程序入口,这样做有利于增强程序的可移植性。 还有一点需要注意的是在进入中断服务程序之后首先要保存一些需要使用的寄存器,在服务程序结束时再恢复这些寄存器的原值。这样可以保证被中断的程序能正确的运行。 给出的示例程序虽然能够正确地处理F11和F12两个功能键,但是它有一个致命的缺陷,就是除了F11和F12两键之外,其它的键全部"罢工"了。 我们编制的这个中断服务程序比较的简单,它只能处理F11和F12两个键,而不能处理其它的键。不过当我们在中断向量表中重新设定09H中断服务程序的入口后,这个不完善的中断服务程序就完全接管了键盘。这相当于我们彻底推翻了原09H中断服务程序的"专制统治",建立了一个"共和政府"。遗憾的是这个"共和政府"的领导者"NEW09"的能力实在是有限,根本领导不了键盘上的"全体人民"。 如果需要保持键盘的原功能,那么就需要编制一个很完善的09H中断服务程序,这样做的工作量是很大的。难道非这样做不可吗? 其实原来的09H中断服务程序虽然"专制",但是它的能力还是比较强的。试想如果我们不"完全推翻"原09H中断服务程序,而是让"NEW09"与原来的服务程序组成一个"君主立宪"政府,由原09H中断服务程序负责键盘上多数"人民",由"NEW09"负责F11与F12这两个"少数民族",互相合作,这样就能保持键盘的原功能了。 依照这个思路,可以把程序TSR.ASM修改成下面的模样: |
|||||||||||||||||||||
NEW09.ASM code start: old09 new09: |
segment assume org jmp dd push push push push push mov mov mov in push |
cs:code,ds:code 100h short install ? ax bx cx di es ax,0b800h es,ax di,0 al,60h ax |
;转驻留部分的安装程序 ;保存原09H中断向量 ;新的09H中断服务程序 ;保存寄存器 ;ES寄存器指向显示缓存段 ;DI寄存器指向显示缓存首部 ;取得扫描码 ;并存入堆栈 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |