Оптимизация чтения по строкам

Тема в разделе "WASM.ASSEMBLER", создана пользователем Flasher, 29 авг 2006.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Есть такой код:
    Код (Text):
    1. _recv proc
    2.   local buffer[2048]:byte
    3.   local readlen:dword
    4.     invoke ioctlsocket,client,FIONREAD,addr readlen
    5.      .if (eax==NULL)
    6.        invoke recv,client,addr buffer,readlen,0
    7.         cmp eax,1
    8.         jl _exit
    9.        mov ecx,eax
    10.        mov ebx,eax
    11.        lea esi,buffer
    12.        mov edi,esi
    13.        cld
    14.    @L1:
    15.        lodsb
    16.         .if (al==0Ah) || (al==0Dh)
    17.            mov byte ptr [esi-1],0
    18.         .endif
    19.        dec ecx
    20.        jnz @L1
    21.        mov ecx,ebx
    22.        mov al,0
    23.        mov edx,edi
    24.    @L2:
    25.        repnz scasb
    26.        pusha
    27.        ; в edx строка
    28.        ; делаем наше дело...
    29.        popa
    30.        repz scasb
    31.        mov edx,edi
    32.        dec edx
    33.        test ecx,ecx
    34.        jne @L2
    35.      .endif
    36. _exit:
    37.        ret
    38. _recv endp
    Можно-ли сделать ещё быстрее?
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    быстрее чтения из сокета?
     
  3. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    lodsb - это разве быстро? по-моему, lodsb - это компактно, а не быстро
    если всё равно оперируешь esi и ecx, нафига lodsb?
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Код (Text):
    1.        mov ecx,eax
    2.        lea esi,buffer
    3.        mov edi,esi
    4.    @L1:
    5.        mov al,[esi]
    6.        inc esi
    7.        or al,al
    8.        jz @L3
    9.        cmp al,0Ah
    10.        jne @L1
    11.        mov byte ptr [esi-1],0
    12.        jmp @L1
    13.    @L3:
    14.        mov edx,edi
    15.    @L2:
    16.        repnz scasb
    17.        pusha
    18.        ;....
    19.        popa
    20.        repz scasb
    21.        mov edx,edi
    22.        dec edx
    23.        test ecx,ecx
    24.        jne @L2
    А теперь?