Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278

Обработка отжатий

06.11.2013, 11:12. Показов 1681. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Полный код приводить не буду, ибо PM, прерывания разрешены и т.д


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
  
key:
Sti
       Mov ax,0
       Xor al,al
       In al,60h  
       Cmp al,60 
       Jz sztr
       ;=======
       Cmp al,0   ;Если клавиша не нажата
       Cli
       Jz key
       ;=======
 
       Mov esi, ASCII  ;Таблица символов ASCII
       Add si,ax    ;Выбор символа
       Mov al, 0
       Mov ah, 8    ;Номер строки
 
 
;  Вывод символа на экран
 
    Pushad
    Xor edi, edi
    Push eax
    Shr eax, 8
    And eax, 0FFh
    Imul edi, eax, 160
    Pop eax
    And eax, 0FFh
    Shl eax, 1
    Add edi, eax
    Add edi, 0B8000h
    Add edi,ebx
 
    Mov bh, byte [esi]
    Mov byte [edi], bh
    Inc edi
    Mov byte [edi], 4Fh ;Цвет
    ;------------------
 
 
    Popad
    Jmp key
 
       sztr:
       In al,60h  ;
       Cmp al,60
       Jz sztr
 
       Add ebx,2
       Push ebx
       Jmp key
 
ASCII    db  ' ',' ', '1234567890-+',' ',' ','qwertyuiop[]',' ',' ','asdfghjkl;',"'`",' ',' ','zxcvbnm,./',' ','*',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', ' ',' ', '789-456+1230.', ' ',' ',0
Данный код определяет символ нажатой клавиши,а при нажатии F2 - сдвигает позицию его вывода.Каким образом обработать отжатия и в случае, если клавиша отпущена - перейти на метку key? И желательно не используя обратной связи с клавиатурой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2013, 11:12
Ответы с готовыми решениями:

Обработка события Click, вставка html после генерации и обработка этого кода
Подскажите пожалуйста как заставить работать эту часть кода 18 строка $(".image").click(function() { ...

Обработка одномерных массивов и Обработка двухмерных массивов.
Всем привет, У меня большие проблемы... нужно сделать 2 лабораторные работы по информатике, но я ничегошеньки в VB не понимаю... ...

Обработка ТО
Где найти обработку торговое оборудование?

12
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
06.11.2013, 16:04
В общем случае при отпускании клавиши возвращается её сканкод с взведённым старшим битом, но есть нюансы:
http://www.ctyme.com/intr/rb-0045.htm - после талбички сканкодов.
Ещё прелести работы с клавой - качаете у Ральфа http://www.cs.cmu.edu/~ralf/in... ter61d.zip и в файлике PORTS.A ищете P0060006F .
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
06.11.2013, 16:49  [ТС]
Assembler
1
2
3
4
5
6
7
 in      al,60h  ;читаем скан-код
        push    ax      ;сохраним его на время
        in      al,61h  ;читаем порт 61h
        or      al,80h  ;старший бит байта из порта 61h в 1
        out     61h,al  ;подтверждаем факт приема скан-кода
        pop     ax
        out     61h,al  ;восстановили байт в порту 61h
Как он работает, никакой толковой инфы. То ли блокирует контроллер клавиатуры на момент нажатия...
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
06.11.2013, 17:26
Скачайте отсюда
Code
1
http://s.pudn.com/search_hot_en.asp?k=Award+BIOS#
исходники AWARD BIOS(они даже с комментами на англ.) и посмотрите протокол.
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
06.11.2013, 18:21
mashuly, а почему в защищённом режиме норовите читать из порта, а не ставите обработчик прерывания клавиатуры?
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
06.11.2013, 22:54  [ТС]
Цитата Сообщение от Not at all! Посмотреть сообщение
mashuly, а почему в защищённом режиме норовите читать из порта, а не ставите обработчик прерывания клавиатуры?
Очевидно, не умею. Однако порт или обработчик прерывания - не имеет значения.
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
07.11.2013, 12:38
mashuly, то что очевидно для Вас, необязательно очевидно для других. Я неправильно выразился насчёт чтения из порта. Читать из него придётся в любом случае, но правильно делать это в обработчике прерывания клавиатуры. Под спойлером код, надеюсь, разберётесь. По нажатию Esc - выход в реальный режим. Если после этого нажата любая клавиша и затем единица - завершение работы. Если снова произвольная клавиша - перезагрузка. Обрабатываются нажатия CapcLock, Enter, Shift, BackSpace.

Кликните здесь для просмотра всего текста
Code
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
org 7c00h
start:
use16
 
mov ax,cs
mov ds,ax
mov ss,ax
mov es,ax
mov sp,-10
 
mov ax,203h
mov dh,0
mov cx,2
mov bx,m
int 13h
jc @f
 
jmp m
 
@@:
mov ax,5307h
mov cx,3
mov bx,1
int 15h
 
db (510-($-start)) dup 0
dw 0aa55h
 
; -------------------------------------------------------------------------
m:
mov ax,3
int 10h
 
cli
 
in al,70h
or al,80h
out 70h,al
 
mov al,11h
out 20h,al
out 0a0h,al
 
mov al,20h
out 21h,al
add al,8
out 0a1h,al
 
mov al,4
out 21h,al
mov al,2
out 0a1h,al
 
mov al,1
out 21h,al
out 0a1h,al
 
and al,0f8h
out 21h,al
and al,0eeh
out 0a1h,al
 
in al,92h
or al,2
out 92h,al
 
lgdt [Gdtr]
lidt [Idtr]
 
mov eax,cr0
or al,1
mov cr0,eax
 
jmp 8:P_M
 
; -------------------------------------------------------------------------
 
use32
 
P_M:
 
mov eax,10h
mov ds,ax
mov fs,ax
mov gs,ax
mov ss,ax
mov eax,18h
mov es,ax
 
in al,70h
and al,7fh
out 70h,al
 
xor edi,edi
xor eax,eax
mov ecx,400h
rep stosd
 
sti
 
@@:
hlt
cmp [key],1
jz switch_rm
jmp @b
 
; -------------------------------------------------------------------------
 
GP_handler:
mov edi,160*12+80
mov eax,('G'+0b00h) shl 16 + 'P'+0b00h
stosd
pop eax
iretd
 
; -------------------------------------------------------------------------
 
int8:
push ax
mov al,20h
out 20h,al
pop ax
 
iretd
 
; -------------------------------------------------------------------------
 
int9:
pushad
 
in al,60h
test al,al
jns @print
cmp al,0bah
jnz @f
cmp [capslock],2
jnz reset
and [capslock],0
jmp reset
 
@@:
sub al,0aah
jz @f
sub al,0ch
jnz reset
 
@@:
and [shift],0
jmp reset
 
@print:
mov [key],al
cmp al,3ah
jnz @f
inc [capslock]
jmp reset
 
@@:
cmp al,2ah
je @shift
cmp al,36h
jnz @f
 
@shift:
mov [shift],1
jmp reset
 
@@:
mov edi,[position]
mov ebx,asci_table
 
cmp al,0eh
jnz @n
test edi,edi
je reset
 
@@:
mov eax,edi
mov ebx,160
xor edx,edx
div ebx
test edx,edx
jnz @f
 
@return:
sub edi,2
cmp byte [es:edi],0dh
jnz @return
jmp @b
 
@@:
sub edi,2
mov word [es:edi],0
mov [position],edi
jmp reset
 
@n:
mov ah,[shift]
add ah,[capslock]
cmp ah,1
jnz @f
add ebx,len
 
@@:
xlatb
test al,al
je reset
cmp al,0dh
jnz @f
 
xor ah,ah
stosw
mov eax,[position]
mov ebx,160
xor edx,edx
div ebx
 
inc eax
mul ebx
mov [position],eax
jmp reset
 
@@:
 
mov ah,0eh
stosw
mov [position],edi
reset:
mov al,20h
out 20h,al
popad
 
iretd
 
; -------------------------------------------------------------------------
 
eoi:
mov al,20h
out 0a0h,al
out 20h,al
 
iretd
 
; -------------------------------------------------------------------------
switch_rm:
 
cli
 
in al,70h
or al,80h
out 70h,al
 
lidt [real_idt]
 
mov al,11h
out 20h,al
out 0a0h,al
 
mov al,8
out 21h,al
mov al,70h
out 0a1h,al
 
mov al,4
out 21h,al
mov al,2
out 0a1h,al
 
mov al,1
out 21h,al
out 0a1h,al
 
dec al
out 21h,al
out 0a1h,al
 
jmp 20h:switch
 
switch:
 
mov eax,cr0
and al,0feh
mov cr0,eax
 
jmp 0:@rm
 
@rm:
 
mov ax,cs
mov ss,ax
mov es,ax
mov ds,ax
mov fs,ax
mov gs,ax
 
in al,92h
and al,0fdh
out 92h,al
 
in al,70h
and al,7fh
out 70h,al
 
sti
use16
 
mov ax,1301h
mov cx,strlen
mov bp,string
mov bx,0eh
mov dx,300h
int 10h
 
xor ax,ax
int 16h
 
mov ax,1301h
mov cx,msglen
mov bp,msg
mov bx,0ah
mov dx,500h
int 10h
 
xor ax,ax
int 16h
 
cmp al,31h
je shutdown
 
; reboot
 
@@:
in al,64h
test al,2
jnz @b
 
mov al,0feh
out 64h,al
 
shutdown:
 
mov ax,5301h
xor bx,bx  
int 15h
mov ax,5308h
mov bx,1
mov cx,bx
int 15h
mov ax,530dh
mov bx,1
mov cx,bx
int 15h
mov ax,530fh
mov bx,1
mov cx,bx
int 15h
mov ax,530eh
xor bx,bx
mov cx,102h
int 15h  
 
mov ax,5307h
mov cx,3
mov bx,1
int 15h
 
; -------------------------------------------------------------------------
 
align 8
 
gdt:
dq 0
db -1,-1,0,0,0,10011010b,11001111b,0 ; code
db -1,-1,0,0,0,10010010b,11001111b,0 ; data
db -1,-1,0,80h,0bh,10010010b,01000000b,0 ; video
db -1,-1,0,0,0,10011010b,0,0 ; real mode
 
Gdtr:
dw Gdtr-gdt-1
dd gdt
 
align 8
 
idt:
dq 13 dup 0
dw GP_handler,8,1000111000000000b,0
dq 18 dup 0
dw int8,8,1000111000000000b,0
dw int9,8,1000111000000000b,0
dq 6 dup 0
dw 9 dup  (eoi,8,1000111000000000b,0)
 
Idtr:
dw idt-Idtr-1
dd idt
 
real_idt: 
dw 3ffh
dd 0
 
shift db 0
capslock db 0
position dd 0
string db 'REAL MODE'
strlen = $-string
key db 0
msg db 'SHUTDOWN'
msglen = $-msg
asci_table db 0,0,'1234567890-=',0,0,'qwertyuiop[]',0dh,0,'asdfghjkl;"`',0,'\zxcvbnm,./',0,0,0,20h,44 dup (0)
len=$-asci_table
db 0,0,'!@#$%^&*()_+',0,0,'QWERTYUIOP{}',0dh,0,"ASDFGHJKL:'~",0,'|ZXCVBNM<>?',0,0,0,20h,44 dup (0)
 
db (1536-($-m)) dup 0
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
07.11.2013, 13:11  [ТС]
Not at all!, код в моем случае нерабочий. Видимо, придется все же использовать циклы. А чем они плохи?
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
07.11.2013, 14:53
Цитата Сообщение от mashuly Посмотреть сообщение
код в моем случае нерабочий
Я не посвящён в Ваши тайны, что за случай такой особый, не знаю. Вероятно, и циклы сгодятся Вам.
0
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
08.11.2013, 22:34
mashuly, лол, юзать цикл... это кошмаааар
Assembler
1
2
3
4
5
6
7
8
test al, 80h
jnz отжатие
нажатие:
.....
iretd
отжатие:
.....
iretd
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
03.04.2014, 18:56
Прерывание 16h функция 00h вам на помощь.
Я писал текстовый редактор под голое железо,
только без возможности открытия и сохранения файла,
потому, что я с прерыванием 13h функцией 42h не могу разобраться.
0
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
04.04.2014, 12:40
Вадик_, лол
Цитата Сообщение от Naydli Посмотреть сообщение
ибо PM, прерывания разрешены и т.д
1
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
04.04.2014, 13:34  [ТС]
Вадик_, тебя не смущает, что прошло полгода?

Цитата Сообщение от Вадик_ Посмотреть сообщение
Я писал текстовый редактор под голое железо,
только без возможности открытия и сохранения файла,
потому, что я с прерыванием 13h функцией 42h не могу разобраться.
Я тоже варганила текстовый редактор где-то месяца 2 назад, который работал в графическом режиме VESA, с возможностью открытия и сохранения и без всяких прерываний биос, ибо HDD приходилось дрючить через порты.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2014, 13:34
Помогаю со студенческими работами здесь

обработка
добрые вечер! подскажите как провернуть: идет показ картинок и пользователь должен выбрать 1 из 3-х предложенных вариантов... показ...

Обработка в 7.7
есть конфигурация на базе УТ. при проведении инвентаризации какой-нибудь группы товаров, производят заполнение ТЧ этой группой, но по...

Обработка
Здравствуйте. Есть две обработки сделанные на 8.0, помогите переделать их на 8.3. Чтоб не приходилось запускать через толстый клиент.

Обработка
Добрый день! Помогите пожалуйста его правильно обработать! У меня есть файл выписки в котором данные поделены следующим образом: шапка,...

Обработка
Народ! Впервые пишу обработку по загрузке данных из файла. Подскажите, как брать данные из файла. Вот я выбираю файл &amp;НаКлиенте ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru