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

Тема в разделе "WASM.A&O", создана пользователем Clyde, 17 июл 2009.

  1. Clyde

    Clyde New Member

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

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
  3. Clyde

    Clyde New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    154
    tylerdurden да хотелось бы самому :[
    или вы предлагаете посмотреть как там?
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    rep scasb //1й символ
    rep cmpsb //остальные символы
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    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

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Назови сначала те варианты, которые ты рассмотрел сам! Очень любопытно почитать
     
  7. Clyde

    Clyde New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    154
    MSoft
    сам считывал побайтово до совпадения 1 символа, если он совпадал то сравнивал дворд
    но всё это медленно и глючно, потому запостил сюда
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    хм... ну у тебя, как мне кажется, самый быстрый способ
    в любом случае нужно искать первый байт, а потом сравнивать всю строку
     
  9. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    А может всё-таки Кнута-Морриса-Пратта? :)