を使用して文字列をループ私は議会についての本を読んで、それは次のコードを持っている:私たちが必要とすることを書かれているアセンブリ - 担当者
.DATA
string1 db ’abcdfghi’,0
strLen EQU $ - string1
string2 db ’abcdefgh’,0
.CODE
.STARTUP
mov AX,DS ; set up ES
mov ES,AX ; to the data segment
mov ECX,strLen
mov ESI,string1
mov EDI,string2
cld ; forward direction
repe cmpsb
leaves ESI pointing to g in string1 and EDI to f in string2. Therefore, adding
dec ESI
dec EDI
leaves ESI and EDI pointing to the last character that differs. Then we can use,
ja str1Above
を:leaves ESI pointing to g in string1 and EDI to f in string2.
dec ESI
dec EDI
しかし、なぜですか? ESI
の 'f'に、EDI
の 'e'に到着すると、repe
の条件が満たされず、ループが終了します。 'f'はESI
で、 'e'はEDI
です。もう一度文字列をスキャンし続けると言うのはなぜですか?
リピートまた、esi = edi、no?私たちのケースでは、esi <> ediのためループを終了し、ecx = 0ではないからです。 –
本当にありがとう、ありがとう。要点は、出口条件が最初であるということでした。そのため、ポインタを調整する必要があります。 –