Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编字符比较问题_Assembly_Comparison_X86_Character - Fatal编程技术网

Assembly 汇编字符比较问题

Assembly 汇编字符比较问题,assembly,comparison,x86,character,Assembly,Comparison,X86,Character,我们正在尝试在汇编中实现levensteing距离算法,并从C代码中调用汇编函数。但是我们有一些字符比较问题,无法解决这个问题 函数接受两个char*参数。在前两行中,我将这些地址移到ecx和edx。iminusOne和jminusOne是获取当前(代码块是循环的一部分)字符的索引。找到字符的地址后,我将字符移动到寄存器中,并使用cmp进行比较。但举个例子,当我比较两个字符串“apple”和“apple”时,前三个字符似乎相等,但其他两个则不相等。我将ecx和edx持有的地址的字符打印到控制台上

我们正在尝试在汇编中实现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