Advertisement
Guest User

Пример на асме

a guest
Jun 1st, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. TITLE   RESIDENT (COM) Резидентная программа для очистки
  2. ;                      экрана и установки цвета при нажатии
  3. ;                      Alt+Left Shift
  4. ;----------------------------------------------------------
  5. INTTAB  SEGMENT AT 0H         ;Таблица векторов прерываний:
  6.         ORG     9H*4          ; адрес для Int 9H,
  7. KBADDR  LABEL   DWORD         ; двойное слово
  8. INTTAB  ENDS
  9. ;----------------------------------------------------------
  10. ROMAREA SEGMENT AT 400H       ;Область параметров BIOS:
  11.         ORG     17H           ; адрес флага клавиатуры,
  12. KBFLAG  DB      ?             ; состояние Alt + Shift
  13. ROMAREA ENDS
  14. ;----------------------------------------------------------
  15. CSEG    SEGMENT PARA          ;Сегмент кода
  16.         ASSUME  CS:CS
  17.         ORG     100H
  18. BEGIN:  JMP     INITZ         ;Выполняется только один раз
  19. KBSAVE  DD      ?             ;Для адреса INT 9 BIOS
  20. ;               Очистка экрана и установка цветов:
  21. ;               ---------------------------------
  22. COLORS  PROC    NEAR          ;Процедура выполняется
  23.         PUSH    AX            ; при нажатии Alt+Left Shift
  24.         PUSH    BX
  25.         PUSH    CX            ;Сохранить регистры
  26.         PUSH    DX
  27.         PUSH    SI
  28.         PUSH    DI
  29.         PUSH    DS
  30.         PUSH    ES
  31.         PUSHF
  32.         CALL    KBSAV         ;Обработать прерывание
  33.         ASSUME  DS:ROMAREA
  34.         MOV     AX,ROMAREA    ;Установить DS для
  35.         MOV     DS,AX         ; доступа к состоянию
  36.         MOV     AL,KB  AG     ; Alt+Left Shift
  37.         CMP     AL,00001010B  ;Alt+Left Shift нажаты?
  38.         JNE     EXIT          ; нет - выйти
  39.         MOV     AX,0600H      ;Функция прокрутки
  40.         MOV     BH,61H        ;Установить цвет
  41.         MOV     CX,00
  42.         MOV     DX,18 FH
  43.         INT     10H
  44. EXIT:
  45.         POP     ES            ;Восстановить регистры
  46.         POP     DS
  47.         POP     DI
  48.         POP     SI
  49.         POP     DX
  50.         POP     CX
  51.         POP     BX
  52.         POP     AX
  53.         IRET                  ;Вернуться
  54. COLORS  ENDP
  55. ;               Подпрограмма инициализации:
  56. ;               --------------------------
  57. INITZE  PROC    NEAR            ;Выполнять только один раз
  58.         ASSUME  DS:INTTAB
  59.         PUSH    DS              ;Обеспечить возврат в DOS
  60.         MOV     AX,INTTAB       ;Установить сегмент данных
  61.         MOV     DS,AX
  62.         CLI                     ;Запретить прерывания
  63.                                 ;Замена адреса обработчика:
  64.         MOV     AX,WORD PTR KBADDR      ;Сохранить адрес
  65.         MOV     WORD PTR KBSAVE,AX      ; BIOS
  66.         MOV     AX,WORD PTR BADDR+2
  67.         MOV     WORD PTR KBSAVE+2,AX
  68.         MOV     WORD PTR KBADDR,OFFSET COLORS ;Заменить
  69.         MOV     WORD PTR KBADDR+2,CS          ; адрес BIOS
  70.         STI                      ;Разрешить прерывания
  71.         MOV     DX,OFFSET INITZE ;Размер программы
  72.         INT     27H              ;Завершить и остаться
  73. INITZE  ENDP                     ; резидентом
  74.  
  75. CSEG    ENDS
  76.         END     BEGIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement