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

用汇编编写DOS下的内存驻留程序(3):中断矢量

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式
何意义,而造成整个系 统死机.因此我们可以在设置中断矢量时,让中断无效,譬如:
    mov ax,0
    mov es,ax
    cli
    mov word ptr es:24,offset Keyboard
    mov word ptr es:26,seg Keyboard
  上面的做法在大部分的情况下都可以正确地执行.但是CLI这个指令无法停止NMI中断(不可屏蔽中断),因此如果发生NMI中断时就 没用办法.下面的这一种做法虽然比较复杂,但是对于所有的中断都有效,这包括了NMI中断在内:
    mov word ptr kbd-ptr[0],offset Keyboard
    mov word ptr kbd-ptr,seg Keyboard
    mov di,0      ;Use Di to Set ES to zero
    mov es,di      ;Set ES to destination segment
    mov di,24      ;Set DI to destination offset
    mov si,offset kbdptr    ;set SI to source offset
    mov cx,2      ;Set word count to 2
    cld       ;Set direction to forward   
    cli        ;Disable interrupts
    rep movsw     ;Copy the new vector
    sti       ;Enable interrupts
    kbdptr  dd  ?
  上面的程序中,kbdptr是两个字节(WORD)的指针(Pointer),其中包含了键盘 中断处理程序的起始志趣值.REP这个指令将根据寄存 器CX所设置的次数来重复执行MOVSW,而整个指令就如同单一的指令一样.NMI中断不能够发生在一个完整的指令中.因为地址值搬移的操 作都能包含在一个单一指令中,因此可以免除任何中断的干扰.

 3.3.2 使用DOS来设置中断矢量
  因为要想安全地设置中断矢量需要一些技巧,因此DOS提供了一项特殊的服务,以帮助程序人员安全地设置中断矢量,如果只使用 DOS所提供的这项服务来设定中断矢量的话,那么就不必担心会发生前面所叙述的差错.DOS同时也提供了:读取中断矢量的服务.因为读 取中断矢量的内容不会修改系统的状态;因此若直接写程序读取,也很安全.但是如果你要自己直接读取中断矢量的内容时,就必须计算 出中断矢量的位置.而DOS已经提供了这项服务.
  使用DOS所提供的系统调用,来读取中断矢量的内容时,必须利用INT 21H中的函数35H(读取中断矢量),这个函数热气矢量号码来 计算中断矢量的地址,然后返回其中的内容.以下就是一个例子:
    Old_Keyboard_IO  dd  ?
    mov al,16h
    mov ah,35h
    int 21h
    mov word ptr Old_Keyboard_IO,bx  ;Offset of interrupt handler
    mov word ptr Old_Keyboard_IO,es  ;Segment of interrupt handler
  用DOS来设置中断矢量例子:
    New_Keyboard_IO  dd  ?
    mov word ptr New_Keyboard_IO,bx  ;Offset of interrupt handler
    mov word ptr New_Keyboard_IO,es  ;Segment of interrupt handler
    mov al,16h
    mov ah,25h
    int 21h

3.4 检查中断矢量
 这里都是采用COM格式编程,可以建立一个BAT文件来处理写好的程序,以减少击键次数.设BAT文

网学推荐

免费论文

原创论文

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