0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 22
|
|||||||||||
1 | |||||||||||
TASM Не могу разобраться в том, как работает обработчик события мыши04.06.2019, 13:29. Показов 4199. Ответов 13
Метки нет (Все метки)
Не могу понять, как работает обработчик события мыши в ассемлере. В первом куске кода, как я понимаю, создали подпрограмму, которая при нажатии на лкм переходит к выполнению подпрограммы handler, верно?
0
|
04.06.2019, 13:29 | |
Ответы с готовыми решениями:
13
Не срабатывает обработчик события мыши Обработчик события от мыши в PyQt5 Обработчик события нажатия мыши в ListView Аффинная перестановка. Не могу разобраться в том, как действует шифр |
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
||||||
04.06.2019, 14:47 | 2 | |||||
Твой handler будет вызываться только когда нажата левая клавиша мыши и при этом тебе в регистрах cx и dx будут передаваться координаты X и Y курсора мыши соответственно. Так-что
3
|
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 22
|
||||||
04.06.2019, 16:05 [ТС] | 3 | |||||
Ethereal, Спасибо. Пока ломаю голову, пытаюсь разобраться. Получился такой код, который пишет "привет", а после нажатия лкм пишет "привет снова".
0
|
Ушел с форума
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
|
|
04.06.2019, 16:09 | 4 |
keldranace,
судя по фразе впечатление такое, что ты создал ЕХЕ-программу, хотя в тексте программы
0
|
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 22
|
|
04.06.2019, 16:14 [ТС] | 5 |
Mikl___, нет, программа линкуется ключами /x/t и на выходе получается .COM.
Немного изменил программу, добавил "retf" после вывода "hello again". В какую конкретно точку меня отсылает этот retf?
0
|
Ушел с форума
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
|
|
04.06.2019, 16:18 | 6 |
keldranace,
Вывод координат мыши на экран
0
|
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 22
|
|
04.06.2019, 16:50 [ТС] | 7 |
Mikl___, Спасибо, буду разбираться. Голова уже малость болит от ассемблера)
0
|
Ушел с форума
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
|
|
04.06.2019, 16:56 | 8 |
keldranace,
тут малой головной болью не отделаться, программирование на ассемблере это магия, которая требует полной отдачи
2
|
Модератор
|
|
04.06.2019, 18:37 | 9 |
keldranace, ещё можете почитать в FAQ
Кратко о работе с мышью в DOS с помощью сервисного прерывания int 33h
1
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
05.06.2019, 07:14 | 10 |
Подскажу. Обработчик событий handler должен завершаться дальним возвратом из подпрограммы, а не ближним. Замени в его конце ret на retf
Добавлено через 6 минут Или можно оставить ret , но оформить обработчик так : handler PROС FAR бла-бла-бла ret ENDP Здесь ключевое словечко FAR надавит ассемблеру на мозг, чтобы он при компиляции втыкал не ближний ret (а он по умолчанию ближний), а дальний. Короче, одно из двух. Добавлено через 6 минут Блин. Не заметил сразу. Нельзя завершать программу из обработчика. Ты что завершаешь-то ? Свою программу или драйвер мыши из которого был вызван обработчик ? Операционка грохнется от таких вольностей. Убери из обработчика Обработчик должен завершиться по retf , а mov ah,4ch int 21h уместен в головной программе после ожидания нажатия клавиши, которое ты закомментировал.
1
|
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 22
|
|
05.06.2019, 17:35 [ТС] | 11 |
Ethereal, Спасибо, вроде кое-что начинаю понимать.
0
|
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 22
|
||||||
06.06.2019, 00:01 [ТС] | 12 | |||||
Ethereal,
Программу немного переделал, но теперь вообще никак не работает. Если просто запустить и дважды нажать любую клавишу, то программа без проблем завершиться. Если нажать лкм - встанет. В конце обработчика пробовал и ret и retf и через прыжок возвращаться к месту вызова. Ничего не помогает
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
06.06.2019, 01:15 | 13 |
Сообщение было отмечено keldranace как решение
Решение
Ать.
Добавлено через 1 минуту
И два. Добавлено через 9 минут Про ать : При входе в обработчик ds какой попало. И сказано : Созданный таким образом драйвер событий должен позаботиться о правильной установке регистра DS. Однако драйвер событий не обязан сохранять и восстанавливать содержимое регистра DS и других регистров процессора. Про два : Это в com-программе при запуске cs=ds=es=ss=PSP. А в exe ds=es=PSP , но cs указывает на сегмент кода, а ss на сегмент стека, которые иные чем PSP. А тебе в функцию установки обработчика надо передать адрес обработчика в виде es:dx. Но es у тебя указывал на PSP, а не на сегмент кода.
1
|
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 22
|
|
07.06.2019, 17:29 [ТС] | 14 |
Ethereal,
Шикарно, спасибо. Окончательно разобрался с тем, как работает обработчик событий мыши. Теперь буду думать над остальной частью программы
0
|
07.06.2019, 17:29 | |
07.06.2019, 17:29 | |
Помогаю со студенческими работами здесь
14
Обработчик события нажатия кнопки мыши для dataGridView Как разобраться в том что за электродвигатель и как он работает Создайте обработчик события нажатия кнопки мыши на форме (Click), который будет очищать поле ввода Как вызвать один обработчик события в другом обработчике события? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |