装配字符比较问题

时间:2010-10-17 08:37:09

标签: assembly comparison x86 character

我们正在尝试在汇编中实现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
//这应该相等但不是

1 个答案:

答案 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