не работает функция

Тема в разделе "WASM.BEGINNERS", создана пользователем NEKTO, 11 сен 2009.

  1. NEKTO

    NEKTO New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2009
    Сообщения:
    9
    Код (Text):
    1.  
    2. invoke    GetSystemMetrics ,  SM_CXSCREEN
    3. CALL      P                
    4. invoke    GetSystemMetrics ,  SM_CYSCREEN
    5. CALL      P                
    6. ;------------------------------
    7. P                       PROC
    8. POP EBX
    9. MOV    Edi  ,  EAX
    10. MOV    ESI ,  EAX
    11. mov     Eax , Edi
    12. mov     Edx, 0
    13. mov     Edi , 100
    14. DIV EDI                  
    15. PUSH EAX                   ; X/100 , Y/100
    16. MOV EDI , EAX
    17. MOV EAX , 99
    18. MUL EDI
    19. PUSH EAX
    20. MOV EAX , 99
    21. MUL EDX
    22. MOV EDX,0
    23. MOV EDI , 100
    24. DIV EDI
    25. POP EDI
    26. ADD EDI , EAX
    27. PUSH EDI           ;X/100*99 , Y/100*99
    28. MOV EAX , ESI
    29. MOV EDX , 0
    30. MOV EDI , 2
    31. DIV EDI
    32. PUSH EAX             ;X/100*50 , X/100*50
    33. PUSH EBX
    34.  
    35. RET
    36. P                            ENDP
    37. ;-------------------------------------------]
    почему у меня тут не работает функцыя ? если всё это дело делать без функцыи то всё ок.
    Огромная просьба не злиться на меня т.к. я ламер и ошибка небось ламерская.
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    что это еще за бред
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    1. зачем забирать адрес возврата
    2. зачем портить esi
    3. зачем что-то запихивать в edi, если через пару строчек положите туда 100
     
  4. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    4. зачем писать "функция" через "Ы" ?
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    это вообще делает какую-нибудь полезную работу???
     
  6. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    c4m310t
    в данный момент мы ведём расследование этого вопроса.
    займитесь вопросом капса, приём;

    ТЫ ИСПОРТИЛ ESI!!!

    mov thread,beginners
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    max7C4
    Он же в конце его назад ложит.

    Кто сказал?

    Чтобы хекеров запутать. ^)
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Извините грамотея, не ложит, а кладёт. ^) Верните редактирование.
     
  9. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Линуксоид? =)
     
  10. NEKTO

    NEKTO New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2009
    Сообщения:
    9
    P PROC ; обьявление процедуры P
    POP EBX ; я возращу адрес возврата в самом конце
    MOV Edi , EAX ; забиваю в Edi длину экрана
    MOV ESI , EAX ; забиваю в Esi длину экрана

    Код (Text):
    1. MOV    Edi  ,  EAX
    2. MOV    ESI ,  EAX
    3. mov     Eax , Edi
    4. mov     Edx, 0
    5. mov     Edi , 100
    согласен тут я тупанул можно было просто написать
    Код (Text):
    1. MOV ESI , EAX
    2. MOV EDX,0
    3. MOV EDI , 100
    На сока мне известно Esi это рабочая лошадь на ровнес EAX , EDX , EBX , EDI
    Это всеголиш часть кода. Суть заключается в том, чтобы мышь постоянно бегала туда сюда, а если ёё поставить на край экрана, то она отправляется в центр.
     
  11. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    Velheart
    да, пожалуй, я торобоан ьтасипан нежлод лыб, вторые сутки без сна из человека и не линуксоида сделают Х)
     
  12. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    NEKTO
    1. для это проверки достаточно сделать cmp/shr
    Booster
    с тем же самым успехом можно это сделать и перед функцией
    Код (Text):
    1. push SM_CXSCREEN
    2. call    [GetSystemMetrics]
    3. push eax
    4. push eax
    5. push eax
    6. call P
    7. push SM_CXSCREEN
    8. call    [GetSystemMetrics]
    9. push eax
    10. push eax
    11. push eax
    12. call P
    13.  
    14. P PROC
    15.  
    16. mov ebp, eax ; ebp=eax
    17.  
    18. xor edx, edx
    19. mov ebx, 100
    20. div ebx         ; eax/ebx
    21. mov [esp+12], eax ; [esp+12]=eax/100
    22.  
    23. lea eax, [eax*8+eax]
    24. lea edx, [eax*8+eax]
    25. lea eax, [eax*2+edx]
    26. mov [esp+8], ebp  ; [esp+8]=eax*99
    27.  
    28. xor eax, eax ; т.к. умножение на старшую часть произведение (eax/100)*99=0
    29. xor edx, edx
    30.  
    31. div ebx       ; 0/100 хз зачем, но для совместимости оставим
    32.  
    33. shr ebp, 1
    34. mov [esp+4], ebp  ; [esp+4]=eax/2
    35.  
    36. RET
    37. P                            ENDP
    38. ;-------------------------------------------]
     
  13. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    так. опечатки
    1.
    Код (Text):
    1. mov ebp, eax ; ebp=eax
    2.
    Код (Text):
    1. mov [esp+8], ebp  ; [esp+8]=eax*99
    меняем на
    Код (Text):
    1. xchg [esp+8], eax  ; [esp+8]=eax*99/mov [esp+4], eax  ; [esp+4]=eax/2
    про дальнейший код можно забыть и поставить ret (но для анализа оставил).
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    за название темы "ПЛИЗ ПОМОГИТЕ" буду сильно бить ногами