22.03.2019, 01:56 [+3 UTC]
в нашей команде: 3 477 чел. | участники онлайн: 4 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.72 (17.03.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
09.03.2019, 10:08

Форум:
18.03.2019, 16:49

Последний вопрос:
22.03.2019, 01:47
Всего: 149061

Последний ответ:
21.03.2019, 19:20
Всего: 258011

Последняя рассылка:
21.03.2019, 22:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
27.12.2011, 00:00 »
Цыганок Олег Александрович
Огромное Вам спасибо!!! Очень благодарен!!! [вопрос № 184963, ответ № 269334]
26.08.2009, 13:07 »
Ljudmila
От имени пользователей портала, хочется отметить отзывчивых, скромных, терпеливых и очень деликатных модераторов: Admiral-а и Зенченко Константина Николаевича. Всегда наполненных добром и светом! Вам не устанем повторять сто раз: «СПАСИБО ВАМ, за всё за ЭТО, Ну, что б мы делали без ВАС???»
27.05.2010, 15:29 »
Konstantin Shvetski
Спасибо за скорый и квалифицированный ответ [вопрос № 178693, ответ № 261713]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 737
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 516
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 145

Перейти к консультации №:
 

Консультация онлайн # 193759
Раздел: • Assembler
Автор вопроса: Kdsfofwe21 (2-й класс)
Отправлена: 25.10.2018, 19:18
Поступило ответов: 1

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Подскажите литературу, или сайт, где есть полные таблицы scancode'ов с комбинациями клавиш - alt/ctrl/shif и другие + любая клавиша. в книжках по ассемблеру, есть, но не полные. то что найденно Мной в гугле http://www.ee.bgu.ac.il/~microlab/MicroLab/Labs/ScanCodes.htm? эта таблица не полная. в идеале конечно же было, если бы существовала какая либо зависимость между номерами сканкодов, что бы на ходу можно было вычислить его. так как таблица не полная. даже не заморачивался с зависимостями. Хотя конечно же вывод сделан такой, что если нажат alt+w то скан код будет как у w, видимо что бы не придумывать новые значения. но видимо при комбинации с ctrl надо полагать будет другой код. Подскажите пожалуйста.

Состояние: Консультация закрыта

Здравствуйте, Kdsfofwe21!

Чтобы Вам понять логику образования скан-кодов, которые делают BIOS -DOS, Вам нужно понять всю цепочку, как все происходит.

Нажимается клавиша на клавиатуре, контролер сообщает об этом событии, с помощью IRQ1(
int 09h). Получив это прерывание, процессор читает порт клавиатуры(60h), сбрасывает контролер клавиатуры(порт 61h), анализирует, что было нажато, до этого, т.е. CTRL, ALT, SHFT, NumLock и т.д., это все фиксируется BIOS'ом -DOS'ом, в системных переменных 0х0040:0х0017(байт состояния клавиатуры), 0х0040:0х001А(голова очереди буфера клавиатуры) и 0х0040:0х001С(хвост очереди буфера клавиатуры), заносит в хвост буфера клавиатуры скан-код и полученный символ(к примеру: "Ф"-"ф"(ru)-"A"-"a"(en)). Сбрасывает аппаратное прерывание.

Функции ввода BIOS -DOS читают символ и скан-код из буфера клавиатуры и выдают его в качестве результата.

Самым оптимальным вариантом будет - написать свой не большой обработчик клавиатуры, который прочитает код нажатой клавиши, проанализирует старший бит(нажата или отпущена) и запишет нужное значение(0/1) в массив из 128 байт, а потом передаст управление старому обработчику. В программе поиск сочетания клавиш будет в виде:

Код (Assembler) :: выделить код
next0:   mov   al,keyMass[LCtrl] 
   and   al,keyMass[LAlt] 
   and   al,keyMass[D-key] 
   jz   next1
;Left-Control + Left-Alt + D-key(она же В,в,d)


Удачи!


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 03.11.2018, 13:22

5
спасибо
-----
Дата оценки: 03.11.2018, 14:11

Рейтинг ответа:

+1

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 193759

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 1

= общий = | 27.10.2018, 11:44 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Kdsfofwe21:

1)Какая цель - знание этой таблицы?
2)Как читаете скан-коды?

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Kdsfofwe21
2-й класс

ID: 402218

# 2

= общий = | 27.10.2018, 12:27 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Здравствуйте.
2) считывание скан-кода
start:
.....
mov ah,1h
int 21h
cmp al,0 сравнение если нажата клавиша за которой не закреплено отображаемого символа.
je getscancode
.....
.....
getscancode:
mov ah,8
int 21h
cmp al,3bh
......
1) уверен Вы лучше знаете практична ли она, и видимо раз Вы спросили, она скорее всего не так уж и часто используется? Я интересовался для того что бы можно было быстро ориентироваться, хотя случая для этого не было. Так что основная цель, это, пока что, познавательная. Сделаю картинку подобную ascii.

-----
Последнее редактирование 29.10.2018, 10:27 Гордиенко Андрей Владимирович (Мастер-Эксперт)

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 3

 +1 
 
= общий = | 29.10.2018, 13:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Kdsfofwe21:

Если бы Вам нужно было обрабатывать комбинации нажатых клавиш, то тут больше подходит свой обработчик контролера клавиатуры. При изменении состояния клавиатуры(нажата/отпущена клавиша) будет вызван обработчик контролера клавиатуры. Вам нужно, только само событие клавиатуры. Все остальное пусть обрабатывает старый обработчик.
Читается порт контролера клавиатуры: старший бит - нажата/отпущена клавиша, биты 0-6 код клавиши на клавиатуре. Ставите массив 128-мь байт(биты 0-6 номер клавиши), если клавиша нажата записываете в него 1, если отпущена 0. Вся обработка выглядит так

Код (Assembler) :: выделить код
mov	al,keyMass[LCtrl]
	and	al,keyMass[LShft]
	and	al,keyMass[W-key]
	jz	next0
;Left-Control + Left-Shifr + W-key(она же ц,Ц,w)

. . . 
next0:	mov	al,keyMass[LCtrl]
	and	al,keyMass[LAlt]
	and	al,keyMass[D-key]
	jz	next1
;Left-Control + Left-Alt + D-key(она же В,в,d)

Такой вариант больше подходит для игровых движков, когда одновременно может быть нажато несколько клавиш.

Вы используете функцию DOS, и она отображает скан-код, уже после обработки BIOS'ом, DOS'ом и возможно KEYRus'ом(драйвер-русификатор). Т.е. достоверность этого скан-кода под вопросом. Кроме этого есть разные типы клавиатур, и скан-коды отличаются для стрелок, для Num-Pad и остальных дополнительных клавиш.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14471 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.72 от 17.03.2019
Версия JS: 1.33 | Версия CSS: 3.35