2016-12-20 4 views
0

文字列を繰り返し処理して、それが回文かどうかを確認するプログラムを作成しようとしています。文字列内の文字を比較する問題[アセンブリ]

私が現在テストしている言葉は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までそれを作ります。 #

押しΘμ

続行するには任意のキー:問題は、これが出力されます。 。 。

+0

あなたは 『myWord』の宣言を投稿することができますか?あなたの質問の下で "編集"をクリックし、コードを貼り付けてください。 –

+0

さて、私はそれを投稿しました。 – Eluno

+1

'SIZEOF myWord'の値は何ですか?最終的にnullバイトが含まれていますか? – usr2564301

答えて

1

あなたはIrvineWriteString使用している場合、それはそう、EDXレジスタ、ないESIから文字列のオフセットをとります

 ▼ 
mov edx, offset wordIsAPalindrome 
call WriteString 
+0

私は何かを試している間に気づいた。うわー。 – Eluno