问题比较字符串中的字母[Assembly]

时间:2016-12-20 18:48:46

标签: assembly x86 irvine32

我正在尝试创建一个迭代字符串并检查它是否是回文的程序。

我目前正在测试的单词是 racecar ,但是当我运行以下代码时,它会自动判断第一个和最后一个值是不一样的。

这只是将错误的寄存器输入循环的情况,还是有更多的东西?

main proc
mov edi, SIZEOF myWord- TYPE myWord ;length of string - type of data
mov ecx, LENGTHOF myWord/ 2  ;loop (N / 2) times
mov esi,OFFSET myWord ;beginning of string

checkWord:
mov al,[esi]
cmp [esi+edi],al
jne wordIsNotAPalindrome

add esi,TYPE myWord
sub edi,TYPE myWord
loop checkWord

mov edx, offset wordIsAPalindrome
call WriteString
exit
main endp

myWord宣言:

myWord BYTE "racecar", 0

编辑:

我做了一些调整,这就是我现在所拥有的:

main proc
mov edi, SIZEOF myWord- TYPE myWord
mov ecx, LENGTHOF myWord/ 2
mov esi,OFFSET myWord

checkWord:
mov al, SIZEOF myWord
mov al,[esi]
cmp [myWord+edi],al
jne wordIsNotAPalindrome

add esi,TYPE myWord
sub edi,TYPE myWord
loop checkWord

mov esi, offset wordIsAPalindrome
call WriteString
call Crlf
call Crlf
exit
main endp

它现在正确循环,当我执行Step Over时,它继续执行直到wordIsAPalindrome。问题是,这是输出:

  

Θμ#

     

按任意键继续。 。

1 个答案:

答案 0 :(得分:1)

如果您使用IrvineWriteString,则会从EDX寄存器中获取字符串的偏移量,而不是ESI,因此:

     ▼
mov edx, offset wordIsAPalindrome
call WriteString