Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Замена обработчика прерывания int 09h


Автор: JUncle 26.11.2006, 15:39
Здравствуйте!
Нужна помощь.
Задание -  необходимо  модифицировать  обработчик прерывания 09h таким
образом, чтобы клавиша ESC работала бы аналогично Ctrl-C, т.е. вызывала бы прерывание 1bh - прерывание программы.

Все вроде бы сделал, как надо, но не работает ни под emu8086, ни просто в W2K (хотя другое похожее задание, где заменяется тот же обработчик, и "съедается" каждое третье нажатие клавиши "1" работает в обоих случаях).

Код

code segment
start:
    jmp loader
    
body:
    jmp m1
    old1 dw 0
    old2 dw 0
    break1 dw 0
    break2 dw 0
    
m1:        
    in  al, 60h
    cmp al, 1
    jne old    
    
    in  al, 61h
    or  al, 80h
    out 61h,al
    
    in  al, 61h
    and al, 0BFh                                        
    out 61h,al
    
    mov al, 20h
    out 20h, al
                             
    jmp dword ptr cs:[break1]
    
old:
    jmp dword ptr cs:[old1]
    
loader:
    push cs
    pop ds
    mov ax, 3509h
    int 21h
    mov word ptr cs:[old1], bx
    mov word ptr cs:[old2], es
    
    mov ax, 2509h
    lea dx, body
    int 21h    
    
    mov ax, 351Bh
    int 21h
    mov word ptr cs:[break1], bx
    mov word ptr cs:[break2], es
    
    mov dx, 50
    mov ax, 3100h
    int 21h 
    
ends

end start ; set entry point and stop the assembler.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)