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
//这应该是平等的,但不
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)
归档时间: |
|
查看次数: |
4904 次 |
最近记录: |