文字列を繰り返し処理して、それが回文かどうかを確認するプログラムを作成しようとしています。文字列内の文字を比較する問題[アセンブリ]
私が現在テストしている言葉は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
それは正しく今ループ私がステップオーバーをすると、wordIsPalindromeまでそれを作ります。 #
押しΘμ
続行するには任意のキー:問題は、これが出力されます。 。 。
あなたは 『myWord』の宣言を投稿することができますか?あなたの質問の下で "編集"をクリックし、コードを貼り付けてください。 –
さて、私はそれを投稿しました。 – Eluno
'SIZEOF myWord'の値は何ですか?最終的にnullバイトが含まれていますか? – usr2564301