Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244

Отображение кодов нажимания / отпускания клавиши

21.05.2016, 12:07. Показов 3138. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
Реализовать процедуру обработки прерывания от клавиатуры, что заменяет стандартный обработчик. Процедура должна реализовать отображение кодов нажимания / отпускания клавиши.
Нашел код который выводит скан код нажатой клавиши, как его модифицировать что бы выводило так же код отпускания клавиши?
Код:
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
model   tiny
; Труппоасм не понимает AAM c основанием счисления - пишем макро
.aam    macro   power
    db  0D4h, power
    endm
.code
    org 100h
start:  xor ah, ah
    int 16h
    cmp ah, 1   ; <Esc>?
    jz  done
    int 29h
    mov al, 20h
    int 29h
    mov al, ah
    call    cvt
    call    crlf
    jmp start
done:   int 20h
cvt:    .aam     16              ; al / 16 -> ah - десятки, al - единицы
    or  ax, 3030h       ; преобразуем в символы ASCII
    call    @0              ; десятки  выводим первыми
@0: xchg    al, ah          ; меняем местами 
    cmp al, 39h         ; если код символа 
    jbe @1              ; больше '9'?
    add al, 7           ; то корректируем его до 'A'-'F'
@1: int 29h         ; выводим на экран
    ret
crlf:   mov ax, 0D0Ah
    int 29h
    xchg    ah,al
    int 29h
    ret
    end start
Добавлено через 20 часов 34 минуты
Актуально
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2016, 12:07
Ответы с готовыми решениями:

Реализовать событие отпускания клавиши на QGraphicsView
Как реализовать событие отпускания клавиши на QGraphicsView? mousePressEvent работает нормально даже так: void...

Подписаться на событие нажатия и отпускания нужной мне клавиши
Есть ли сабж как в виндовсформс? Я хочу подписаться на событие нажатия и отпускания нужной мне клавиши

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

7
183 / 121 / 26
Регистрация: 18.05.2015
Сообщений: 509
21.05.2016, 20:02
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

AH сервис
--- ----------------------------------------------------------------------------
00H читать (ожидать) следующую нажатую клавишу
выход: AL = ASCII символ (если AL=0, AH содержит расширенный код ASCII )
AH = сканкод или расширенный код ASCII
--- ----------------------------------------------------------------------------
01H проверить готовность символа (и показать его, если так)
выход: ZF = 1 если символ не готов.
ZF = 0 если символ готов.
AX = как для подфункции 00H (но символ здесь не
удаляется из очереди).
--- ----------------------------------------------------------------------------
02H читать состояние shift-клавиш. определить, какие shift-клавиши нажаты в
данный момент, находится ли клавиатура в состоянии NumLock, и т.п.
выход: AL = статус клавиатуры -- см. флаги клавиатуры
1
539 / 399 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
22.05.2016, 06:35
Так можно получить скан-коды "простых" клавиш. Кстати, для них <код отпускания> = <код нажатия> + 80h.
А как определить коды, например, для
[PgDn] по четыре кода: нажатие - E0 2A E0 51; отпускание - E0 D1 E0 AA
[Pause] вырабатывает сразу и только при нажатии E1 1D 45 E1 9D C5
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
22.05.2016, 07:25
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

Цитата Сообщение от Dmitrinik Посмотреть сообщение
Кстати, для них <код отпускания> = <код нажатия> + 80h.
Это для клавиатур(XT). Для АТ - контроллёру посылаются 2 байта: F0h и SCAN
Википедия: https://ru.m.wikipedia.org/wiki/Скан-код
1
539 / 399 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
22.05.2016, 08:31
Цитата Сообщение от R71MT Посмотреть сообщение
Это для клавиатур(XT). Для АТ - контроллёру посылаются 2 байта: F0h и SCAN
1. По указанной ссылке для [PgDn] (XT) приведены по два байта. На самом же деле контроллер возвращает 4 байта нажатия и столько же отпускания.
2. А что, для клавиатуры AT приведенный выше код позволит определить всю группу скан-кодов для всех клавиш?
3. Вот это "<код отпускания> = <код нажатия> + 80h" я дал лишь для того, чтобы ТС не заморачивался, а вы так легко приняли все за "чистую монету".
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
22.05.2016, 10:10
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

Цитата Сообщение от Dmitrinik Посмотреть сообщение
На самом же деле контроллер возвращает 4 байта нажатия и столько же отпускания.
..речь идёт только про SCAN (без ascii)
Цитата Сообщение от Dmitrinik Посмотреть сообщение
2. А что, для клавиатуры AT приведенный выше код позволит определить всю группу скан-кодов для всех клавиш?
..вопрос к ТС
Цитата Сообщение от Dmitrinik Посмотреть сообщение
..а вы так легко приняли все за "чистую монету".
..ничё я не принимал, а только посоветовал ТС шагать в ногу со-временем. Прибавит он щас 80, а препод забракует
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
22.05.2016, 12:35
Вы о разных уровнях работы с клавиатурой говорите.

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

Скан- и ascii- коды (строго по 2 байта) это уже уровень BIOS.

ОС DOS уже слегка "химичит" с функциональными клавишами - выдавая при опросе 0 и scan-код функциональной клавиши. И выдавая ascii-код для алфавитно-цифровых.

Достаточно подробно я об этом читал в книге В.Кулаков "Программирование на аппаратном уровне". В ней приводились и примеры работы с портом.
2
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
22.05.2016, 13:09
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
я об этом читал в книге В.Кулаков
..да, есть такое на странице(71). Ещё там сказано, что "при включении питания клавиатура устанавливается в режим №2 (PC/AT), причём для всех клавиш включена посылка кодов нажатия и отпускания".
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2016, 13:09
Помогаю со студенческими работами здесь

Прерываемая анимация возвращения в начальную точку после отпускания клавиши
Есть некий тахометр, который при нажатии клавиши S увеличивает число оборотов. Нужно сделать так, чтобы после отпускания клавиши обороты...

Визуальное отображение нажатия и отпускания клавиш
Добрый день! Собственно все в названии темы. Необходимо при нажатии комбинации клавиш в окне визуально отображать нажатие...

Отображение bb кодов DLE 9.8
Здравствуйте!У меня такая проблема, на моем сайте на котором стоит движ. DLE 9.8, при добавлении новости или комментария бб коды...

Устройство для нажимания кнопки
Всем доброго времени суток! У меня возникла задача над которой уже довольно долго ломаю голову. Нужно сделать устройство, которое будет...

Отображение кода функциональной клавиши
Добрый день, прошу помощи в таком задании: Создать поля Label1 и Label2 для отображения названия и кода нажатой функциональной клавиши....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru