Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767

Получить координаты нажатий левой и правой кнопок мыши

15.11.2011, 22:25. Показов 5514. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот надо получить координаты нажатий левой и правой кнопок мыши.
меня вот что интересует
после каждого mov надо вызвать 33-е прерывание?
я имею ввиду
Assembler
1
2
3
4
mov ax,0000h ;инициализация мыши
        int 33h
        mov ax, 0001h ;показать курсор
        int 33h
и ещё для обработчика нажатий. какую функцию использовать надо 3h?
Assembler
1
2
3
4
5
6
7
8
9
Функция 03h - чтение положения маркера/состояния кнопок. Возвращает текущее положение маркера мыши и текущее состояние кнопок мыши.
Входные данные: AX = 0003H
Выходные данные: BX = состояние кнопок мыши
                                  Бит 0 = 1:нажата левая кнопка
                                  Бит 1 = 1:нажата правая кнопка
                                  Бит 2 = 1:нажата средняя кнопка
                                  Биты 3-15: не используются
                                  CX = координата X 
                                  DX = координата Y
тогда как обработать нажатия левой а потом правой?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2011, 22:25
Ответы с готовыми решениями:

При нажатии левой клавиши "мыши" отразить курсор в левой половине экрана, а при нажатии правой - в правой
При нажатии левой клавиши "мыши" отразить курсор в левой половине экрана, а при нажатии правой - в правой, использовав в случае...

Количество нажатий левой кнопки мыши на экран в текстовом режиме
Прошу помочь кто сможет! Написать программу, которая выводит количество нажатий левой кнопки мыши на экран в текстовом режими. Конец...

Нажатием левой кнопки мыши выбирать и запоминать цвет, при нажатии правой кнопки мыши - устанавливать выбранный цвет
Люди добрые, киньте какой-нибудь рабочий .asm для masm, похожий на решение следующей задачи, а то мне год надо зубрить чтобы написать...

28
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
15.11.2011, 22:42
https://www.cyberforum.ru/post2012422.html
1
15.11.2011, 23:13  [ТС]

Не по теме:

мда...мне вот интересно какой .asm файл там к чему относится. особенно учитывая что по сути комментариев в коде нет.

0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
15.11.2011, 23:33
Artishok, вот таким макаром :
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
.model tiny
.code
 
org 100h
start:
 
xor ax,ax
int 33h
 
mov ax,1
int 33h
 
mov ax,0ch
mov dx,offset mouse_proc
mov cx,0fh
int 33h
 
xor ax,ax
int 16h
 
mov ax,2
int 33h
mov ax,0ch
xor ax,ax
int 33
ret
 
string1 db 'LEFT KEY',0,'$'
string2 db 'RIGHT KEY','$'
 
mouse_proc proc
 
push cs
pop ds
 
mov dx,0c20h
mov ah,2
int 10h
 
mov ax,3
int 33h
 
test bx,1
je @f
 
mov ah,9
mov dx,offset string1
int 21h
 
 
@@:
test bx,2
je @f
 
mov ah,9
mov dx,offset string2
int 21h
 
 
@@:
retf
mouse_proc endp
end start
2
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
15.11.2011, 23:36
В файле mskeys.asm:
Assembler
1
2
3
4
5
6
7
8
l1:
                mov     cx,0ffh  
l2:
                mov     ax,0ch
                push    cs
                pop     es
                mov     dx,offset msdrv
                int     33h
установка ф-ции обработки событий, от msdrv: - сама ф-ция, параметры вызова даны в мессаге, и в GMOUSE.DOC.
Комментов к коду не будет - писалось почти 20 лет назад.
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2011, 01:08  [ТС]
Цитата Сообщение от Vadimych Посмотреть сообщение
Artishok, вот таким макаром :
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
.model tiny
.code
 
org 100h
start:
 
xor ax,ax ;инициализация
int 33h   
 
mov ax,1 ;показать курсор
int 33h
 
mov ax,0ch ;?
mov dx,offset mouse_proc
mov cx,0fh
int 33h
 
xor ax,ax
int 16h
 
mov ax,2
int 33h
mov ax,0ch
xor ax,ax ;отключение
int 33
ret
 
string1 db 'LEFT KEY',0,'$'
string2 db 'RIGHT KEY','$'
 
mouse_proc proc
 
push cs
pop ds
 
mov dx,0c20h ;?
mov ah,2
int 10h
 
mov ax,3  ;чтение курсора
int 33h 
 
test bx,1 ;проверка бита 1
je @f
 
mov ah,9
mov dx,offset string1
int 21h
 
 
@@:
test bx,2 ;проверка бита 2
je @f
 
mov ah,9
mov dx,offset string2
int 21h
 
 
@@:
retf
mouse_proc endp
end start
я тут немного покомментил. правильно, нет? и ещё я два вопроса в комментах оставил. что это за функции?
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
16.11.2011, 07:51
Artishok, всё верно. Функция 0сh int 33h устанавливает обработчик мыши с адресом в es:dx. В сx - если 07fh- обрабатываются все мышиные события, если 0 - отменяется обработчик. Я в коде по запарке вместо xor cx,cx, xor ax,ax написал. В 23 строке исправить надо. А 2 int 10h - установка курсора.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2011, 22:18  [ТС]
выдало undefined symbol @f
и то что символ @@ уже объявлен
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
16.11.2011, 22:29
Artishok, ну переименуй метки, всего и делов. ТАСМ используешь?
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2011, 22:33  [ТС]
@f это перед retf?
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
16.11.2011, 22:37
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
.model tiny
.code
 
org 100h
start:
 
xor ax,ax
int 33h
 
mov ax,1
int 33h
 
mov ax,0ch
mov dx,offset mouse_proc
mov cx,0ah
int 33h
 
xor ax,ax
int 16h
 
mov ax,2
int 33h
mov ax,0ch
xor cx,cx
int 33
ret
 
string1 db 'LEFT KEY',0,'$'
string2 db 'RIGHT KEY','$'
 
mouse_proc proc
 
push cs
pop ds
 
mov dx,0c20h
mov ah,2
int 10h
 
mov ax,3
int 33h
 
test bx,1
je @1
 
mov ah,9
mov dx,offset string1
int 21h
 
 
@1:
test bx,2
je @2
 
mov ah,9
mov dx,offset string2
int 21h
 
 
@2:
retf
mouse_proc endp
end start
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2011, 22:44  [ТС]
ругается "16 bit segments are not support in file.asm"
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
16.11.2011, 22:52
Artishok, ты чем компилируешь?
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2011, 23:12  [ТС]
tasm32.exe file.asm
tlink32.exe file.obj

изменил dx,ax,cx,si на edx,eax,ecx,esi
и добавил .486 вверху. теперь компилируется норм, но вылетает

а ещё к слову. программа работает каким образом?я имею ввиду она просто считывает нажатие а потом закрывается?
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
16.11.2011, 23:32
32 это лишнее. Поэтому и ошибки вылазят. Надо версию для дос видимо. Программа ждёт нажатия клавиши. В полноэкранный режим, чтобы видеть курсор, перевести можно нажав alt+enter.

Добавлено через 16 минут
Попробуй tasm /t file.asm, может прокатит. Я tasm`ом не пользуюсь, рухлядь. Да, в коде менять не надо ничего.
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
16.11.2011, 23:51  [ТС]
на обычном тасме все работает. я так понял что после каждого нажатия значения координат курсора в dx,cx?

Добавлено через 3 минуты
Цитата Сообщение от Vadimych Посмотреть сообщение
Попробуй tasm /t file.asm, может прокатит. Я tasm`ом не пользуюсь, рухлядь. Да, в коде менять не надо ничего.
я обычно tasm.exe file.asm
tlink.exe /t file.obj

Добавлено через 11 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
test bx,1;проверка первого бита на ноль
 
je @1;если ноль то переходим по метке
push cx;//кидаем координату x
push dx;//кидаем координату y
mov ah,9
mov dx,offset string1 ;выводим строку
int 21h
 
 
@1:;переходим сюда
test bx,2 ;сравниваем второй бит с нулем
je @2 ;если ноль значит ни одна из клавиш не нажата
push cx;//кидаем координату x
push dx;//кидаем координату y
;в стеке четыре элемента
mov ah,9
mov dx,offset string2 ;выводим строку
int 21h
 
 
@2:
retf
но проблема возникает когда вызов функции рисования.
она по идее должна вызывается после нажатия второй клавиши(то есть вначале левая. потом правая клавиши. по условию), а значит перед je @2. но как очистить стек то после вызова функции? и как цвет в al установить?
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
16.11.2011, 23:53
Цитата Сообщение от Artishok Посмотреть сообщение
я обычно tasm.exe file.asm
tlink.exe /t file.obj
Ну да, зарапортовался я. А зачем пуши-то, не пойму? И цвет в этой функции вывода текста не меняется. Для цветного или прямо выводить в видеопамять, или, скажем 19-ю функцию 16-го прерывания биос использовать.
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
17.11.2011, 00:16  [ТС]
внизу функция draw. у нее параметры cx,dx,si,di,al- где al цвет
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
.model tiny
.code
 
org 100h
start:
 
xor ax,ax
int 33h
 
mov ax,1
int 33h
 
mov ax,0ch
mov dx,offset mouse_proc
mov cx,0ah
int 33h
 
xor ax,ax
int 16h
 
mov ax,2
int 33h
mov ax,0ch
xor cx,cx
int 33
ret
 
string1 db 'LEFT KEY',0,'$'
string2 db 'RIGHT KEY','$'
 
mouse_proc proc
 
push cs
pop ds
 
mov dx,0c20h
mov ah,2
int 10h
 
mov ax,3
int 33h
 
test bx,1
je @1
 
mov ah,9
mov dx,offset string1
int 21h
 
 
@1:
test bx,2
je @2
 
mov ah,9
mov dx,offset string2
int 21h
 
 
@2:
retf
mouse_proc endp
 
draw proc
        mov ah,0ch
lp200:  push dx         
lp201:  int 10h         
        inc dx          
        cmp dx,di       
       jng lp201
        pop dx          
        inc cx          
        cmp cx,si       
        jng lp200
 
retf
draw endp
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
17.11.2011, 00:35
Так это что, мышью линию рисовать надо?
0
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
17.11.2011, 09:30  [ТС]
нет просто нажать левую кнопку - верхний левый угол. правую кнопку - нижний правый и прямоугольник рисуется сам

Добавлено через 8 часов 49 минут
.....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2011, 09:30
Помогаю со студенческими работами здесь

Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши выключить индикатор NumLock(+Звук),при нажатие право
Не могу решить подскожите кто знает.(Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши...

Матрица. Вывести сумму строки/столбца по указанию левой/правой кнопок мыши.
Ввести матрицу N*M целых чисел. При указании на элемент матрицы правой клавишей мыши вывести сумму соответствующей строки, а левой - сумму...

Работа с PopupMenu левой и правой кнопками мыши
В моем проекте требуется задать возможность менять пользователем названия осей координат (показаны зеленым цветом) с помощью всплывающего...

Имитация нажатия левой и правой кнопки мыши
Тут на форуме просто свалка из таких тем, и везде мегаметоды для этого писать надо, Подскажите команду пожалуйста как иммитировать нажатие...

Тренажёр мыши, нажатие левой и правой кнопки поочерёдно
Вообщем проблема такая, мне нужно сделать тренажёр мыши. Я всё сделал вроде, но есть одна проблемка. Изначально на форме видно Image1 и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru