【发布时间】:2011-04-26 12:54:24
【问题描述】:
我们正在尝试在汇编中实现莱文斯坦距离算法,并从 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
当前字符的打印结果:
苹果
啊
你好世界! //确定
ap
ap
阿尔
ae
帕
pp
你好世界! //确定
pp
// 这应该是相等的,但不是
请
佩
帕
pp
// 这应该是相等的,但不是
pp
你好,世界!
请
佩
拉
lp
lp
ll
// 这应该是相等的,但不是
乐
一个
ep
ep
埃尔
ee
// 这应该是相等的,但不是
【问题讨论】:
-
我可以问一下为什么你在用 C 语言开发应用程序的其余部分时用机器代码实现它吗?
-
这是系统编程课程作业,主要目的确实不是算法。
标签: assembly comparison x86 character