Организовать собственный обработчик прерывания от клавиатуры - 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 ; запоминаем клавишу.
Объяснение кода листинга программы
- Очистка буфера клавиатуры:
- push ds, 0
- pop ds
- mov al, byte[ds:41Ah]
- mov byte[ds:41Ch], al
- Проверка наличия символа в буфере:
- mov ax, word[ds:41Ah]
- mov bx, word[ds:41Ch]
- cmp ax, bx
- je sleep
- Чтение ASCII/SCAN нажатой клавиши:
- mov si, ax
- add si, 400h
- lodsw
- pop ds
- cmp al, 13
- je exit
- push ax
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д