Деление на FF

Тема в разделе "WASM.BEGINNERS", создана пользователем ZEQ, 25 апр 2007.

  1. ZEQ

    ZEQ New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    9
    В общем делаю чёта типа AlphaBlend
    т.е. тожа самое но + ещё некоторые опции проскальзвать будут это в будущем.

    эт кусок рутинного кода

    Код (Text):
    1.    
    2.                   mov DL, byte ptr [ESI][3]   ; 0 - RED, 1- GREEN, 2- BLUE, 3- ALPHA
    3.                   movzx AX, DL
    4.                   mul byte ptr [ESI][0]
    5.                   push AX
    6.                   not DL
    7.                   movzx AX, DL
    8.                   mul byte ptr [EDI][0]                                    
    9.                   pop BX
    10.                   add AX, BX
    11.                   div HALFWORD    ; 0FFh
    12.                   mov byte ptr [EDI][0], AL
    работаю по формуле (a*s+(not a)*t)\0FFh
    ну есть ещё t + (s-t)*a\0FFh - только косяк с минусами при реализации,

    ну мне не нравится div .... ну чувствую есть ещё способ .... или иной метод ...

    а то готовая функция у меня в разы медленней виндовской стандартной :dntknw: даже простая пробежка по циклу больше времени занимает ((( а тут ведь ещё разные размеры иходной и целевой части .....
    может кто сталкивался с подобными вещами??
    пошарил по инету уже, ... ничего вразумительного ненашел ((((
    весь день голову ломал ... выдераеш из старшего байта значение а оно \ 256 ... +/- 1 разница с \255,
    меня уже на работе непонимают ....
     
  2. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Дык глянь что там в виндовой функции, и поймеш что у тебя тормозит.
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    windows.inc
     
  4. ZEQ

    ZEQ New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    9
    хе, просто сказать .... когда диасемблил уже qdi32 .... так там потярялся ((( ща конечно ещё раз полезу, но помойму там уже основа более высокого уровня была....
     
  5. ZEQ

    ZEQ New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    9
    а мне структуры ненада ... сам их могу напридумывать
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    ; 0 - BLUE, 1- GREEN, 2- RED, 3- ALPHA
     
  7. ZEQ

    ZEQ New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    9
    ну чесна - мне удобнее с цифрами ... я уже эти массивы вдоль и поперек изучил ...
     
  8. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Ясен-красен, винда это все в режиме ядра делает. А ты небось из юзермода запускаешь :)
     
  9. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    С чего вдруг?


    Полез ковыряться - в msimg32.dll, откуда экспортируется AlphaBlend, на самом деле переходник на GdiAlphaBlend из gdi32.dll… Всё забавнее и забавнее…
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    ZEQ
    Я бы еще добавил мусорного ;) К чему тут movzx и push\pop - для обфускации ?! :)))
    Деление на 255 для чисел < 256^2
    Код (Text):
    1.   add ax,bx
    2.   movzx eax,ax
    3.   mov edx,1010101h  ;=2^32/255
    4.   mul edx
    5.   mov byte ptr [edi], dl ;edx = eax/255
     
  11. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    взято здесь: http://www.homepc.ru/offline/2003/82/26076/
     
  12. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    ZEQ
    у мне не нравится div .... ну чувствую есть ещё способ .... или иной метод ...
    может есть смысл пренебречь небольшой ошибкой и делить на 100h (например: shr AX, 8 или mov AL, AH)?
     
  13. ZEQ

    ZEQ New Member

    Публикаций:
    0
    Регистрация:
    24 апр 2007
    Сообщения:
    9
    Всем спасибо....
    leo - вообще спасибо, отвечаю - я не оптимизировал ещё как надо, решил начать с острых моментов типа деления ...
    а возможно выполнять свой код в режиме ядра ..?