сравнение строк

Тема в разделе "WASM.A&O", создана пользователем warsem, 10 апр 2005.

Статус темы:
Закрыта.
  1. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    заходил в поиск...

    о строках много тем, но свою так и не нашел.



    Как сравнить две строки, узнав какая из них больше/меньше(т.е. будет в отсортированном списке стоять первой)

    В мою пустую голову приходит лишь одна лажовая идея с побайтовым перебором и проверкой каждого байта. Как не совпадают определить чей не совпавший байт выше/ниже.



    Но хотелось бы как-то это с оптимизироать. В основном по размеру, скорость конечно тоже важна, но не настолько всего около 150h элементов.

    А! Да! Чуть не забыл, конец строки - нуль.

    Мой бредовый способ можно наблюдать здесь:
    Код (Text):
    1.  
    2. ;--------------------------------------------------------------------- --------
    3. cmp_str:
    4. ;input: esi - 1 string
    5. ;   edi - 2 string
    6. ;output:cf=0 - выше - ja xxx  >
    7. ;   cf=1 - ниже - jb xxx  <
    8. ;   ecx=0 - равно - jecxz xxx =
    9.     pusha
    10. _cmp_l00p:
    11.     mov al,[esi]
    12.     mov ah,[edi]
    13.     cmp al,ah
    14.     jne _cmp_ret
    15.     or al,al
    16.     jz _cmp_ecx
    17.     cmpsb       ;inc esi / inc edi
    18.     jmp _cmp_l00p
    19. _cmp_ret:
    20.     popa
    21.     ret
    22. _cmp_ecx:
    23.         sub eax,eax
    24.     mov [esp+24],eax
    25.     popa
    26.     ret
    27.  
     
  2. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    Э-эе!! Ау! Неужели мне этот код юзать, дайте хоть идею.
     
  3. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    если размер важен, наверное, можно так:
    Код (Text):
    1. cmp_str:
    2. ;input: esi - 1 string
    3. ;       edi - 2 string
    4. ;output:
    5. ;       ZF = 1      : 1st = 2nd  JZ...
    6. ;       CF = 1      : 1st < 2nd  Jc...
    7. ;       ZF = CF = 0 : 1st > 2nd  JA...
    8.  
    9.         pusha
    10. .l00p:  cmpsb
    11.         jnz     .exit
    12.         cmp     byte [esi-1], 0
    13.         jnz     .l00p
    14. .exit:  popa
    15.         ret
     
  5. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    спасибо.
     
Статус темы:
Закрыта.