我的意思是编写一个程序来获取字符串的每个字符并将其与另一个字符串的每个字符进行比较。它基本上计算另一个字符串中所述字符的实例。
我的问题是它似乎不适用于第一个字符串的第二个字符。我得到一个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
答案 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