当前位置: 代码迷 >> 汇编语言 >> 安装int9h中断的一个有关问题
  详细解决方案

安装int9h中断的一个有关问题

热度:7936   发布时间:2013-02-26 00:00:00.0
安装int9h中断的一个问题
这是王爽汇编里的一道例题
功能安装一个新的int9中断,在dos下按F1键改变当前屏幕的显示颜色.

assume   cs:code
stack   segment
        db   128   dup   (0)
stack   ends

code   segment
start:
        mov   ax,stack
        mov   ss,ax
        mov   sp,128

        push   cs
        pop   ds

        mov   ax,0
        mov   es,ax

        mov   si,offset   int9                            
        mov   di,204h
        mov   cx,offset   int9end-offset   int9
        cld
        rep   movsb

        push   es:[9*4]
        pop   es:[200h]
        push   es:[9*4+2]
        pop   es:[202h]

        cli
        mov   word   ptr   es:[9*4],204h
        mov   word   ptr   es:[9*4+2],0
        sti

        mov   ax,4c00h
        int   21h

int9:
        push   ax
        push   bx
        push   cx
        push   es

        in   al,60h        

        pushf
        call   dword   ptr   cs:[200h]     ;此中断例程执行时cs=0

        cmp   al,3bh         ;F1的扫描码为3bH
        jne   int9ret

        mov   ax,0b800h
        mov   es,ax
        mov   bx,1
        mov   cx,2000
s:
        inc   byte   ptr   es:[bx]
        add   bx,2
        loop   s

int9ret:
        pop   es
        pop   cx
        pop   bx
        pop   ax
        iret
int9end:
        nop

code   ends
end   start

程序运行后按F1键无效.还是是显示上次输入过的字符.程序已经把原来int9的地址换成新的地址了.为什么会没用呢?
但是我在运行其他的dos程序过程中再按F1却是可以改变当前屏幕显示颜色的.这又是为什么呢?


------解决方案--------------------------------------------------------
把第一条语句改为:
assume cs:code,ss:stack
  相关解决方案