Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Народ помогите разобратся 
:(
    Опции темы
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   Вверх
Serzh
Дата 16.4.2004, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



не
Код
jmp Begin

а
Код
jmp Label_1

я уже писал это, но ты проигнорировал... sad.gif
PM MAIL WWW ICQ   Вверх
Pro_BD
Дата 16.4.2004, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я не проигнорировал просто упустил Извини !! hehe.gif
Я данный вопрос поместил на 5 разных форумах, и просто не у спеваю переварить все информацию полученную от людей smile.gif
Пусть будет так
Код

Begin:

mov ah,9h
mov dx,offset Mes_1
int 21h
Label_1:
mov ah,10h
int 16h

mov ax,3
int 33h
cmp bl,1
jnz Init
cmp bl,2
jnz Intet
cmp al,27
jz Quit_P
jmp Label_1


Все равно не работает =((((

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


Бывалый
*


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

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



Код
Label_1:
mov ah,10h
int 16h
cmp al,27
jz Quit_P

mov ax,3
int 33h
cmp bl,1
je Init
cmp bl,2
je Intet
jmp Label_1

так попробуй... а что именно не работает? если только выход, то теперь должно работать.

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


Новичок



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

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



Всем Всем пасибо за помощь кто помогал разобратся мне с моей задачей, Прога заработала (я чуть от радости не прыгал ) к сожалению она не целиком написана мной (жалко, так бы вообще по патолку полез =))) ) ну одинм словом все ок.
Сейчас придумываю еще одну класную вещь =))) и по ней у меня у же скопилась (n) количество вопросов, щас посижу поломаю голову дня 2-3 и начну спрашивать надеюсь не кто не против =))
Вопросы буду задавать сдесь если вам уважаймые программисты не в лом отвичать на мои глупые вопросы, изредка посещайте этот топик, всем GL.

to \Serzh
Цитата

так попробуй... а что именно не работает? если только выход, то теперь должно работать.

Я не до конца понял что не работало но, ИМХО помойму ассемблер не может понять перходов
проверки (где нажата та или иная клавиша )
Код

Label_1:
mov ah,10h
int 16h
cmp al,27  ; сюда он доходил  !!!!!!
jz Quit_P

mov ax,3
int 33h
cmp bl,1        ;Сюды тоже доходил
je Init
cmp bl,2    ; а Вот сюды уже НЕТ !!!!!
je Intet
jmp Label_1

Но, один человек привел решение задачи немного по другому и оно мне понравилось как нельзя лучше вот код если кто хотел бы посмотреть
Код



          .model tiny
          .code
          org 100h
Begin:

          mov ah,9h
          mov dx,offset Mes_1
          int 21h

          mov ax, 0           int 33h


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

          mov ah,10h
          int 16h
          mov ax,000Ch
          mov cx,0000h
          int 33h

          int 20h
Mes_1 db ' Åα¿óÑΓßΓóπε, ¡áª¼áΓÑ »«ªá½π⌐ßΓá mouse1 ¿½¿ mouse2 $'
Message_1 db ' Mouse1 $'
Message_2 db ' Mouse2 $'


Mouse_ok_B:
          push ds
          push cs
          pop ds

          mov dx,offset Message_2
          test bx,01h
          jnz R_Button
          mov dx,offset Message_1
R_Button:
          mov ah,9h
          int 21h
          pop ds
          retf
end Begin


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

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

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


 




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


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

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