で方向フラグがどのように機能するのか理解できませんx86
。私の講義のテキストは、ソースまたはデスティネーションレジスタをインクリメントまたはデクリメントすると言っていますが、その名前では意味がありません。誰かがそれが何をするのか説明できますか?
2 に答える
このフラグは文字列操作で使用され、文字列が低いアドレスで始まり、高いアドレスに進むか、またはその逆かを指定します。
文字列命令の場合ECX
、反復回数、DS:ESI
送信元アドレス、およびES:EDI
宛先があります(したがって、sinとdinESI
がありますEDI
)。
各反復の後、ECX
は1ずつデクリメントされESI
、EDI
に応じて要素サイズ(バイト演算の場合は1、ワード演算の場合は2など)だけインクリメントまたはデクリメントされますEFLAGS.DF
。
の場合EFLAGS.DF
はインクリメントされ0
、そうでない場合はデクリメントされます。ESI
EDI
rep movsb
方向フラグに依存する命令の例を見てみましょう。
を実行するときはrep movsb
、送信元アドレスをesi
で、宛先アドレスをedi
で、カウントを で指定しecx
ます。プロセッサは基本的にループを実行します。通常の場合 (方向フラグがクリアされている場合)、ループの反復ごとにインクリメントesi
さedi
れるため、コピーするソース ブロックと宛先ブロックの先頭を指すように初期化します。の実行中REP MOVSB
、プロセッサは、コピー中のブロックの最後に到達するまで、ソース アドレスと宛先アドレスをインクリメントします。
方向フラグが設定されている場合、プロセッサは代わりにレジスタをデクリメントします。これは、コピーしているメモリ ブロックの末尾を指している状態から開始する必要があることを意味します。最初から開始して最後までコピーする代わりに、最後から開始して最初に到達するまで逆方向にコピーします。