70 likes | 282 Views
Управление клавиатурой. Scan- код нажатия: 1 < номер клавиши > Scan- код отпускания: 11110000 0< номер клавиши >. Физический буфер клавиатуры. 20 байт. (Порт 60 h ). int 9h. Байт состояния. Выполнение команд ( CTRL-ALT-DEL ). Scan -код, код ASCII 0, расширенный scan- код.
E N D
Управление клавиатурой Scan-код нажатия:1<номер клавиши> Scan-код отпускания: 11110000 0<номер клавиши> Физический буфер клавиатуры 20 байт (Порт 60h) int 9h Байт состояния Выполнение команд (CTRL-ALT-DEL) Scan-код, код ASCII 0, расширенный scan-код Буфер BIOS клавиатуры 32байта int 16h int 21h
Программирование порта клавиатуры Первый разряд порта 61h Code segment assume CS:Code int_9h proc far push AX in AL,60h push AX in AL,61h mov AH,AL or AL,80h out 61h,AL mov AL,AH out 61h,AL pop AX <обработка> mov AL,20h out 20h,AL pop AX iret ... 1 t 0
Байт состояния клавиатуры 7 – 1 – режим вставки (Insert); 6 – 1 – режим прописных букв (CapsLock); 5 – 1 – режим цифровой клавиатуры (NumLock); 4 – 1 – режим прокрутки (ScrollLock); 3 – 1 – Alt –нажата; 2 – 1 – CTRL – нажата; 1 – 1 – левый Shift – нажата; 0 – 1 – правый Shift – нажата Байт 417h 7 – 1 – Insert – нажата; 6 – 1 –CapsLock – нажата; 5 – 1 –NumLock– нажата; 4 – 1 –ScrollLock– нажата; 3 – 1 – режим паузы (CTRL - NumLock); 2 1 0 Байт 418h
Драйвер клавиатуры int 16h Функции: Пример: чтение символас клавиатуры mov AH,0 int 16h
Ввод расширенного кода посредством int 21h mov AH,8 ; читаем символ int 21h cmp AL,0; расширенный код? jne Error ; если нет, то ошибка mov AH,8; читаем расш. код int 21h
code segment assume CS:code,DS:code org 100h begin: jmp start OLD_VEC label DWORD IP_OLD DW ? CS_OLD DW ? tsr_9: pushf call CS:OLD_VEC push AX push ES mov AX,0 mov ES,AX mov AL,ES:[417h] and AL,00001000B cmp AL,00001000B jne A1 push CX push BX push SI mov AX,0B800h mov ES,AX mov SI,1 mov CX,2000 cycle: mov AL,ES:[SI] xor AL,00001000B mov ES:[SI],AL inc SI inc SI loop cycle pop SI pop BX pop CX A1: pop ES pop AX iret Обработчик int 9hИнвертирование яркости по нажатию ALT (Ex4_1)
Инсталлятор start: mov AX,3509h int 21h mov IP_OLD,BX mov CS_OLD,ES mov AX,2509h lea DX,tsr_9 int 21h lea DX,start int 27h code ends end begin