2012-04-30 1 views
5

x86で方向フラグがどのように機能するのか分かりません。私の講義のテキストは、それ刻みまたはデクリメントソースまたはレジスタと言うが、それは、その名前と意味がありません。誰かが何をしているのか説明できますか?x86の方向フラ​​グ

答えて

7

このフラグは文字列操作で使用され、文字列が低いアドレスから始まり上位のアドレスに進むかどうかを指定します。文字列手順について

ECXDS:ESIは、送信元アドレスを有し、ES:EDI先(したがってSESIおよびD EDI)を有し、反復回数を有します。各反復後

ECXは、一つ、及びESIEDIとデクリメントされるかEFLAGS.DFに従って(ワード操作等のための2バイトの操作の1)素子サイズによって増減されます。

EFLAGS.DF場合はそうでない場合は減算している、0ESIEDIがインクリメントされています。

+0

したがって、それに応じて文字列を増減します。文字列が下位のアドレスから始まっている場合は、それに追加するか、それ以外の場合は逆のアドレスを実行しますか? –

+0

文字列内の**ポインタ**を増減します。 –

+0

Nathan Fellman、@ Jerry Coffin、私は、デフォルトの動作はメモリブロック(DFがクリアされた)の先頭からコピーすることだと思います。どのような場合には、代わりにメモリブロックを最後からコピーするか(DFセット)? – golem

4

方向フラグに依存する命令の例として、rep movsbを考えてみましょう。

を送信する場合は、送信元アドレスをesi、宛先アドレスをedi、送信先をecxと指定します。プロセッサは基本的にループを実行します。通常の場合(方向フラグがクリアされている場合)は、ループの繰り返しごとにesiediをインクリメントするので、コピー元のブロックとコピー先のブロックの先頭を指すように初期化します。 REP MOVSBを実行している間、プロセッサはコピー元のブロックの最後に到達するまで、ソースアドレスと宛先アドレスをインクリメントします。

directionフラグが設定されている場合、プロセッサは代わりにレジスタをデクリメントします。つまり、コピー先のメモリブロックの末尾を指している必要があります。最初から始めて最後にコピーするのではなく、最後から始まり、最初になるまで後方にコピーします。

関連する問題