Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
 
mish_k98
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 633
#1

клавиатура, режим легато - Assembler

18.02.2018, 18:57. Просмотров 232. Ответов 6
Метки нет (Все метки)

нужно реализовать ввод с клавиатуры с записью информации в
кольцевой буфер длиной 8 байт, "легато" на три клавиши. Но я что-то не понимаю как это сделать. Можете помочь? Пишу на ТАSM
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2018, 18:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос клавиатура, режим легато (Assembler):

Легато - две клавиши нажато, а третья выводится на экран
Есть задачка, подскажите как решить: Реализовать принцип «легато», чтобы при...

Клавиатура на уровне портов
как мне проверить факт нажатия CTRL+ALT+esc, к примеру. мой вариант: in al,...

Перехват прерываний (клавиатура)
Доброго времени суток. Есть код, который при нажатии определённых кнопок меняет...

Режим работы порта PS/2 . Клавиатура/мышь
Пытаюсь разобраться в работе стандартной PS/2 мыши и клавиатуры одновременно....

Клавиатура, при нажатии пробела включается ждущий режим.
Подскажите,дело в том,что у меня есть второй комп,на втором компе клавиатура...

Как узнать почему включается энергосберегающий режим.И выключить навсегда этот режим?
Вообщем дело такое, гаснет монитор и появляется сообщение "Енергосберегающий...

6
ФедосеевПавел
Модератор
3415 / 1912 / 815
Регистрация: 01.02.2015
Сообщений: 6,452
18.02.2018, 20:18 #2
"Легато" - что-то из музыки, когда клавиши пианино нажимаются поодиночке последовательно и без сколько-нибудь заметных промежутков тишины. Но это не аккорды.

Теряюсь с пониманием "режим легато" по отношению к клавиатуре компьютера. Как уже пояснял, в музыке клавиши фортепьяно нажимаются последовательно, т.е. и компьютер будет получать последовательно данные о нажатиях. А следовательно и успевать сохранять в буфере.

Кроме-того непонятно в каком формате используется буфер.
1. Можно настроить системный буфер клавиатуры на другой размер и другую область памяти
2. При написании собственного обработчика клавиатуры использовать "самодельный" буфер.

Видимо, вам придётся выполнять самостоятельно. По работе клавиатуры можете почитать книгу
Владимир Кулаков. Программирование на аппаратном уровне
и лучше всего 2-е издание этой книги
2
mish_k98
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 633
18.02.2018, 20:27  [ТС] #3
так вот не могу сам, дали мне такое задание на лабораторной работе
0
Constantin Cat
1628 / 940 / 356
Регистрация: 28.02.2015
Сообщений: 2,186
Завершенные тесты: 1
18.02.2018, 20:55 #4
Цитата Сообщение от mish_k98 Посмотреть сообщение
так вот не могу сам
Покажите, что уже не смогли.
1
mish_k98
164 / 49 / 27
Регистрация: 04.06.2013
Сообщений: 633
18.02.2018, 20:57  [ТС] #5
есть только кусок кода, но не пойму, что он делает
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
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
progdata segment para
    code dw ?
    p1 db 00h
    p2 db 00h
    p3 db 00h
    p4 db 0ffh
    p5 db 00h,00h,00h     ;bufl
    p6 db 00h                 ;pnk
    p7 db 00h
    p8 db 00h
    p9 db 00h           
progdata ends
 
progstack segment para stack 'stack'
          dw 512 dup (?)
progstack ends
 
progcode segment para
   begin proc near
         assume cs:progcode,ds:progdata,ss:progstack
   start:push ds
         sub  ax,ax
         push ax
 
         mov al,09h
         mov ah,35h
         int 21h
         push es
         push bx
         mov ax, progcode
         mov ds,ax
         ;lea dx,leg
         mov al,09h
         mov ah,25h
         int 21h
         mov ax, progdata
         mov ds,ax
         sti ;allow cpu to respond to hardware interrupts 
zykl:    cmp p3,00h
        jz zykl
         pop dx
         pop ds
         mov ah,25h
         mov al,09h             ;ў®ббв**®ўЁвм бв*஥ §**зҐ*ЁҐ
         int 21h                ;ўҐЄв®а* ЇаҐачў**Ёп
 
         mov ah,9
         mov bh,0
         mov bl,0dh
         mov cx,1
         mov al,43h             ;ўчў®¤ бЁ¬ў®«* 'C ' ** ¬®*Ёв®а
         int 10h
         iret;produces a normal output from the interrupt handler.
 
leg proc  far
        sti
        push ax
        push bx
        push cx
        push dx
        push ds
        push es
        push bp
        push si
        push di
        mov ax,progdata
        mov ds,ax
        in al,60h
        push ax
        in al,61h
        or al,80h
        out 61h,al
        and al,7fh
        out 61h,al
        pop ax
        push ax
        cmp al,39h
        jz eso
        cmp al,81h
        jnz zvpr
        
 eso:   mov p3,01h
        jmp byx
;§ўҐбм ў*и* Їа®Ја*¬¬*
zvpr:   lea bx,p5
        mov cx,3
        and al,80h
        pop ax
        push ax
        jz leg1
        and al,7fh
legn:   mov ah,[bx]
        cmp al,ah
        jnz leg00
        mov al,00h
        mov [bx],al
        jmp byx
leg00:  inc bx
        loop legn
        jmp byx
 
leg1:   mov ah,[bx]
        cmp al,ah
        jz leg12
        inc bx
        loop leg1
        mov cx,3
        lea bx,p5
leg10:  mov ah,[bx]
        cmp ah,00h
        jz leg11
        inc bx
        loop leg10
byx:    pop ax
        mov al,20h
        cli
        out 20h,al
        pop di
        pop si
        pop bp
        pop es
        pop ds
        pop dx
        pop cx
        pop bx
        pop ax
        sti
        iret
 
leg11:  mov [bx],al
        mov p6,al
        jmp nach
leg12:  mov [bx],al
        cmp al,p6
        jnz byx
        or p4,00h
        jnz byx
 
nach:    cmp al, 50h
    jnz nnn
ch00:   mov ah,3
    mov bh,0
    int 10h
    inc dh
ch10:   cmp dh,24
    jc kkk
    mov dh,0
kkk:    mov ah,2
    mov bh,0
    int 10h
    jmp byx
ch1: mov p7,0
    jmp ch00
     
nnn:     cmp p7,0
    jz nnn1
    cmp p7,1
    jnz nn0
    cmp al, 1ah
    jnz jj
    inc p7
    jmp byx
jj:     mov p7,0
    jmp bx
nn0:    cmp p7,2
    jnz nn1
    cmp al,30h
    jz ch1
    mov p8,al
    inc p7
    jmp byx
nn1:    cmp p7,3
    jnz nnn1    ;tmp
    cmp al, 30h
    jz nn10
    inc p7
    mov p9,al
    jmp byx
nn10:  mov ah,3
    mov bh,0
    int 10h
    dec p8
    cmp p8, 0ah
    jnz nn11
    mov p8,0
nn11:   add dh,p8
    jmp ch10        
 
nnn1:    cmp al,01h
    jnz nnn2     
    mov p7,1
    jmp byx
nnn2:   mov  ah,9
         mov  bh,0
         mov  bl,0dh
         mov  cx,1
         int  10h
         mov ah,3
         mov bh,0
         int 10h
         inc dl
         cmp dl,80
         jz l3
         mov ah,2
         int 10h
         jmp byx
 
 
     l3: mov dl,0
         mov ah,2
         int 10h
         mov ah,6
         mov al,1
         mov cx,0
         mov dh,24
         mov dl,80
         mov bh,4
         int 10h
        jmp byx
 
 
leg endp
 
      l2:iret
 
   begin endp
progcode ends
         end start
0
Jin X
❗❗ RTFM 👈
4006 / 1150 / 151
Регистрация: 14.12.2014
Сообщений: 2,289
Записей в блоге: 5
Завершенные тесты: 2
18.02.2018, 23:41 #6
mish_k98, уточните у препода – в какой тональности нужно исполнить сие задание: ля-минор, скажем, или до-диез-мажор?
И про темп не забудьте: ну там адажио, анданте или, может, аллегро?
На всякий случай уточните размер и октаву.
Ну и самое главное: какие три буквы должны быть на этих трёх клавишах?

Не по теме:

Мне кажется, пора устроить конкурс на самое "креативное задание" от преподов.



Добавлено через 4 минуты
А код огонь вообще! Больше всего мне нравятся метки: leg1 (нога?), leg00, legn, jj, kkk, nn0, nnn, nnn1, byx. Ну и комменты: "ўчў®¤ бЁ¬ў®«* 'C ' ** ¬®*Ёв®а"
Во!
1
Kukuxumushu
753 / 476 / 89
Регистрация: 13.06.2015
Сообщений: 1,631
Завершенные тесты: 2
19.02.2018, 00:16 #7
Цитата Сообщение от Jin X Посмотреть сообщение
какие три буквы должны быть на этих трёх клавишах?
Могу предложить свой вариант, препод оценит.
1
19.02.2018, 00:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2018, 00:16
Привет! Вот еще темы с решениями:

Как можно из VB переключить режим 800х600 на режим 1024х768.
Как можно из VB переключить режим 800х600 на режим 1024х768. Благодарю за...

неоптимизированый режим: рекомендуемый режим 1280*1024 60Hz" ???? и дальше нет картинки .Что делать
неоптимизированый режим: рекомендуемый режим 1280*1024 60Hz" ???? и дальше нет...

Монитор Samsung-SyncMaster 2033 при запуске системы пишет неоптимальный режим, рекомендованный режим 1600х900
Здравствуйте. У меня возникла проблема с монитором Samsung-SyncMaster 2033. ...

после вкл компьютера,сразу переходит в режим восстановления, в безопасный режим не получается перейти. windows 7 64bit
после вкл компьютера,сразу переходит в режим восстановления, в безопасный режим...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru