Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Народ помогите разобратся 
:(
    Опции темы
Pro_BD
  Дата 13.4.2004, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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) , а ты облажался потому что ......

Заранее спасибо




PM MAIL ICQ AOL   Вверх
Akina
Дата 13.4.2004, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



ё-моё... вызывать прерывание из обработчика этого прерывания... сильно...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Nos
Дата 13.4.2004, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 29.3.2004

Репутация: нет
Всего: нет



Конкретнее пока не могу подсказать, но если я не ошибаюсь, то:
- сохраняем родной обрободчик
- заменяем его собственным
- после отработки своего, восстанавливаем родной
ты уверен, что твоя прога делает именно так?
PM MAIL   Вверх
Chingachguk
Дата 13.4.2004, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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.
PM MAIL ICQ   Вверх
Pro_BD
Дата 13.4.2004, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.4.2004
Где: СПБ

Репутация: нет
Всего: нет



Цитата(Chingachguk @ 13.4.2004, 19:43)
Да, если хочешь звать его, надо делать pushf, call dword ptr Int_33_Real.



Ну у меня вроде так и есть ну типа сохраним флаги а потом ..... и тд.
Добавлено @ 19:49
Цитата(Nos @ 13.4.2004, 17:25)
Конкретнее пока не могу подсказать, но если я не ошибаюсь, то:
- сохраняем родной обрободчик
- заменяем его собственным
- после отработки своего, восстанавливаем родной
ты уверен, что твоя прога делает именно так?

Ну как тебе сказать уверен я или нет, я уверен что это так по моей логике тобишь на 90%
Остальные 10% это мое не знание поэтому может быть и ошибка.
PM MAIL ICQ AOL   Вверх
Chingachguk
Дата 13.4.2004, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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.
PM MAIL ICQ   Вверх
Jin X
Дата 13.4.2004, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 5.3.2004

Репутация: 1
Всего: 1



Ответ см. тут ;)
--------------------
Бойся своей мечты, ибо она осуществима!
PM MAIL   Вверх
Serzh
Дата 14.4.2004, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



объясните мне кто нибудь, зачем менять int 33h...
когда я мышами страдал я этого не делал и все пахало...
PM MAIL WWW ICQ   Вверх
Pro_BD
  Дата 14.4.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.4.2004
Где: СПБ

Репутация: нет
Всего: нет



Цитата(Serzh @ 14.4.2004, 13:01)
объясните мне кто нибудь, зачем менять int 33h...
когда я мышами страдал я этого не делал и все пахало...

А что ты делал ?? по конкретней ?, и как по другому что либо менять не касаясь int 33h ????
PM MAIL ICQ AOL   Вверх
Serzh
Дата 15.4.2004, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



Код
.model tiny
.code
org  100h

Begin:
jmp  Init;метка

Mouse_Ok:
push ds
push cs
pop  ds
mov  ah, 9h ;выводим строку на экран
mov  dx, offset Message_1
int  21h
pop  ds
retf;выход из обработчика - команда RETF

Message_1 db 'Вы нажали левую кнопку мышки$'

Init:
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

xor  ax, ax
int  16h

mov  ax, 000Ch
mov  cx, 0000h;удалить обрабочик
int  33h

int  20h

end  Begin


Это сообщение отредактировал(а) Serzh - 15.4.2004, 01:44
PM MAIL WWW ICQ   Вверх
Pro_BD
Дата 15.4.2004, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.4.2004
Где: СПБ

Репутация: нет
Всего: нет



to Serzh твой кодик неплох, он мне очень помог разобратся и исходя их этого,задам еще пару вопросов:



ак при условном переходе сказать что это праваяя кнопка мышки а это левая ????



Вот код:

Код

.model tiny
.code
org  100h


Begin:

mov ah,9h
mov dx,offset Mes_1
int 21h
mov ah,10h
int 16h
Label_1:
cmp  ???????????         ;   Что сдесь  надо написать, это левая кнопка
jz Init
cmp ????????????         ;  ?????????  , это правая копка
jz Intet
jmp Begin

Mes_1 db '    ?аЁўҐвбвўго, ­ ¦¬ЁвҐ Ї®¦ «г©бв  mouse1 Ё«Ё mouse2    $'

Mouse_Ok:
push ds
push cs
pop  ds
mov  ah,9h;выводим строку на экран
mov  dx,offset Message_1
int  21h
pop  ds
retf ;выход из обработчика - команда RETF

Message_1 db '   ‚л ­ ¦ «Ё «Ґўго Є­®ЇЄг ¬лиЁ    $'

Init:
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 ah,10h
int  16h

mov  ax,000Ch
mov  cx,0000h;удалить обрабочик
int  33h

jmp Label_1

;++++++++++++++++++++++++++++++++++++++++++++

Mouse_ok_B:

push ds
push cx
pop ds
mov ah,9h
mov dx,offset Messsa_1
int 21h
pop ds
retf

Messsa_1   db '   ‚л ­ ¦ «Ё Їа ўго Є­®ЇЄг ¬лиЁ      $'

Intet:
mov ax,0
int 33h

mov ax,1
int 33h

mov ax,000Ch
mov cx,0010h
mov dx,offset Mouse_ok_B
int 33h

mov ah,10h
int 16h

mov ax,000Ch
mov cx,0000h
int 33h
jmp Label_1



end  Begin


Это сообщение отредактировал(а) Pro_BD - 16.4.2004, 08:13
PM MAIL ICQ AOL   Вверх
Serzh
Дата 15.4.2004, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



Код
Label_1:
mov ax, 3
int 33h
cmp bl, 1; Что сдесь надо написать, это левая кнопка
jz Init
cmp bl, 2; ????????? , это правая копка
jz Intet
jmp Label_1

PM MAIL WWW ICQ   Вверх
Jin X
Дата 15.4.2004, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 5.3.2004

Репутация: 1
Всего: 1



Если нужно проверить только левую или только правую кнопку и не реагировать на нажатие обоих (а также левой+средней и т.п), то см. Serzh. Если же отдельно левая, отдельно правая (а нажатие обеих как левая), то cmp меняем на test.
Если и ещё вариант:
Код
mov ax,3
int 33h
and bl,3
cmp bl,1
je Левая
cmp bl,2
je Правая
реагирует только на левую или правую (нажатие обеих игнорирует, как и среднюю кнопку).

Это сообщение отредактировал(а) Jin X - 15.4.2004, 17:27
--------------------
Бойся своей мечты, ибо она осуществима!
PM MAIL   Вверх
Chingachguk
Дата 15.4.2004, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

mov ax,3
int 33h
and bl,3
cmp bl,1
je Левая
cmp bl,2
je Правая


Ну можно и так:

Цитата

  mov ax,3
  int  33h
  test bl,1
  jnz  Левая
  test bl,2
  jnz  Правая


Или так:

Цитата

  mov ax,3
  int   33h
  shr  bl,1
  jc    Левая
  shr  bl,1
  jc    Правая


Или так:

Цитата

  mov ax,3
  int  33h
  and  bx,3
  shl  bx,1
  jmp  word ptr cs:@@ButtonsProcs[bx]

@@ButtonsProcs dw offset Exit, offset Left, offset Right


;)))

Это сообщение отредактировал(а) Chingachguk - 15.4.2004, 17:45


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Pro_BD
Дата 16.4.2004, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.4.2004
Где: СПБ

Репутация: нет
Всего: нет



Что то я все равно не доконца понял sad.gif((
Так как прога у меня все равно что то не запускается =((
Взгяните плз ...
Код

.model tiny
.code
org 100h


Begin:

mov ah,9h
mov dx,offset Mes_1
int 21h
Label_1:
mov ah,10h
int 16h
cmp al,27
jz Quit_P
mov ax,3
int 33h
cmp bl,1    ; ТАК ???
jnz Init
cmp bl,2
jnz Intet
jmp Begin

Mes_1 db ' Nagmi pogalyista   mouse1 ili mouse2 $'

Mouse_Ok:
push ds
push cs
pop ds
mov ah,9h
mov dx,offset Message_1
int 21h
pop ds
retf;выход из обработчика - команда RETF

Message_1 db ' Mouse1 $'

Init:
mov ax, 0;инициализация мышки
int 33h

mov ax,1
int 33h
mov ax,000Ch
mov cx,0002h
mov dx,offset Mouse_Ok
int 33h

mov ah,10h
int 16h

mov ax,000Ch
mov cx,0000h
int 33h
int 20
jmp Label_1


;++++++++++++++++++++++++++++++++++++++++++++

Mouse_ok_B:

push ds
push cs
pop ds
mov ah,9h
mov dx,offset Messsa_1
int 21h
pop ds
retf

Messsa_1 db '   mouse 2 $'

Intet:
mov ax,0
int 33h

mov ax,1
int 33h

mov ax,000Ch
mov cx,0010h
mov dx,offset Mouse_ok_B
int 33h

mov ah,10h
int 16h

mov ax,000Ch
mov cx,0000h
int 33h
int 20h
jmp Label_1

Quit_P:
mov ah,9h
mov dx,offset Mesa
int 21h
int 20h
Mesa db   '    Poka Poka     $'
end Begin




Это сообщение отредактировал(а) Pro_BD - 16.4.2004, 11:38
PM MAIL ICQ AOL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1230 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.