これらの文字列はC++文字列であり、char
ワイド文字ではなくsで構成されていると推測されるため、各文字のサイズは1バイトであるため、インデックスレジスタに4を掛けないでください。また、直前にインクリメントするedx
ことはできません。ジャンプだけがedxがゼロにバンプされているので、あなたの指示。edx
je
最後に、文字列は0バイトで終わります。したがって、ループを停止するタイミングを知るために、al
またはゼロになることを探しています。bl
次の行に沿ってコードを変更できます。
xor edx, edx ; make sure edx is 0 to start with
LOOP:
mov al, [esi + edx]
mov bl, [edi + edx]
inc edx ; prepare for next char
cmp al, bl ; compare two current characters
jne DIFFERENT ; not equal, get out, you are DONE!
cmp al, 0 ; equal so far, are you at the end?
je SAME ; got to end of both strings, you're good, get out
jmp LOOP ; okay well they agree so far, go to next char
DIFFERENT:
; Do what you need to do for the strings being different
;
;
jmp DONE
SAME:
; Do what you need to do for the strings being the same
;
;
DONE:
ただし、x86で文字列比較を検索することをお勧めします。指示がありcmps
ます。strncmp
必要に応じて、関数を呼び出すように手配することもできます。これを行うにはいくつかの方法があります。