Хотелось бы оптимизировать..

Тема в разделе "WASM.ASSEMBLER", создана пользователем Asterix, 24 ноя 2004.

  1. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    .DATA

    Buff db "10000",0



    .CODE

    start:start:

    xor ebx,ebx ;Потготавливаем параметры для MessageBox

    push ebx ;Заодно инициализируем переменные

    lea edi, Buff ;Биты 3-0 ebx будут флагами,

    push ebx ;но в обратном порядке

    push edi ;если хоть один бит != 0 => ebx!=0

    push ebx



    mov ecx,5 ;ecx кол-во сканируемых байт+1

    mov al,'1'

    cld

    _loop:

    repne scasb ;Последний символ в строке - 0

    jecxz _next ;На нем сразу выходим

    bts ebx,ecx ;Иначе ставим 1 в соотв. бите ebx

    jmp _loop ;и крутимся пока ecx!=0



    _next:

    or ebx,ebx

    jz _nomessage

    call MessageBox ;Если ebx не 0, то показываем сообщение

    ret ;и выходим

    _nomessage:

    add esp,16 ;Иначе выравнивем стек

    ret ;и выходим
     
  2. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Не удержался, уж больно с ММХ все красиво получается :)
    Код (Text):
    1. .data
    2. Flag  dd 0
    3. Flag1 dd 8 dup (0)
    4. align 16
    5. mask01  dq 0101010101010101h
    6. align 16
    7. szText  db "10011110"
    8. .code
    9. start:
    10.     lea eax, szText
    11.     movq mm4, mask01
    12.     movq mm0, [eax]
    13.     pand mm0, mm4
    14.    
    15.     psadbw mm1, mm0 ; !!! не ниже П3
    16.     movd Flag, mm1
    17.    
    18.     pxor mm1, mm1
    19.    
    20.     punpcklbw mm1, mm0
    21.     punpckhbw mm2, mm0
    22.     movq mm0, mm2
    23.    
    24.     pxor mm2, mm2
    25.     pxor mm4, mm4
    26.    
    27.     punpcklwd mm2, mm0
    28.     punpckhwd mm4, mm0
    29.     movq mm0, mm4
    30.    
    31.     pxor mm4, mm4
    32.    
    33.     punpcklwd mm3, mm1
    34.     punpckhwd mm4, mm1
    35.     movq mm1, mm4
    36.    
    37.     psrld mm0, 18h
    38.     psrld mm1, 18h
    39.     psrld mm2, 18h
    40.     psrld mm3, 18h
    41.    
    42.     lea eax, Flag1
    43.     movq [eax+0*8], mm3
    44.     movq [eax+1*8], mm1
    45.     movq [eax+2*8], mm2
    46.     movq [eax+3*8], mm0