如何在Assembly中将字符串的每个字符搜索到另一个字符串

时间:2017-10-31 15:22:26

标签: string loops assembly nasm

我的意思是编写一个程序来获取字符串的每个字符并将其与另一个字符串的每个字符进行比较。它基本上计算另一个字符串中所述字符的实例。

我的问题是它似乎不适用于第一个字符串的第二个字符。我得到一个seg错误或 count 等于0。

任何帮助将不胜感激。非常感谢!

    mov ecx, [len2]             ; length of name2
    mov esi, name1
    mov edi, name2

    mov byte[count], 0          ; counts instance
    cld

    loop1:
        lodsb                   ; loads letter in name1
        loop2:
            cmp ecx, 0
            jne cont1

            mov ecx, [len2]     
            loop loop1

            cont1:
                scasb           ; compares character in al to every char in name2
                jne cont2

                inc byte[count]
            cont2:
                loop loop2

1 个答案:

答案 0 :(得分:0)

cmp ecx, 0
jne cont1

为什么你会继续测试第二个字符串是否为空?只做一次。

mov ecx, [len2]     
loop loop1

这对说明不合适。完成第二个字符串后需要完成。

接下来是改进版本:

    mov  byte[count], 0 ; counts instance
    cmp  dword[len2], 0 ; length of name2
    je   EndIt
    mov  esi, name1
    mov  edi, name2
    cld
loop1:
    lodsb                 ; loads letter in name1
    mov  ecx, [len2]     
loop2:
    scasb                 ; compares character in al to every char in name2
    jne  NotEQ
    inc  byte[count]
  NotEQ:
    dec  ecx
    jnz  loop2
    jmp  loop1
EndIt:

这里仍然缺少的是如何停止外循环。

也许你的第一个字符串使用零终止?

    lodsb                 ; loads letter in name1
    cmp  al, 0
    je   EndIt