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