Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.02.2023
Сообщений: 20

Обработчик событий нажатия клавиш мыши

10.06.2023, 12:32. Показов 1401. Ответов 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
.model small
.stack 100h
 
.data
cursor_pos_x dw ?
cursor_pos_y dw ?
msg1 db '%$'
msg2 db '@$'
 
.code
start:
    mov ax, @data
    mov ds, ax
    
    ; инициализация прерывания INT 33h для обработки событий мыши
    mov ax, 0h
    int 33h
    
    ; бесконечный цикл ожидания событий мыши
    wait_for_mouse_event:
        ; ожидание событий мыши
        mov ax, 3h
        int 33h
        
        ; проверка кода события мыши
        cmp bx, 02h ; отпускание правой клавиши мыши
        je right_mouse_button_up
        
        cmp bx, 01h ; отпускание левой клавиши мыши
        je left_mouse_button_up
        
        jmp wait_for_mouse_event ; ожидание следующего события мыши
        
    right_mouse_button_up:
        ; сохранение координат курсора
        mov cursor_pos_x, cx
        mov cursor_pos_y, dx
        
        ; вывод символа "%"
        mov ah, 09h
        lea dx, msg1
        int 21h
        
        jmp wait_for_mouse_event ; ожидание следующего события мыши
        
    left_mouse_button_up:
        ; сохранение координат курсора
        mov cursor_pos_x, cx
        mov cursor_pos_y, dx
        
        ; вывод символа "@"
        mov ah, 09h
        lea dx, msg2
        int 21h
        
        jmp wait_for_mouse_event ; ожидание следующего события мыши
        
end start
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2023, 12:32
Ответы с готовыми решениями:

Собственный обработчик нажатия клавиш <CTRL+С>
Уважаемые форумчане! помоги написать собственный обработчик нажатия клавиш &lt;CTRL+С&gt; пишу в masm32 (link16.exe) буду рад если и в...

Обработчик прерывания клавиатуры: отображение скан-кодов нажатия/отпускания клавиш
Здраствуйте! мне требуется помощь в написании assembler программы... я в этом не очень хорошо разбираюсь!!! вот моя программа: ...

Обработчик событий мыши (подкиньте пример или исправте ошибку, пожалуйста=))
У меня проблема с использованием обработчика событий мыши (в приложениях компилируемых в .exe). Если кто может киньте код с...

2
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
10.06.2023, 15:10
Лучший ответ Сообщение было отмечено OleggggRaa как решение

Решение

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
; Разработать программу, выводящую символ «%» в позицию,
; в которой происходит отпускание правой клавиши мыши
; и символ «@» в позиции, в которой происходит отпускание левой клавиши мыши.
    .model small
    .code
    assume ds:_text
 
; вызов функций мыши
mouse   macro val
    mov ax,val
    int 33h
    endm
 
mouseShow macro
    mouse 1
    endm
 
mouseHide macro
    mouse 2
    endm
 
mousePoll macro
    mouse 3
    endm
 
lt_rel=4 ; биты событий мышки
rt_rel=16
 
; вывод сообщения об ошибке, если драйвер мыши не найден
emess   db "Error: mouse driver not found",13,10,"$"
exiterr:mov ax,3 ; вернуться в текстовый режим
    int 10h
    mov dx,offset emess ; печать сообщения
    mov ah,9
    int 21h
    mov ax,4C01h ; выход в DOS с кодом ошибки 1
    int 21h
 
; основная программа
start:mov ax,cs
    mov ds,ax
    mov es,ax
    mouse 0    ; инит мышку
    cmp ax,-1  ; драйвер мышки не найден - ошибка
    jnz exiterr
    mouseShow  ; показать мышку
    mov cx,lt_rel+rt_rel ; маска обработчика событий мышки
    mov dx,offset subr   ; dx=адрес обработчика событий
    mouse 0Ch
main:   mov ah,1 ; клавиша нажата ?
    int 16h
    jnz ex   ; да, выход из программы
    jmp main ; нет - ожидать в цикле
ex: mov ah,0 ; поглотить код клавиши
    int 16h
    mov cx,0 ; отключить обработчик событий мышки
    mouse 0Ch
    mouseHide ; скрыть мышку
    mov ax,4C00h ; выход в Дос
    int 21h
 
subr:   test ax,lt_rel ; обработчик событий - регистры можно не сохранять
    jnz do_lt
    test ax,rt_rel
    jnz do_rt
    retf ; дальний возврат из обработчика
 
do_lt:  mov al,"@" ; отпущена левая кнопка мышки
    jmp doit    
do_rt:  mov al,"%" ; отпущена правая кнопка мышки
doit:   rept 3     ; cx=cx/8, dx=dx/8 - координаты мышки в знакоместах
    shr cx,1
    shr dx,1
    endm
    push es
    push ax
    mov ax,80 ; di=80*dx+cx
    mov di,dx
    mul di
    mov di,ax
    add di,cx
    add di,di ; di=2*di - адрес курсора мышки в видео памяти
    mouseHide ; скрыть мышку
    mov ax,0B800h ; es=видео сегмент
    mov es,ax
    pop ax    ; восстан из стека al - символ, который надо изобразить
    mov ah,15 ; ah=атрибут символа (белый на чёрном)
    mov es:[di],ax ; занести символ в видео память
    pop es
    mouseShow ; показать мышку
    retf ; дальний возврат из обработчика
 
    end start
1
0 / 0 / 0
Регистрация: 24.02.2023
Сообщений: 20
11.06.2023, 17:14  [ТС]
Большое спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2023, 17:14
Помогаю со студенческими работами здесь

Обработчик событий нажатия кнопок мыши внутри цикла
Товарищи, подскажите. Уже весь мозг сломал. Проблема в следующем: я использую модуль graphABC, который с помощью цикла (for, repeat,...

Обработчик событий нажатия кнопок мыши внутри цикла. Не работает
Товарищи, подскажите. Уже весь мозг сломал. Проблема в следующем: я использую модуль graphABC, который с помощью цикла (for, repeat,...

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

Обработчик нажатия клавиш
Хочу написать обработчик нажатия клавиш. А именно чтобы после запуска приложения консольное окно сворачивалось и программа считывала все...

Обработчик событий мыши
Доброе утро, форумчане! На сайте есть боковое меню, которое реагирует на скролинг, т.е. при прокрутке вниз скрывается, при возврате...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru