Организовать собственный обработчик прерывания от клавиатуры - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужно организовать собственный обработчик прерывания от клавиатуры, не используя прерывание int 16h. Объясните, как это реализовать. как организовать ожидание ввода клавиши в программе?

Решение задачи: «Организовать собственный обработчик прерывания от клавиатуры»

textual
Листинг программы
;------ Очиcткa буфepa клавиатуры пepeд нaжaтием клaвиши --------------//
        push  ds  0                 ;
        pop   ds                    ;
        mov   al,byte[ds:41Ah]      ; выравниваем
        mov   byte[ds:41Ch],al      ;     ..голову и хвост буфера
 
;------ Пpoвepяeм нaличиe cимвoлa в буфepe ----------------------------//
sleep:  mov   ax,word[ds:41Ah]      ;
        mov   bx,word[ds:41Ch]      ;
        cmp   ax,bx                 ; голова равна хвосту?
        je    sleep                 ; да - циклимся..
 
;------ Читаем ASCII/SCAN нажатой клавиши -----------------------------//
        mov   si,ax                 ;
        add   si,400h               ; SI = адрес начала буфера
        lodsw                       ; берём от туда слово
        pop   ds                    ;
        cmp   al,13                 ; Enter --> выход!
        je    exit                  ;
        push  ax ax ax              ; запоминаем клавишу.

Объяснение кода листинга программы

  1. Очистка буфера клавиатуры:
    • push ds, 0
    • pop ds
    • mov al, byte[ds:41Ah]
    • mov byte[ds:41Ch], al
  2. Проверка наличия символа в буфере:
    • mov ax, word[ds:41Ah]
    • mov bx, word[ds:41Ch]
    • cmp ax, bx
    • je sleep
  3. Чтение ASCII/SCAN нажатой клавиши:
    • mov si, ax
    • add si, 400h
    • lodsw
    • pop ds
    • cmp al, 13
    • je exit
    • push ax

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы