5

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

Мне нужно при нажатии NumLock в консоли выводить "1". Но проблема в том, что когда я читаю символы с помощью int 16h:

mov ah,10h  
int 16h

Программа ждет нажатия клавиши, а когда я нажимаю Numlock, то прога продолжает ожидать нажатия клавиш...

Как сделать так, чтобы при нажатии 1 выводилось 1, а при нажатии Numlock - 2?

Спасибо!

angry
  • 8,677
  • 18
  • 74
  • 182
maxteam
  • 81
  • 1
  • 4

1 Answers1

5

Функция 10h с прерыванием int 16h проверяет наличие символа в буфере клавиатуры, но клавиши num lock, caps lock, scroll lock, ctrl, shift... не заносятся в буфер клавиатуры. Для того что бы определить нажат ли NumLock можно использовать функцию 12h и прерывание 16h, она вернёт в регистр AL состояние клавиатуры.

Бит    Название клавиши  
0      левый Ctrl  
1      Левый Alt  
2      Правый ctrl  
3      Правый alt   
4      ScrollLock   
5      NumLock  
6      Caps Lock  
7      SysReq
Fuzzz3r
  • 1,585
  • спасибо.... а как сделать програмно простейшую задержку на 10 мс? везде пишут о 86h int 15h, но у меня почему то не работает. Вот кусок кода:
      mov ah,09h
      mov dx,offset msg_1
      int 21h
    
      ;call delay
      mov cx,0ffffh
      mov dx,0ffffh 
      mov ah,86h 
      int 15h
    
      mov ah,09h
      mov dx,offset msg_1
      int 21h  
    
    

    теоретически интервал между выводом сообщений должен быть большым, но никакого интервала нет...

    – maxteam Sep 22 '11 at 21:42
  • попробуй числа поменьше взять
    xor   cx,cx
    mov   dx,20000
    
    

    Или дебагером посмотри, может функция возвращает ошибку(надо по флагам смотреть вроде)?

    – Fuzzz3r Sep 23 '11 at 07:17