Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > определение состояния клавиш Caps Lock, Num lock


Автор: ROKI 17.2.2009, 17:55
Привет всем !!! Как можна сделать так, чтобы при включении  клавиш Caps Lock, Num Lock, Scroll Lock, выводилось соответствующее сообщение, и при выключении также.

P.S. 
Как можно реализовать такое задание:

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

Зарание спасибо !!

Автор: Akina 17.2.2009, 18:48
Цитата(ROKI @  17.2.2009,  18:55 Найти цитируемый пост)
Как можна сделать так, чтобы при включении  клавиш Caps Lock, Num Lock, Scroll Lock, выводилось соответствующее сообщение, и при выключении также.

DOS? Linux? Windows?

Цитата(ROKI @  17.2.2009,  18:55 Найти цитируемый пост)
Напишите программу которая бы вводила с помощью одной из функций  прерывания Int21h строки символов в нижнем регистре, превращала введенные символы в верхний регистр и отображала на экране монитора только символы в верхнем ригестре.

А в чём проблема? 
Код

  lea bx,convert_table
repeat:
  mov ah,1
  int 21h
  xlat al,convert_table
  mov ah,2
  mov dl,al
  int 21h
  jmp repeat

Автор: ROKI 17.2.2009, 19:15
Цитата

DOS? Linux? Windows?


DOS

Цитата

Код

lea bx,convert_table
repeat:
  mov ah,1
  int 21h
  xlat al,convert_table
  mov ah,2
  mov dl,al
  int 21h
  jmp repeat


Большое спасибо за идею !! Можно уточнить, "convert_table"  ето введенная строка ?

Автор: Akina 17.2.2009, 21:28
Цитата(ROKI @  17.2.2009,  20:15 Найти цитируемый пост)
"convert_table"  ето введенная строка ?

Нет, это таблица замены

Добавлено через 2 минуты и 21 секунду
Цитата(ROKI @  17.2.2009,  18:55 Найти цитируемый пост)
Как можна сделать так, чтобы при включении  клавиш Caps Lock, Num Lock, Scroll Lock, выводилось соответствующее сообщение, и при выключении также.

смотреть 0:417h в обработчике int 28h, и при изменении сигналить.

Автор: ROKI 17.2.2009, 23:01
Цитата

Нет, это таблица замены


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

Цитата

смотреть 0:417h в обработчике int 28h, и при изменении сигналить.

 smile 

Автор: Mikl_ 18.2.2009, 05:02
Цитата(ROKI )
Напишите программу которая бы вводила с помощью одной из функций  прерывания Int21h строки символов в нижнем регистре, превращала введенные символы в верхний регистр и отображала на экране монитора только символы в верхнем ригестре.
Смотришь на ASCII-кодировку символов и замечаешь закономерность кодам больших латинских букв "A" = 41h "B" = 42h ... "Z" = 5Ah соответствуют коды маленьких латинских букв "a" = 61h "b" = 62h ... "z" = 7Ah то есть содержимое 5-го бита в кодировке 0-соответствует большим латинским, а 1 -- маленьким, отсюда код
Код
repeat: mov ah,1
  int 21h
  cmp ah,1; если нажали на клавишу Esc 
  jz a2; выходим из программы
  cmp al,'a'; введенный символ из диаппазона маленьких латинских?
  jb a1; если нет -- выводим на экран без преобразования
  cmp al,'z'
  ja a1
  and al,11011111b;
a1:  mov ah,2; выводим символ на экран
  mov dl,al
  int 21h
  jmp repeat
a2: ...
для маленьких русских букв допиши программу сам smile 

Автор: ROKI 18.2.2009, 14:47
За второе задание спасибо!!! С меня "+". А можно еще пример для работы с Caps Lock ?

Автор: Mikl_ 19.2.2009, 04:50
Цитата(ROKI)
чтобы при включении  клавиш Caps Lock, Num Lock, Scroll Lock, выводилось соответствующее сообщение, и при выключении также.
Скан-коды Caps Lock = 3Ah, Num Lock = 45h, Scroll Lock = 46h пример с Caps Lock  остальные по аналогии
Код
.data
trigger dw 2
CapsLockOn db 'CapsLock включили',0Ah,'$'
CapsLockOff db 'CapsLock выключили',0Ah,'$'
table dw CapsLockOn,CapsLockOff ; адреса сообщений
.code
repeat: mov ah,1
  int 16h
  cmp ah,1; если нажали на клавишу Esc 
  jz a2; выходим из программы
  cmp ah,3Ah; нажат CapsLock?
  jnz repeat
  xor trigger,2; переключаем тригер Caps Lock 0 - включен 2 - выключен
  mov bx,trigger
  mov ah,9
  mov dx,table[bx]
  int 21h
  jmp repeat
a2: ...

Автор: ROKI 19.2.2009, 20:09
Спасибо за ответы и за примеры !!! Очень помогло!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)