Assembly 汇编字符比较问题
我们正在尝试在汇编中实现levensteing距离算法,并从C代码中调用汇编函数。但是我们有一些字符比较问题,无法解决这个问题 函数接受两个char*参数。在前两行中,我将这些地址移到ecx和edx。iminusOne和jminusOne是获取当前(代码块是循环的一部分)字符的索引。找到字符的地址后,我将字符移动到寄存器中,并使用cmp进行比较。但举个例子,当我比较两个字符串“apple”和“apple”时,前三个字符似乎相等,但其他两个则不相等。我将ecx和edx持有的地址的字符打印到控制台上,它们似乎是相等的Assembly 汇编字符比较问题,assembly,comparison,x86,character,Assembly,Comparison,X86,Character,我们正在尝试在汇编中实现levensteing距离算法,并从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
打印当前字符的结果:
应用程序示例aa
你好,世界//好的
ap
ap
al
ae
pa
pp
你好,世界//好的
pp
//这应该是相等的,但不是
pl
pe
pa
pp
//这应该是相等的,但不是
pp
你好,世界
pl
pe
la
lp
lp
ll
//这应该是相等的,但不是
乐
ea
ep
ep
el
ee
//这应该是相等的,但不是相等的
mov edx,[edx]
mov ecx,[ecx]
cmp edx,ecx
我想你是在比较DWORD而不是字节
试一试
我想你是在比较DWORD而不是字节
试一试
我可以问一下为什么你在用C语言开发其余应用程序时用机器代码实现这个吗?这是系统编程课程作业的主要目的实际上不是算法。我可以问一下为什么你在用C语言开发其余应用程序时用机器代码实现这个吗?这是系统编程课程作业的主要目的确实不是算法。
mov dh, byte ptr [edx]
mov ch, byte ptr [ecx]
cmp dh, ch