2016-11-20 3 views
1

в режиме реального времени сборки, я использую этот код:Real Mode Сборка Получить Ввод с клавиатуры

mov ah, 0h int 0x16

ждать ввода с клавиатуры. Я знаю, когда нажата клавиша, информация о нажатии клавиши I сохраняется в ah и al регистры. Например, когда я нажимаю ENTER, 0x0D будет храниться в al register. И если я нажимаю backspace, это будет 0x08. Но это единственные два ключа, о которых я знаю.

Есть ли список для ВСЕХ клавиш клавиатуры? Например, когда я нажимаю 'a', каково будет значение al/ah? (Таблицы ASCII нет информации об этом.)

+0

Двадцать лет назад у меня возник такой же вопрос, поэтому я написал утилиту OPIN.COM, которая будет отображать информацию, возвращаемую из int 0x16 при нажатии любой комбинации клавиш или клавиш. http://vitsoft.info/opin.htm – vitsoft

ответ

1

От RBIL:

КЛАВИАТУРА - GET НАЖАТИЕ КЛАВИШИ

AH = 00h

Возврат:
AH = BIOS код сканирования
AL = ASCII-символ

ah будет содержать клавиатурный сканкод и al символ ASCII.

Каждый ключ имеет два сканнода (нажмите &). Он возвращается контроллером клавиатуры, а дальнейшие уровни абстракции обеспечивают сопоставление от scancodes к определенному набору символов (например, ASCII), поэтому пользователи могут работать с значениями набора символов.
Список scancodes можно найти here (спасибо @MichaelPetch). Тем не менее, сканкоды развивались вместе с ПК IBM, поэтому существует несколько наборов scancodes, которые частично совместимы. Если вы используете scancodes, обратите внимание на то, какой тип scancodes вы используете.

Для будущих вопросов, всегда смотрите на Ralph Brown's Interrupt List (RBIL) первый - там хороший материал.

Смежные вопросы