asm{
mov dx, 0x8480
mov cx, 0x1E
mov ah, 0x86
in al, 0x61
push ax
or al, 0x80
out 0x61, al
int 0x15
pop ax
out 0x61,al
mov al,20h
out 20h,al
};
Блокировка клавиатуры
Заранее благодарен...
в DOS тебе надо сбросить адрес обработчика 1 прерывания
а в windows потруднее будет потому что тебе надо будет узнать куда перенапрвлен первый вектор, и сбросить дескриптор этого вектора в IDT
сбросить это наверно сильно сказано, можно записать адрес процедуры в которой только лишь одна команда - iret
В самом клавиатурном интерфейсе имеется возможность блокировки, кроме того, это можно сделать через контроллер прерываний.
Код:
задержка впринципе происходинт, но клава не отключается, она продалжает посылать скан-коды. Чо делать?
in al,21h
or al,00000010b ; irq 1 клавиатурное irq
out 21h,al
или
in al,61h
or al,10000000b ; бит 7 - отключает клаву
out 61h,al
или
mov al, 0ADh ; отключение клавиатуры
out 64h,al
Следующий код вызывает переполнение порта клавиатуры, он безотказно действует под MS-DOS, но и только :(.
in al,064
push ax
mov al,0FE
out 064,al
pop ax
out 064,al
Цитата: Gais
Это первый способ (сам не пробовал, читал в журнале "Хакер")
in al,21h
or al,00000010b ; irq 1 клавиатурное irq
out 21h,al
или
mov al, 0ADh ; отключение клавиатуры
out 64h,al
in al,21h
or al,00000010b ; irq 1 клавиатурное irq
out 21h,al
или
mov al, 0ADh ; отключение клавиатуры
out 64h,al
Эти два способа намертво глушат клавиатуру...разблокирывать ее после них нельзя....нужно перезагружаться
Цитата:
in al,61h
or al,10000000b ; бит 7 - отключает клаву
out 61h,al
Этот способ вообще не работает (хотя должен =()
Цитата:
Следующий код вызывает переполнение порта клавиатуры, он безотказно действует под MS-DOS, но и только :(.
in al,064
push ax
mov al,0FE
out 064,al
pop ax
out 064,al
Этот тупо перезагружает комп.....
P.S. Все способы были испытаны под MS-DOS
Может есть еще какието варианты???