| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
用汇编编写DOS下的内存驻留程序(4)
作者:未知    文章来源:网络    点击数:    更新时间:2006-7-19
  个调用原先键盘中断处理程序的模拟中断.因为原先的键盘中断处理程序必须使用INT的方式调用,而不是使用CALL的指令调用;因此必须先使用PUSHF把CPU状态标志压入堆栈中,然后配合上CALL来模拟INT的动作.
 注意一点,assume ds:nothing这一行是汇编指示,而不是程序代码.它是用来告诉汇编器在产生下一行机器码时,不要更会目前DS的内容;这样做才可以让汇编器为下一个指令产生双字的地址值.
 当Call Old_Keyboard_IO指令执行时,控制权就转移到旧的键盘中断处理程序.而当这个中断调用执行完时,它就执行IRET指令,于是控制权又交还到目前的驻留程序.这样做,不但可以让原先的键盘中断程序包为我们工作,同时也可以掌握控制权.如果只使用IMP指令,跳到旧的键盘中断处理程序包去,而不把CPU状态标志推入堆栈中,那么一旦执行到IRET时,就真正返回到中断的状态.
 上面程序中的第三部分是启动代码部分,在这一部分中,设定好新的中断矢量,同时把旧的中断矢量存放在驻留程序代码中,以便让驻留程序使用.
4.7 检查驻留程序
 到目前为止,已经成功地把驻留程序加在应用程序和DOS的键盘输入之间;接下来可以修改输入的字符.在这一节中,我们准备截获键盘的输入,并且把"Y"改成"y","y"改成"Y".
 以下是程序代码:
     cseg segment
      assume cs:cseg,ds:cseg
      org  100h
     start: 
      jmp Initialize
     Old_Keyboard_IO dd ?           
     new_keyboard_io proc far
      assume cs:cseg,ds:cseg
      sti     
           ;Section 1
      cmp ah,0
      je ki0
      assume ds:nothing
      jmp  Old_Keyboard_IO
           ;Section 2
     ki0:
      pushf
      assume  ds:nothing
      call  Old_Keyboard_IO
      cmp  al,’y’
      jne  ki1
      mov  al,’y’
      jmp  kidone
     ki1: 
      cmp  al,’Y’
      jne  kidone
      mov  al,’y’
     kidone:      
      iret
     new_keyboard_io endp 
           ;Section 3
     Initialize:
      assume cs:cseg,ds:cseg
      mov bx,cs
      mov ds,bx
      mov al,16h
      mov ah,35h
 &

上一页  [1] [2] [3] [4] [5] [6] 下一页


相关文章