Advertisement
Guest User

Untitled

a guest
May 27th, 2015
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. codes segment
  2. Assume cs:codes,ds:codes,ss:codes
  3. org 100h
  4.  
  5. Start:
  6. jmp Metka1
  7.  
  8.  Spy_k proc far                   ;Заголовок нашей процедуры.
  9.  
  10.  int 60h                          ;Вызываем старый обработчик.
  11.  
  12.  push ax                          ;
  13.  push es                          ;Сохраняем изменяющиеся
  14.  push bx                          ;регистры в стеке.
  15.  push di                          ;
  16.  
  17.  mov ah,11h                       ;Получаем символ из буфера клавы.
  18.  int 16h                          ;
  19.  jz M_1                           ;Если символа нет на M_1
  20.  
  21.  cmp al,0                         ;Если расширенный код
  22.  je M_1                           ;на M_1.
  23.  
  24.  mov bx,0b800h                    ;
  25.  mov es,bx                        ;
  26.  mov di,2000                      ;Вывод на экран прямым отображением
  27.  mov es:[di],al                   ;в ВБ.
  28.  inc di                           ;
  29.  mov al,00000001b                 ;
  30.  mov es:[di],al                   ;
  31.  
  32.  M_1:
  33.  
  34.  pop di                           ;
  35.  pop bx                           ;Восстанавливаем регистры
  36.  pop es                           ;из стека.
  37.  pop ax                           ;
  38.  
  39.  iret                             ;Возвращаемся из прерывания.
  40.  Metka equ $
  41.  Spy_k endp                       ;Конец процедуры.
  42.  
  43. Metka1:
  44.  
  45. mov ah,35h                        ;Получаем адрес обработчика
  46. mov al,09h                        ;прерывания 9h
  47. int 21h                           ;
  48.  
  49. push ds                           ;ds будет изменён, поэтому сохраняем.
  50. cli                               ;На время смены векторов
  51.                                   ;необходимо запретить прерывания.
  52. mov ax,es
  53. mov ds,ax
  54. mov dx,bx                         ;
  55. mov ah,25h                        ;Устанавливаем адрес старого
  56. mov al,60h                        ;обработчика на вектор 60h.
  57. int 21h                           ;
  58.  
  59. pop ds                            ;Извлекаем из стека старый ds.
  60.  
  61. mov dx,offset Spy_k               ;
  62. mov ah,25h                        ;Ставим на 9h адрес нашего обработчика
  63. mov al,09h                        ;(Можно это делать и на низком уровне...
  64. int 21h                           ;Можно, но не нужно.).
  65. sti                               ;Разрешаем прерывания.
  66.  
  67. lea dx,Metka                      ;Остаёмся резидентными.
  68. int 27h                           ;
  69.  
  70. codes ends                        ;
  71. End Start                         ;Конец.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement