Porównywanie dwóch ciągów w assemblerze [NASM]

0

Witam.

Ostatnio piszę w programie kod porównywania dwóch tekstów. CMPSB działa fajnie ale wadą jest to uwzględnia spacje i to wpływa na porównanie. Mi chodzi żeby tych spacji nie brał pod uwagę. Np

"clear"
"     clear"
" clear    "

I w moim progamie te wszystkie teksty są równe.Bo spacji nie bierze pod uwagę tylko znaki i cyfry

Trochę napisałem kodu i operuje na rejestrach esi , edi.
Korzystam z systemu linux.

Jeśli będą potrzebne jakieś informacje to proszę pisać to będę na nie w miarę moich możliwości odpowiadać

Życzę miłego dnia

1

Domyślam się, że piszesz kod 32 bitowy na podstawie tego, że wskaźniki trzymasz w 32 bitowych rejestrach. Tutaj masz funkcję, którą możesz wywołać z języka c lub z asemblera, zwraca 0 jeżeli stringi (muszą być zakończone znakiem NULL - \000 !) są równe i zwraca 1 jeżeli są różne, spacje są ignorowane. Konwencja wywołania jest standardowa dla linuxa 32 bitowego https://stackoverflow.com/questions/2535989/what-are-the-calling-conventions-for-unix-linux-system-calls-and-user-space-f

compare:
    push    esi
    push    edi
    mov     eax, 32
    mov     esi, DWORD PTR [esp+12]
    mov     edi, DWORD PTR [esp+16]
L0:
    xchg    esi, edi
    or      ecx, -1
    repe scasb
    dec     edi
    xchg    esi, edi
    or      ecx, -1
    repe scasb
    dec     edi
    cmp     BYTE PTR [esi], ah
    jne     L1
    cmp     BYTE PTR [edi], ah
    jne     L1
    xor     eax, eax
    jmp    L2
L1:
    cmpsb
    je      L0
L2:
    pop     edi
    pop     esi
    shr     eax, 5
    ret
0

Dziękuję bardzo za pomoc. Problem rozwiązany

1 użytkowników online, w tym zalogowanych: 0, gości: 1