Как уменьшить код ?

Тема в разделе "WASM.A&O", создана пользователем TaskFall, 24 июн 2005.

  1. TaskFall

    TaskFall New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2005
    Сообщения:
    28
    Имеется код вызова функции:



    mov eax,77ED6FC4h ;WSAStartup

    call eax ;Вызов





    У Billy Belcebu:



    mov eax,dword ptr[ebp+ApiAddress]

    call eax ;неоптимизировано



    call dword ptr [ebp+ApiAddress] ;оптимизировано



    Сколько ни пыталься понять - ни к чему так и не пришел =(
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Billy Belcebu видимо имел ввиду, что ebp указывает на таблицу api адресов, тогда в первом(неоптимизированном) случае мы теряем по 2 байта на каждом вызове
    Код (Text):
    1. ;==================================================
    2. api_table:  dd     0                    ; f1
    3.             dd     0                    ; f2
    4.             dd     77ED6FC4h            ; WSAStartup
    5.             dd     0                    ; f4
    6. ;===================================================
    7.             mov     ebp,api_table
    8. ;===================================================
    9. 8B45 00     mov     eax,[ebp]
    10. FFD0        call    eax                 ; f1
    11. 8B45 04     mov     eax,[ebp+4]
    12. FFD0        call    eax                 ; f2
    13. 8B45 08     mov     eax,[ebp+8]
    14. FFD0        call    eax                 ; WSAStartup
    15. 8B45 0C     mov     eax,[ebp+12]
    16. FFD0        call    eax                 ; f4
    17. ;===================================================
    18. FF55 00     call    dword [ebp]         ; f1
    19. FF55 04     call    dword [ebp+4]       ; f2
    20. FF55 08     call    dword [ebp+8]       ; WSAStartup
    21. FF55 0C     call    dword [ebp+12]      ; f4
    22. ;===================================================
    Настоятельно рекомендую(для начала) научится пользоватся отладчиком (вместе со справочником по командам), доп. урок в теме Оптимизнутость
     
  3. TaskFall

    TaskFall New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2005
    Сообщения:
    28
    Допустим:

    mov eax,[ebp]

    call eax

    Функция не сработает =(

    Потому что вызов будет происходить не по адресу в ebp, а по адресу который находить по адресу ebp.

    Надеюсь понятно выразился ^_^
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Ну убери скобки или сделай call ebp, короче тему можно убивать