Организовать собственный обработчик прерывания от клавиатуры - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д