![]() |
|
![]() ![]() ![]() |
|
Pro_BD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2004 Где: СПБ Репутация: нет Всего: нет |
У меня маленькая проблемма написал программу, а она работает не коректно ( не так как надо )
вот код программы: .model tiny .code org 100h Begin: jmp Init ;метка Int_33_proc proc ;наш обрабочик pushf ;сохраним все =) push ds push dx ;сохраним регистры push es push dx mov ah,0Fh ; получим текущие состояние дисплея int 10h mov ax,0 ;инициализация мышки int 33h mov ax,1 ; покажем курсор int 33h mov ax,000Ch ;установим обрабочик событий mov cx,0002h ;нажатие левой кнопки mouse'a mov dx,offset Mouse_Ok ; адрес нашего обрабочика int 33h mov ax,000Ch mov cx,0000h ;удалить обрабочик int 33h iret ; выход Mouse_Ok: mov ax,3 ;определим состояние мышки int 33h mov ah,9h ;выводим строку на экран mov dx,offset Message_1 int 21h pop dx pop es retf ; выход из обработчика - команда RETF call dword ptr cs:[Int_33_Real] pop dx pop ds iret ; Выходим из прерывания Int_33_Real dd ? ;Переменная для хранения адреса "int 33h" Message_1 db 'Вы нажали левую кнопку мышки$' Int_33_proc endp Init: mov ah,35h ;Показывает адрес прерывания mov al,33h ;Указывает номер прерывания int 21h mov word ptr [Int_33_Real],dx ;показываем куда мы это все сохроняли mov word ptr [Int_33_Real]+2,ds mov ah,25h ;Установим вектор прерывания mov al,33h mov dx,offset Int_33_proc int 21h popf int 20h end Begin Помогите мне разобратся в чем я мог ошибится Что должна была делать программа: 1.Мы её запускаем. 2.При нажатие на левую кнопку мыши она должна была выводить сообщение что 'Нажата левая кнопка мыши $' 3.Все а работает она так ( по крайне мере у меня она так работает ). При её запуске в Дос навигаторе мышь исчезает(верней курсор невидать) , просто отключается (все нету её больше) где могла быть ошибка подскажите, я дня 3 сидел думал думал так не че не надумал решил обратится к вам. P.S. Позор мне товарищи позор, написал прогу а не могу понять что к чему в ней =((((( И если ко нить будет что небуть высказывать по поводу моей программы (я иммею в виду ошибки ) если можно то поконкретней изъесняйтесь. тоесть не так ты Н.П. Ты облажался в строке (6) , а ты облажался потому что ...... Заранее спасибо |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
ё-моё... вызывать прерывание из обработчика этого прерывания... сильно...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Nos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 29.3.2004 Репутация: нет Всего: нет |
Конкретнее пока не могу подсказать, но если я не ошибаюсь, то:
- сохраняем родной обрободчик - заменяем его собственным - после отработки своего, восстанавливаем родной ты уверен, что твоя прога делает именно так? |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Да, если хочешь звать его, надо делать pushf, call dword ptr Int_33_Real. Это сообщение отредактировал(а) Chingachguk - 13.4.2004, 19:44 -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Pro_BD |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2004 Где: СПБ Репутация: нет Всего: нет |
Ну у меня вроде так и есть ну типа сохраним флаги а потом ..... и тд. Добавлено @ 19:49
Ну как тебе сказать уверен я или нет, я уверен что это так по моей логике тобишь на 90% Остальные 10% это мое не знание поэтому может быть и ошибка. |
||||
|
|||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Нет, я не говорю про сохранение флагов. Ты используешь ФУНКЦИЮ прерывания int 33h - установить обработчик события. Когда ты это делаешь, ты должен указать, при наступлении какого именно события тебя нужно вызвать. Про это посмотри подробнее в описании к этой функции. Процедура должна быть типа far а не прерывание. Типа того:
jmp Install MyMouse proc pusha push ds ; Здесь код твой ; смотри регистры, которые тебе даст при вызове обработчик int 33h pop ds popa retf MyMouse endp Install: ; Установить обработчик события ; Чего-то ждать, например - клавиши ; Деинсталлировать обработчик ; Завершить программу Если же ты хочешь сделать программу РЕЗИДЕНТНОЙ, те такой, что работает будучи ОСТАВШЕЙСЯ В ПАМЯТИ, то код будет несколько иным: jmp Install MyMouse proc pusha push ds ; Здесь код твой ; смотри регистры, которые тебе даст при вызове обработчик int 33h pop ds popa retf MyMouse endp Install: ; Установить обработчик события ; Завершить процесс, оставшись резидентом - смотри вызовы int 27h или int 31h. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Jin X |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 5.3.2004 Репутация: 1 Всего: 1 |
Ответ см. тут ;)
--------------------
Бойся своей мечты, ибо она осуществима! |
|||
|
||||
Serzh |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 30.9.2003 Где: SPb Репутация: нет Всего: нет |
объясните мне кто нибудь, зачем менять int 33h...
когда я мышами страдал я этого не делал и все пахало... |
|||
|
||||
Pro_BD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2004 Где: СПБ Репутация: нет Всего: нет |
А что ты делал ?? по конкретней ?, и как по другому что либо менять не касаясь int 33h ???? |
|||
|
||||
Serzh |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 30.9.2003 Где: SPb Репутация: нет Всего: нет |
Это сообщение отредактировал(а) Serzh - 15.4.2004, 01:44 |
|||
|
||||
Pro_BD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2004 Где: СПБ Репутация: нет Всего: нет |
to Serzh твой кодик неплох, он мне очень помог разобратся и исходя их этого,задам еще пару вопросов:
ак при условном переходе сказать что это праваяя кнопка мышки а это левая ???? Вот код:
Это сообщение отредактировал(а) Pro_BD - 16.4.2004, 08:13 |
|||
|
||||
Serzh |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 30.9.2003 Где: SPb Репутация: нет Всего: нет |
|
|||
|
||||
Jin X |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 5.3.2004 Репутация: 1 Всего: 1 |
Если нужно проверить только левую или только правую кнопку и не реагировать на нажатие обоих (а также левой+средней и т.п), то см. Serzh. Если же отдельно левая, отдельно правая (а нажатие обеих как левая), то cmp меняем на test.
Если и ещё вариант:
Это сообщение отредактировал(а) Jin X - 15.4.2004, 17:27 --------------------
Бойся своей мечты, ибо она осуществима! |
|||
|
||||
Chingachguk |
|
||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Ну можно и так:
Или так:
Или так:
;))) Это сообщение отредактировал(а) Chingachguk - 15.4.2004, 17:45 -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
||||||||
|
|||||||||
Pro_BD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2004 Где: СПБ Репутация: нет Всего: нет |
Что то я все равно не доконца понял
![]() Так как прога у меня все равно что то не запускается =(( Взгяните плз ...
Это сообщение отредактировал(а) Pro_BD - 16.4.2004, 11:38 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |