ер4_б

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