Нужна помощь HELP !!!!!!!!!!

Тема в разделе "Другие", создана пользователем Pro_BD, 13 апр 2004.

Статус темы:
Закрыта.
  1. Pro_BD

    Pro_BD Гость

    У меня маленькая проблемма написал программу, а она работает не коректно ( не так как надо )

    вот код программы:
    .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) , а так, ты облажался потому что ......

    Заранее спасибо
     
  2. ????

    ???? Гость

    pushf - сохранение регистра флагов, pusha - сохрание всех регистров
    адрес надо устанавливать es:Dx - ты уверен, что es указывает туда, куда надо? ты его сам нигде не устанавливаешь

    а это что делает? т.е. ты установил обработчик и сразу его убираешь?

    а на эту строку имхо управление вообще не передаётся. т.е. "старый" обработчик вообще никогда не вызывается

    на сколько я помню, в обработчики нельзя (или не желательно) использовать функции int 21h ниже 30h (или что-то типа того). попробуй выводить записывая в видеоозу или используя int 10h

    ссори если где-то "сморозил" - давно не писал на асме, да и времени не много на "разбор твоих полётов".

    Удачи ;)
     
  3. Pro_BD

    Pro_BD Гость

    <!--QuoteBegin-????+14:04:2004, 00:53 -->
    <span class="vbquote">(???? @ 14:04:2004, 00:53 )</span><!--QuoteEBegin-->1.pushf - сохранение регистра флагов, pusha - сохрание всех регистров
    2.адрес надо устанавливать es:Dx - ты уверен, что es указывает туда, куда надо? ты его сам нигде не устанавливаешь

    3.а это что делает? т.е. ты установил обработчик и сразу его убираешь?


    4.а на эту строку имхо управление вообще не передаётся. т.е. "старый" обработчик вообще никогда не вызывается

    5.на сколько я помню, в обработчики нельзя (или не желательно) использовать функции int 21h ниже 30h (или что-то типа того). попробуй выводить записывая в видеоозу или используя int 10h

    ссори если где-то "сморозил" - давно не писал на асме, да и времени не много на "разбор твоих полётов".

    Удачи :) [/quote]
    1.Хорошо вот мы сохранили все регистры, далее
    2.Насчет адреса не уверен, сейчас по сижу покопаюсь
    3.Да я устанавливаю оброботчик а потом его удаляю,но между cre и del есть команда которая показывает нам адрес нашего обрабочика так что по идеи все должно быть ок.
    4.Гм имхо я даже не знаю что сказать....
    5.Незнаю не когда о таком не слышал а насчте 10h попробую
    Насчет разбора моих полетов, спасибо хоть что взгянул, ты хоть единствинный кто ответил ....
    Если еще будут какиенить мысли насчет кода поделись со мной ок.
     
  4. Guest

    Guest Гость

    Привет всем я не знаю может и не в той теме пишу, но тогда может вы скажите где мне могут помочь. Вопрос у меня такой у меня есть программа для снятия защиты с файлов 4ds можно ли её переделать, так, чтобы она была с другим дизайном. (ЭТО МНЕ ПО ЗАРЕЗ НУЖНО)
     
  5. ????

    ???? Гость

    Guest
    можно :)
     
  6. Guest

    Guest Гость

    Неплохо было бы узнать как это сделать (на каком языке написана незнаю)
     
  7. Guest

    Guest Гость

    Ну помогите же мне господи это очень важно
     
  8. Arush

    Arush Гость

    Проблема в следующей строчке:
    :)
    INT 20H: завершить программу.
    Тебе-же насколько я понимаю нужно оставить ее резидентной в памяти, а это или инт27 или 31-я функция 21-го прерывания - завершиться и остаться резидентным -- KEEP.
    :)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей