Деление на FF

Discussion in 'WASM.BEGINNERS' started by ZEQ, Apr 25, 2007.

  1. ZEQ

    ZEQ New Member

    Blog Posts:
    0
    В общем делаю чёта типа AlphaBlend
    т.е. тожа самое но + ещё некоторые опции проскальзвать будут это в будущем.

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

    Code (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

    Blog Posts:
    0
    Дык глянь что там в виндовой функции, и поймеш что у тебя тормозит.
     
  3. asmfan

    asmfan New Member

    Blog Posts:
    0
    windows.inc
     
  4. ZEQ

    ZEQ New Member

    Blog Posts:
    0
    хе, просто сказать .... когда диасемблил уже qdi32 .... так там потярялся ((( ща конечно ещё раз полезу, но помойму там уже основа более высокого уровня была....
     
  5. ZEQ

    ZEQ New Member

    Blog Posts:
    0
    а мне структуры ненада ... сам их могу напридумывать
     
  6. asmfan

    asmfan New Member

    Blog Posts:
    0
    ; 0 - BLUE, 1- GREEN, 2- RED, 3- ALPHA
     
  7. ZEQ

    ZEQ New Member

    Blog Posts:
    0
    ну чесна - мне удобнее с цифрами ... я уже эти массивы вдоль и поперек изучил ...
     
  8. ntcdm

    ntcdm New Member

    Blog Posts:
    0
    Ясен-красен, винда это все в режиме ядра делает. А ты небось из юзермода запускаешь :)
     
  9. G13

    G13 New Member

    Blog Posts:
    0
    С чего вдруг?


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

    leo Active Member

    Blog Posts:
    0
    ZEQ
    Я бы еще добавил мусорного ;) К чему тут movzx и push\pop - для обфускации ?! :)))
    Деление на 255 для чисел < 256^2
    Code (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

    Blog Posts:
    0
    взято здесь: http://www.homepc.ru/offline/2003/82/26076/
     
  12. Kozyr__

    Kozyr__ New Member

    Blog Posts:
    0
    ZEQ
    у мне не нравится div .... ну чувствую есть ещё способ .... или иной метод ...
    может есть смысл пренебречь небольшой ошибкой и делить на 100h (например: shr AX, 8 или mov AL, AH)?
     
  13. ZEQ

    ZEQ New Member

    Blog Posts:
    0
    Всем спасибо....
    leo - вообще спасибо, отвечаю - я не оптимизировал ещё как надо, решил начать с острых моментов типа деления ...
    а возможно выполнять свой код в режиме ядра ..?