Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- codes segment
- Assume cs:codes,ds:codes,ss:codes
- org 100h
- Start:
- jmp Metka1
- Spy_k proc far ;Заголовок нашей процедуры.
- int 60h ;Вызываем старый обработчик.
- push ax ;
- push es ;Сохраняем изменяющиеся
- push bx ;регистры в стеке.
- push di ;
- mov ah,11h ;Получаем символ из буфера клавы.
- int 16h ;
- jz M_1 ;Если символа нет на M_1
- cmp al,0 ;Если расширенный код
- je M_1 ;на M_1.
- mov bx,0b800h ;
- mov es,bx ;
- mov di,2000 ;Вывод на экран прямым отображением
- mov es:[di],al ;в ВБ.
- inc di ;
- mov al,00000001b ;
- mov es:[di],al ;
- M_1:
- pop di ;
- pop bx ;Восстанавливаем регистры
- pop es ;из стека.
- pop ax ;
- iret ;Возвращаемся из прерывания.
- Metka equ $
- Spy_k endp ;Конец процедуры.
- Metka1:
- mov ah,35h ;Получаем адрес обработчика
- mov al,09h ;прерывания 9h
- int 21h ;
- push ds ;ds будет изменён, поэтому сохраняем.
- cli ;На время смены векторов
- ;необходимо запретить прерывания.
- mov ax,es
- mov ds,ax
- mov dx,bx ;
- mov ah,25h ;Устанавливаем адрес старого
- mov al,60h ;обработчика на вектор 60h.
- int 21h ;
- pop ds ;Извлекаем из стека старый ds.
- mov dx,offset Spy_k ;
- mov ah,25h ;Ставим на 9h адрес нашего обработчика
- mov al,09h ;(Можно это делать и на низком уровне...
- int 21h ;Можно, но не нужно.).
- sti ;Разрешаем прерывания.
- lea dx,Metka ;Остаёмся резидентными.
- int 27h ;
- codes ends ;
- End Start ;Конец.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement