当前位置: 网学 > 编程文档 > 汇编语言 > 正文

用汇编编写DOS下的内存驻留程序(4):基本的驻留程序

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式
p;    mov word ptr Old_Keyboard_IO,es
           ;End Section 3
      mov dx,offset new_keyboard_io
      mov al,16h
      mov ah,25h
      int 21h
      mov dx,offset Initialize
      int 27h
     cseg ends
      end start
 上面的程序中,第一部分是两个字(Double word),这是用来存放旧的键盘中断矢量.因为COM的程序都只限制在一个段中,因此数据段和代码段都在同一段中.而原先的中断处理程序和我们所编写的中断处理程序未必会在同一段中,所以必须使用双字来储存地址值.
 双字Old_Keyboard_IO可以放在驻留程序中的任何地方;但是一般来说,放在Jmp Initialize 之后会比较方便;因为如果必须使用DEBUG来检查程序的话,可以比较容易调试.
 上面程序中的第二部分是驻留程序的主体,其中包括了一个调用原先键盘中断处理程序的模拟中断.因为原先的键盘中断处理程序必须使用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''
&

  • 上一篇资讯: 高级汇编语言技术
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号