Консультация № 34814
06.02.2006, 02:14
0.00 руб.
0 3 2
Эта процедура вызывает в цикле вместе с другой проверяющей ALT. После вызова "The Norton Guides, version 1.0" - SHIFT+F1 цикл останавливается на шестой строке. Ошибки не происходит после вызова ascii.com - ALT+A

И как вообще одновременно проверять ALT и ждать ввода символа



Приложение:
<1> Read_key PROC near<2> mov AH,11h ; пpовеpка символа в буфеpе<3> int 16h<4> jz Exit_read<5> mov AH,10h<6> int 16h<7> mov key_AX,AX<8> exit_read: <9> ret <10> Read_key ENDP

Обсуждение

давно
Посетитель
7438
7205
06.02.2006, 10:42
общий
это ответ
Здравствуйте, Семенов Алексей Николаевич!
Для начала надо понять, как отрабатываются клавиши ALT, SHIFT, CTRL,...
По нажатию/отпусканию этих клавиш устанавливаюся/сбрасываются
сответствующие битики в специальных служебных байтах по адресам 0:417h и 0:418h
Отсюда ответ на поставленный вопрос: ждем нужный код (тот же F1),
сразу после этого проверяем состояние указанных байт и делаем вывод...
проверить можно как непосредственно прочитав ячейки памяти, так и используя
функции 02h и 12h прерывания клавиатуры.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
07.02.2006, 00:25
общий
Все даже несколько проще:вызываешь ah=0 int 16hесли в al вернуло - 0 то это значит что в AH РАСШИРЕННЫЙ код клавиши. F1 3b║ Shift-F1 54║ Ctrl-F1 5e║ Alt-F1 68 F2 3c║ Shift-F2 55║ Ctrl-F2 5f║ Alt-F2 69 F3 3d║ Shift-F3 56║ Ctrl-F3 60║ Alt-F3 6a F4 3e║ Shift-F4 57║ Ctrl-F4 61║ Alt-F4 6b F5 3f║ Shift-F5 58║ Ctrl-F5 62║ Alt-F5 6c F6 40║ Shift-F6 59║ Ctrl-F6 63║ Alt-F6 6d F7 41║ Shift-F7 5a║ Ctrl-F7 64║ Alt-F7 6e F8 42║ Shift-F8 5b║ Ctrl-F8 65║ Alt-F8 6f F9 43║ Shift-F9 5c║ Ctrl-F9 66║ Alt-F9 70 F10 44║ Shift-F10 5d║ Ctrl-F10 67║ Alt-F10 71ну и так далее, всю таблицу пречислять влом, найди в интернете.
давно
Советник
419
1012
07.02.2006, 09:29
общий
это ответ
Здравствуйте, Семенов Алексей Николаевич!
Клавиатура передаёт коды нажатия и отжатия клавиш. Поэтому в качестве клавиш Alt, Shift или Ctrl может выступать ЛЮБАЯ клавиша. А делать это так - ждём нажатия клавиши, после этого устанавливаем флажок. После этого ждём нажатия нужной нам клавиши и если флажок установлен, то значит, нажато две клавиши. И т.п.
При отжатии этот флажок сбрасывается.
Таким приёмом можно отслеживать нажатие сразу нескольких клавиш - делаешь массив в 128 (256) байт и там хранишь состояние всех клавиш.
Например, смотри исходник моего эмулятора Zx-Spectrum.

http://eugene-ivanov.narod.ru/research_zxs.htm

А именно:
;------------------------
; Обработчик 9 прерывания
proc Int9Entry
push eax ds DataWork
sub eax,eax
pop ds
Assume DS:DataWork
in al,96
mov [LastKey+dat],al
jmp wptr [cs:eax*2+tKeysJump]

ExitInt9:
in al,97
mov ah,al
or al,128
out 97,al
mov al,ah
jmp $+2
out 97,al

mov al,32
pop ds
out 32,al
pop eax
iret
endp
Форма ответа