Примера с опросом клавиатуры состояния контроллера регистр:
in al,64h ; get status register
test al,1 ; output buffer
je NOKEY
;-----------
;-----------
NOKEY:
http://wiki.osdev.org/%228042%22_PS/2_Controller
Редактировать: В этом примере мы проверяем только первый бит байта состояния и, если он установлен, то выходной буфер заполняется одним или несколькими байтами, которые мы можем получить из порта данных (60h) со следующими инструкциями (портами) порта.
Дополнительно мы можем проверить байт состояния, если байт (ов) происходит от PS2-мыши (перемещение или щелчок мышью):
test al,20h
jne NOKEY
Edit 2: Байты, что мы можем получить из данных порт 60h - это так называемые «scancodes», и их можно разделить на make-коды, если нажата клавиша, тормоза-коды, если клавиша освобождена, и коды дополнительного кода связи.
http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html#ss1.1
Клавиатура службы прерываний (ISR) можно использовать IRQ1 и если IRQ1 произойдет, то он просто должен прочитать от IO Port 60h (нет необходимости проверять бит 0 в статусе Регистрируйте сначала, потому что мы знаем, что данные поступают из первого PS/2, если мы получаем IRQ1), переводим и эхо ASCII или что-то еще, отправляя EOI контроллеру прерываний и, наконец, возвращаемся из обработчика прерываний.
Но приведенный выше пример предназначен только для того, чтобы показать, как опросить порты клавиатуры. И для этого мы должны разогнать IRQ1 раньше, чтобы предотвратить, чтобы работающая клавиатура ISR получала байты выходного буфера порта данных 60h, прежде чем мы сможем это сделать.
... однако это будет работать, только если прерывание клавиатуры отключено. В противном случае в регистре состояния всегда указывается «отсутствие данных ключа», потому что прерывание клавиатуры удалит все данные ключа с контроллера. –
cli mov al, 2 out 21h, al sti –