Поиск строки в буфере

Discussion in 'WASM.A&O' started by Clyde, Jul 17, 2009.

  1. Clyde

    Clyde New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2009
    Messages:
    154
    Допустим что в памяти есть буфер, содержащий некие данные.
    Как наиболее быстрым образом организовать поиск в нём строки произвольной длины?
    Предложите пожалуйста свои варианты
     
  2. tylerdurden

    tylerdurden New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2004
    Messages:
    322
  3. Clyde

    Clyde New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2009
    Messages:
    154
    tylerdurden да хотелось бы самому :[
    или вы предлагаете посмотреть как там?
     
  4. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    rep scasb //1й символ
    rep cmpsb //остальные символы
     
  5. max7C4

    max7C4 New Member

    Blog Posts:
    0
    Joined:
    Mar 17, 2008
    Messages:
    1,203
    mov ecx, Length
    mov ebx, Buffer
    jmp start
    next:
    inc ebx
    dec ecx
    start:
    jecxz no_str
    cmp byte [ebx], 32
    jc next
    cmp byte [ebx], 127
    loopz next
    jz no_str
    dec ecx
    jecxz no_str
    inc ebx
    cmp byte [ebx], 32
    jc next
    cmp byte [ebx], 127
    jz next
    ;найдена строка, как минимум из 2х символов
    no_str:
    ;строки не найдено
     
  6. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    Назови сначала те варианты, которые ты рассмотрел сам! Очень любопытно почитать
     
  7. Clyde

    Clyde New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2009
    Messages:
    154
    MSoft
    сам считывал побайтово до совпадения 1 символа, если он совпадал то сравнивал дворд
    но всё это медленно и глючно, потому запостил сюда
     
  8. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    хм... ну у тебя, как мне кажется, самый быстрый способ
    в любом случае нужно искать первый байт, а потом сравнивать всю строку
     
  9. maxdiver

    maxdiver Max

    Blog Posts:
    0
    Joined:
    Jul 18, 2006
    Messages:
    308
    Location:
    Саратов
    А может всё-таки Кнута-Морриса-Пратта? :)