Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
NFK
1

Резидентный обработчик клавиатуры

12.04.2011, 18:23. Показов 1257. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Вот у меня есть такое задание:
Вместо цифр реализовать занесение в буфер клавиатуры их scan-кодов. Вместо цифр заносить их ascii - коды. Этот режим активен 5 сек из каждых 10.

Сам я реализовал таймер и начал пробовать заносить в буфер клавы скан-коды

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

Вот что я наваял:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
.model tiny
.code
org 100h
start:
  jmp init
greet db 10,13,'Proizvelas podmena int 09h.',13,10,'$'
bye db 10,13,'Ya vigruzhen!',13,10,'$'
time dw ?
old_9int dd ?
old_1cint dd ?
 
sign dw 0fedch
 
new_1c proc far
  push ax
  push dx
  push di
  push ds
  mov ax,cs
  mov ds,ax
  cmp cs:[time],0
  jne q
 
  mov dx,offset cs:[new_9int]
  mov ax,2509h
  int 21h
 
q: add cs:[time],1
   cmp cs:[time],91
   jne q1
 
  mov dx,word ptr cs:[old_9int]
  mov ax,word ptr cs:[old_9int+2]
  mov di,ds
  mov ds,ax
  mov ax,2509h
  int 21h
  mov ds,di
 
q1: cmp cs:[time],182
    jnz q3
   mov cs:[time],0
 
q3: pop ds
    pop di
    pop dx
    pop ax
    iret
new_1c endp
 
new_9int proc far
  push ax
  push bx
  push di
  push es
  sti
  
;  call cs:[old_9int]
  mov ax,40h
  mov es,ax
 
  in al,60h
  mov di,es:[01Ch]
  mov es:[di],al
  cmp di,03Ch
  je beg
  inc di
  inc di
  jmp save
  beg: mov di,01Eh
  save: mov es:[01Ch],di
 
  in al,61h
  mov ah,al
  or al,80h
  out 61h,al
  mov al,ah
  out 61h,al
 
 
    cli
    mov al,20h
    out 20h,al
    pop es
    pop di
    pop bx
    pop ax
    iret
new_9int endp
 
;-------------------------------------------------------------
 
init: mov time,0
  mov ax,0351ch
  int 21h
  mov ax,es:[bx-2]
  cmp ax,cs:sign
  je outing
  mov word ptr [old_1cint],bx
  mov word ptr [old_1cint+2],es
 
  mov ax,03509h
  int 21h
  mov word ptr [old_9int],bx
  mov word ptr [old_9int+2],es
 
  mov dx,offset new_1c
  mov ax,0251ch
  int 21h
  mov dx,offset Greet
  mov ah,9
  int 21h
 
  mov dx,offset init
  int 27h
 
outing:
  push ds
  cli
 
  mov dx,es:[bx-6]
  mov ax,es:[bx-4]
  mov ds,ax
 
  mov ax,0251ch
  int 21h
 
  mov ds,es:[bx-10]
  mov ax,es:[bx-8]
  mov ds,ax
 
  mov ax,02509h
  int 21h
  pop ds
  sti
 
  push es
  mov ax,es:[2ch]
 
  mov es,ax
  mov ah,49h
  int 21h
 
  pop es
  mov ah,49h
  int 21h
  
  mov dx,offset Bye
  mov ah,9
  int 21h
  mov ax,04c00h
  int 21h
end start
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2011, 18:23
Ответы с готовыми решениями:

Обработчик прерывания клавиатуры
По идее обработчик отлавливает нажатие на клавишу SHIFT и устанавливает соответствующий бит в слове...

Свой обработчик прерывания клавиатуры
Помогите пожалуйста написать свой обработчик клавиатурного прерывания: меня в частности интересует,...

Дизассемблировать Обработчик прерываний Bios для клавиатуры
В университете задали задание вытащить программу базового обработчика прерываний BIOS для...

Резидентный Screansaver
Здраствуйте, очень нужен Screansaver резидентны , который гасит окно через время указанное из...

0
12.04.2011, 18:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2011, 18:23
Помогаю со студенческими работами здесь

Резидентный будильник (не могу изменить сигнал)
Есть резидентный будильник , он работает правильно, только вот сигнал не очень, поменял частоты,...

Резидент, который по нажатию комбинации клавиш создает файл, в который записывается изображение на экране
Создать резидентный обработчик прерывания, который по нажатию комбинации клавиш (любой) создает...

Почему при вызове функции 4ch прерывания 21h резидентный обработчик падает?
Написал резидентную программу, всё работает, но если моя или другие программы вызывают функцию 4ch...

Перекрыть обработчик клавиатуры
Доброго времени суток. Такое вот задание: Перекрыть обработчик клавиатуры. При нажатии на букву...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru