Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 14.04.2011
Сообщений: 20
1

Как заменить ScroLL Lock на Caps Lock

30.05.2011, 17:01. Просмотров 3052. Ответов 8
Метки нет (Все метки)

Как заменить чтобы вместо кнопки ScroLL Lock проверялась клавиша Caps Lock. Вот отрывок кода:
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
h0: mov ax,40h      ;Настроим ES на сегмент данных BIOS
    mov es,ax
    mov al,[es:17h]     ;Получим первый байт флагов
    
    and al,00010000b        ;выделяем 4-ый бит
    cmp al,0                ;Клавиша Scroll Loсk нажата?
    je xxx
    
    ;test al,69     ;Клавиша Scroll Loсk нажата?
    ;je xxx         ;если нет, то выйдем
 
    mov [cs:fn],0h      ; если гажата, то выставим соответствующий режим
    mov [cs:cnt], 0
    jmp xxxx        ; работы резидента, и пойдём на выход
h1: mov ax,40h  
    mov es,ax
    mov al,[es:17h]
    test al,10h
    je xxx 
    mov [cs:fn],1h
    mov [cs:cnt], 0
    jmp xxxx
h2: mov ax,40h
    mov es,ax
    mov al,[es:17h]
    test al,10h
    je xxx 
    mov [cs:fn],2h
 
    mov [cs:cnt],160
    jmp xxxx
h3: mov ax,40h  
    mov es,ax
    mov al,[es:17h]
    test al,10h 
    je xxx 
    mov [cs:fn],3h
    mov [cs:cnt], 240
    jmp xxxx
h4: mov ax,40h
    mov es,ax
    mov al,[es:17h]
    test al,10h
    je xxx 
    mov [cs:fn],4h
    mov [cs:cnt],320
    jmp xxxx
h5: mov ax,40h
    mov es,ax
    mov al,[es:17h] 
    test al,10h 
    je xxx 
    mov [cs:fn],5h
    mov [cs:cnt],400
    jmp xxxx
h6: mov ax,40h
    mov es,ax
    mov al,[es:17h] 
    test al,10h
    je xxx 
    mov [cs:fn],6h
    mov [cs:cnt], 480
    jmp xxxx
h7: mov ax,40h
    mov es,ax
    mov al,[es:17h]
    test al,10h
    je xxx 
    mov [cs:fn],7h
    mov [cs:cnt],560
    jmp xxxx
h8: mov ax,40h  
    mov es,ax
    mov al,[es:17h]
    test al,10h
    je xxx 
    mov [cs:fn],8h
    mov [cs:cnt],640
    jmp xxxx
Пробывал писать код клавишы кэпс лука в строчке где проверяется нажатие клавишы и почему то кэпс лук не ставится.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2011, 17:01
Ответы с готовыми решениями:

Дан массив чисел. включить режим работы клавиатуры Caps/Lock, используя ком
Всем программистам здравствуйте! нужна ваша помощь очень! надо сделать вот такое задание. ДЛя...

включение scroll lock
Подскажитие пожалуста, как программно включить scroll lock?

Вывести на экран в символическом виде состояние NUM LOCK, CAPS LOCK и SCROLL LOCK
Помогите решить задачку на турбо си Выводить на экран в символическом виде состояние NUM LOCK,...

Acer aspire 5552G-N974G64Mikk Проблема с Caps Lock, Num Lock, Scroll Lock
Вообщем у меня такая же проблемма https://www.cyberforum.ru/notebooks/thread552722.html ...

8
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 703
30.05.2011, 17:34 2
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
INT 16h, AH = 02h, 12h, 22h — Считать состояние клавиатуры
 
Ввод: АН = 02h (83/84-key), 12h (101/102-key), 22h (122-key) 
Вывод: AL = байт состояния клавиатуры 1
АН = байт состояния клавиатуры 2 (только для функций 12h и 22h) 
 
 
Байт состояния клавиатуры 1 (этот байт всегда расположен в памяти по адресу 0000h:0417h или 0040h:0017h):
 
Бит 7: Ins включена
 
Бит 6: CapsLock включена
 
Бит 5: NumLock включена
 
Бит 4: ScrollLock включена
 
Бит 3: Alt нажата (любая Alt для функции 02h, часто только левая Alt для 12h/22h)
 
Бит 2: Ctrl нажата (любая Ctrl)
 
Бит 1: Левая Shift нажата
 
Бит 0: Правая Shift нажата
 
Байт состояния клавиатуры 2 (этот байт всегда расположен в памяти по адресу 0000h:0418h или 0040h:0018h):
 
Бит 7: SysRq нажата
 
Бит 6: CapsLock нажата
 
Бит 5: NumLock нажата
 
Бит 4: ScrollLock нажата
 
Бит 3: Правая Alt нажата
 
Бит 2: Правая Ctrl нажата
 
Бит 1: Левая Alt нажата
 
Бит 0: Левая Ctrl нажата
[Ассемблер для DOS,Windows и Unix. Зубков С.В.]
0
1 / 1 / 0
Регистрация: 14.04.2011
Сообщений: 20
30.05.2011, 17:53  [ТС] 3
zzzyyyxxx,

and al,00000100b ;выделяем 4-ый бит
cmp al,3Ah ;Клавиша Scroll Loсk нажата?
Я вот здесь выделил 6 бит. а что ещё нужно она всеравно не работает.
0
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 703
30.05.2011, 19:21 4
Простейший пример будет проверять состояние индикатора.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
code segment
assume cs:code
start:
    push 40h
    pop es              ;загружаем в es сегментный адрес
nn:
    mov al,byte ptr es:[17h]        ;обращаемся за первым байтом состояния клавиатуры
    test al,1000000b        ;проверяем нажата или нет
    je nn               ;если нет то на повтор проверки
                    ;иначе выход
    mov ah,4ch
    int 21h
code ends
end start
Если нужна проверка нажата/отжата как кнопка то:
Assembler
1
mov al,byte ptr es:[17h]
замени на :
Assembler
1
mov al,byte ptr es:[18h]
P.S: в описании прерывания всё описано.
0
1 / 1 / 0
Регистрация: 14.04.2011
Сообщений: 20
30.05.2011, 19:23  [ТС] 5
zzzyyyxxx, а вот здесь 10h нужно менять или нет
test al,10h
0
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 703
30.05.2011, 19:38 6
Задание напиши, а то я не догоню чего нужно.
0
1 / 1 / 0
Регистрация: 14.04.2011
Сообщений: 20
30.05.2011, 19:43  [ТС] 7
zzzyyyxxx, смотри есть такой пользовательский обработчик прерывания 09h там проверяется нажата ли клавиша ScroLL lock как её поменять на другую к примеру Caps lock
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
Proc    new_09h     ; пользовательский обработчик new_09h
    pusha       ; Сохраним регистры
    push es
    push ds
    in al,60h   ; Получим скэн-код клавиши 
 
    cmp al,0Bh ; скан-код клавиши '0' 
    je h0 ; если равно то переход на h0
 
    cmp al,02h  ;скан-код клавиши 1
    je h1
 
    cmp al,03h  
    je h2
 
    cmp al,04h  
    je h3
 
    cmp al,05h  
    je h4
 
    cmp al,06h  
    je h5
 
    cmp al,07h  
    je h6
 
    cmp al,08h  
    je h7
 
    cmp al,09h  
    je h8
xxx:
    pop ds          ; Если ни одна из комбинаций клавиш не    
    pop es          ; присутствует, то восстановим регистры 
    popa            ; и в системный обработчик без вовзврата   
    jmp [dword cs:old_09h]  
    
h0: mov ax,40h      ;Настроим ES на сегмент данных BIOS
    mov es,ax
      mov al,[es:18h] ;Получим первый байт флагов
    and al,00000100b        ;выделяем 4-ый бит
    cmp al,00000100b                ;Клавиша Scroll Loсk нажата?
    je xxx
    
    ;test al,69     ;Клавиша Scroll Loсk нажата?
    ;je xxx         ;если нет, то выйдем
 
    mov [cs:fn],0h      ; если нажата, то выставим соответствующий режим
    mov [cs:cnt], 0
    jmp xxxx        ; работы резидента, и пойдём на выход
h1: mov ax,40h  
    mov es,ax
      mov al,[es:17h]
    test al,10h 
    je xxx 
    mov [cs:fn],1h
    mov [cs:cnt], 0
    jmp xxxx
h2: mov ax,40h
    mov es,ax
      mov al,[es:17h]
    test al,10h 
    je xxx 
    mov [cs:fn],2h
 
    mov [cs:cnt],160
    jmp xxxx
h3: mov ax,40h  
    mov es,ax
      mov al,[es:17h]
    test al,10h 
    je xxx 
    mov [cs:fn],3h
    mov [cs:cnt], 240
    jmp xxxx
h4: mov ax,40h
    mov es,ax
      mov al,[es:17h]
    test al,10h 
    je xxx 
    mov [cs:fn],4h
    mov [cs:cnt],320
    jmp xxxx
h5: mov ax,40h
    mov es,ax
      mov al,[es:17h]   
    test al,10h 
    je xxx 
    mov [cs:fn],5h
    mov [cs:cnt],400
    jmp xxxx
h6: mov ax,40h
    mov es,ax
      mov al,[es:17h]   
    test al,10h 
    je xxx 
    mov [cs:fn],6h
    mov [cs:cnt], 480
    jmp xxxx
h7: mov ax,40h
    mov es,ax
      mov al,[es:17h]
    test al,10h
    je xxx 
    mov [cs:fn],7h
    mov [cs:cnt],560
    jmp xxxx
h8: mov ax,40h  
    mov es,ax
      mov al,[es:17h]
    test al,10h 
    je xxx 
    mov [cs:fn],8h
    mov [cs:cnt],640
    jmp xxxx
 
xxxx:   in al,61h       ;Введём содержимое порта 61h
    or al,80h       ;Подтвердим приём кода, записав 1 в старший
    out 61h,al      ;бит порта 61h
    and al,7Fh      ;Снова разрешим работу контроллера клавиатуры
    out 61h,al      ;подтверждаем факт приема скан кода
    mov al,20h      ;20h - команда EOI
    out 20h,al      ;20h - порт контроллера
    pop ds          ;Восстановим регистры
 
    pop es
    popa
    iret            ; выйдем из прерывания
Endp    new_09h
0
764 / 308 / 11
Регистрация: 27.05.2011
Сообщений: 703
30.05.2011, 19:57 8
Вроде так:
Assembler
1
2
3
4
5
6
7
8
9
10
.......
h0: mov ax,40h                    ;Настроим ES на сегмент данных BIOS
 mov es,ax
 mov al,byte ptr es:[18h]       ;Получим байт
 test al,1000000b                 ;проверяем нажата или нет
 jne xxx
 
 ;test al,69 ;Клавиша Scroll Loсk нажата?                                ;удалить
 ;je xxx ;если нет, то выйдем                                                ;удалить
.......
P.S:Было бы лучше, если бы ты предоставил полный код, чтобы я мог потестить где, что и как.
(ну это конечно если предложенный вариант не проканает)
0
1 / 1 / 0
Регистрация: 14.04.2011
Сообщений: 20
30.05.2011, 20:03  [ТС] 9
zzzyyyxxx, а всё разобрался
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2011, 20:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Клавиатура мигает всеми тремя индикаторами Caps Lock, Scroll Lock и Num Lock и соответственно не работает!
Здравствуйте парни и девушки! Столкнулся с такой проблемой! Имеется клавиатура Genius Ergomedia...

Работа с клавиатурой (клавиши num lock, caps lock, scroll lock)
определить состояние статуса клавиш " num lock, caps lock,scroll lock " с отображением и их...

Горят лампочки caps lock и num lock, ноутбук не включается
Доброе время суток, форумчане. Такая проблема, утром включаю ноутбук asus n53d, на нем...

При нажатии на клавиши Num Lock, Caps Lock, Insert вывести в StatusBar состояние кнопок C++
Добрый день, уважаемые программисты, студенты, школьники, а также все посетители этого...


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

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

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