装配字符比较问题

meh*_*mak 0 comparison x86 assembly 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
Run Code Online (Sandbox Code Playgroud)

当前字符的打印结果:

appleapple
aa
您好,世界!// OK
ap
ap
al
ae
pa
pp
你好,世界!// OK
PP
//这应该是平等的,但不是
PL
PE
PA
PP
//这应该是平等的,但不是
PP
你好,世界!
PL
PE

LP
LP
LL
//这应该是平等的,但不

EA
EP
EP
EL
EE
//这应该是平等的,但不

Nic*_*kis 5

mov edx,[edx]
mov ecx,[ecx]
cmp edx,ecx
Run Code Online (Sandbox Code Playgroud)

我认为你是在比较dwords而不是字节.

尝试

mov dh, byte ptr [edx]
mov ch, byte ptr [ecx]
cmp dh, ch
Run Code Online (Sandbox Code Playgroud)