回 帖 发 新 帖 刷新版面

主题:安装int9中断的一个问题

安装一个新的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却是可以改变当前屏幕显示颜色的.这又是为什么呢?

回复列表 (共1个回复)

沙发

去www.aogosoft.com问把.
不碰汇编一段时间了,细节都忘记了

我来回复

您尚未登录,请登录后再回复。点此登录或注册