我们正在尝试在汇编中实现levensteing distance算法并从C代码调用汇编函数。但我们有一些字符比较问题,无法解决问题。
函数需要两个char *参数。在前两行中,我将这些收益转移到ecx和edx。 iminusOne和jminusOne是获取当前(代码块是循环的一部分)字符的索引。在找到字符的地址后,我将字符移动到寄存器中并使用cmp进行比较。但是例如当我比较两个字符串“apple”和“apple”时,前三个字符似乎相等但其他两个字符不相同。我在ecx和edx所持有的地址上打印到控制台,它们似乎也是相同的。
mov ecx,[esp+4]
mov edx,[esp+8]
mov ebx,[iminusOne]
add ecx,ebx
mov ebx,[jminusOne]
add edx,ebx
call printCurrentChars
mov edx,[edx]; bellekteki veriyi direk register a yüklüyoruz çünkü karşılaştırma
; işlemine parametre olarak iki adres alanı veremiyoruz
mov ecx,[ecx]
cmp edx,ecx
jne notEqual
call printHello
mov ebx,eax
当前字符的打印结果:
appleapple
AA
你好,世界! // OK
AP
AP
人
AE
PA
第
你好,世界! // OK
第
//这应该是平等但不是
PL
PE
PA
第
//这应该是平等但不是
第
你好,世界!
PL
PE
LA
LP
LP
LL
//这应该是平等但不是
乐
EA
EP
EP
埃尔
EE
//这应该相等但不是
答案 0 :(得分:5)
mov edx,[edx]
mov ecx,[ecx]
cmp edx,ecx
我认为你在比较dwords而不是字节。
尝试
mov dh, byte ptr [edx]
mov ch, byte ptr [ecx]
cmp dh, ch