我正在尝试创建一个迭代字符串并检查它是否是回文的程序。
我目前正在测试的单词是 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。问题是,这是输出:
Θμ#
按任意键继续。 。
答案 0 :(得分:1)
如果您使用Irvine的WriteString
,则会从EDX
寄存器中获取字符串的偏移量,而不是ESI
,因此:
▼
mov edx, offset wordIsAPalindrome
call WriteString