Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2016, 15:32   #1
Max00766
Форумчанин
 
Регистрация: 15.11.2015
Сообщений: 151
По умолчанию Установить состояние регистров клавиатуры

Установить такое состояние регистров клавиатуры: NUM LOCK - выключен, CAPS LOCK - включен, SCROLL LOCK – выключен.
Есть код который выводит состояние этих кнопок, но не знаю как сделать что бы программа сама их включала выключала и выводила их состояние.
Так же буду благодарен за комментарии к коду
Код:
Код:
model small 
.STACK 100h
.DATA
mes1 db 'Num Lock on',0dh,0ah,'$'
mes2 db 'Caps Lock on',0dh,0ah,'$'
mes3 db 'Scroll Lock on',0dh,0ah,'$'
mes4 db 'Insert on',0dh,0ah,'$'
mes5 db 'All keys are off',0dh,0ah,'$'
.CODE
main PROC 
        mov ax, @DATA
        mov ds, ax
        xor ax, ax
        
        mov es, ax      
        mov cl, byte ptr es:[0417h]     
        shr cl, 04h
        cmp cl, 00h
        jnz m00
        lea dx, mes5
        mov ah, 09h
        int 21h
        jmp m07
m00:        shr cl, 01h
        jnc m01
        lea dx, mes3
        mov ah, 09h
        int 21h
m01:        shr cl, 01h
        jnc m02
        lea dx, mes1
        mov ah, 09h
        int 21h
m02:        shr cl, 01h
        jnc m03
        lea dx, mes2
        mov ah, 09h
        int 21h
m03:        cmp cl, 00h
        jz m07
        lea dx, mes4
        mov ah, 09h
        int 21h
m07:        mov ah, 07h
            int 21h     
exit:       mov ax, 4c00h 
        int 21h 
main ENDP 
END main
Max00766 вне форума Ответить с цитированием
Старый 25.05.2016, 07:24   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Контроллеру клавиатуры соответствуют порты с номерами от 60h до 6Fh,
хотя для всех/стандартных операций достаточно портов 60h и 61h.

61h для чтения и записи — регистр управления клавиатурой.
---------------------------------------------------------------------
Если в старший бит этого порта записать 1, то клавиатура будет заблокирована,
если 0 — разблокирована. Другие биты этого порта менять нельзя,
т.к. они управляют другими устройствами. Чтобы изменить состояние клавиатуры,
надо считать байт из этого порта, изменить бит 7 и снова записать в порт 61h.


60h для чтения - регистр управления клавиатурой.
---------------------------------------------------------------------
При чтении из него можно получить скан-код последней нажатой клавиши.
Именно так лучше всего реализовывать резидентные программы, перехватывающие прерывание IRQ1,
т.к. по этому коду можно определять момент нажатия и отпускания любой клавиши.


60h для записи — регистр управления клавиатурой.
---------------------------------------------------------------------
Байт, записанный в этот порт интерпретируется как команда.
Клавиатура отвечает на все команды (кроме EE/FE), скан-кодом FAh (подтверждение),
который поглощается BIOS, так что, если мы не перехватываем стандартный обработчик,
о байте подтверждения можно не беспокоиться. Основные команды перечислены ниже:

Код:
Команда 0EDh 0xh — изменить состояние светодиодов клавиатуры.
Второй байт этой команды определяет новое состояние (1—вкл, 0—выкл).

    бит 0 — состояние Scroll Lock
    бит 1 — состояние Num Lock
    бит 2 — состояние Caps Lock

При этом состояние переключателей в поле [0:0417h], не изменяется,
и при первой возможности обработчик прерывания клавиатуры его восстановит.

Команда EEh — эхо-запрос. Клавиатура отвечает скан-кодом 0EEh.
Команда F4h — включить клавиатуру.
Команда F5h — выключить клавиатуру.
Команда F6h — установить параметры по умолчанию.
Команда FEh — послать последний скан-код еще раз.
Команда FFh — выполнить самотестирование.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 25.05.2016, 09:28   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
61h для чтения и записи — регистр управления клавиатурой.
---------------------------------------------------------------------
Если в старший бит этого порта записать 1, то клавиатура будет заблокирована,
если 0 — разблокирована. Другие биты этого порта менять нельзя,
т.к. они управляют другими устройствами. Чтобы изменить состояние клавиатуры,
надо считать байт из этого порта, изменить бит 7 и снова записать в порт 61h.
Порт 61h относится к системной плате и к клавиатуре не имеет отношение.
Если писать наобум, то вы можете убить компьютер.
Сколько можно повторять. 61h порт относился к клавиатуре только в XT.
В AT, PS/2 и всех современных компьютерах это порт не клавиатуры. Доказательства:
Пруф 1
Пруф 2 (IBM PS/2)
Если надо могу ещё 10 ссылок привести.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 25.05.2016, 10:17   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Всё правильно. Этот порт использовали XT-контролёры 8255.
Цитата:
Сообщение от Pavia Посмотреть сообщение
Если писать наобум, то вы можете убить компьютер.
Ну ты прям жути нагнал! У новых контролёров клавиатуры 8042 этот порт изъят. Он перекочевал в системную логику и эмулируется системой. В юзер-моде записать в него ты просто не сможешь. Читать - пожалуйста..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Содержимое регистров maxwelldream Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.01.2011 09:28
разрабоать Ассемблер программу, отображающую на экране текущее состояние байтов статуса клавиатуры. Ivan73 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 15.06.2009 22:30
программа позволяющая установить с клавиатуры новую дату и новое текущее время men73 Фриланс 1 11.06.2009 20:23
состояние регистров клавиатуры olen` Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 05.06.2009 22:34
много регистров nntpaha Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 22.12.2007 19:01