Как поймать нажатие табуляции в сборке x86?

Я работаю над проектом в сборке x86 в Windows (MASM), и мне нужно как-то поймать нажатие табуляции, но я не уверен, как это сделать в сборке (я новичок в этом).

Я могу получить пользовательский ввод с помощью int 21h, но, насколько я могу судить, это работает, только если пользователи вводят данные, а затем нажимают ввод.

Что мне нужно, так это способ, чтобы, если пользователь нажимал клавишу табуляции, он запускал процесс, а затем из этого процесса я мог обрабатывать то, что должно произойти. Есть ли способ сделать это?


person Tyler Smith    schedule 11.05.2010    source источник
comment
Если вы используете int21, похоже, вы пишете программу для DOS, а не для Windows.   -  person Gabe    schedule 11.05.2010
comment
Что вы устанавливаете для AH, чтобы читать нажатия клавиш?   -  person Gabe    schedule 11.05.2010
comment
@Gabe - я предполагаю, что это просто программа для DOS, которую он запускает в среде Windows VDM.   -  person Steve Dennis    schedule 11.05.2010
comment
Стив: да, я уже поменял для него тэги.   -  person Gabe    schedule 11.05.2010
comment
Ты прав. Спасибо за изменение.   -  person Tyler Smith    schedule 13.05.2010


Ответы (2)


Если я правильно понимаю, вы можете использовать:

mov ah,1 ; get char from keyboard

int 21h

cmp al, 9 ; 9 is ascii of tab

jnz Dont_Call

Call Proc_Name

Dont_Call:

(REST OF CODE)

person Bob    schedule 12.05.2010
comment
Это идеально! Огромное спасибо. - person Tyler Smith; 13.05.2010

http://spike.scu.edu.au/~barry/interrupts.html#ah01

DOS INT 21h — Коды функций DOS

AH = 01h - ЧИТАТЬ СИМВОЛ ИЗ СТАНДАРТНОГО ВВОДА, С ЭХО

Возврат: AL = прочитанный символ

Заметки:

^C/^Break проверяются
^P переключает внутренний флаг DOS-эхо-на-принтер
^Z не интерпретируется, поэтому не вызывает EOF, если ввод перенаправляется, символ выводится на стандартный вывод

См. также: AH=06h, AH=07h, AH=08h, AH=0Ah

person Robert Harvey    schedule 11.05.2010