まあ、CLDは方向フラグをクリアし、STDは方向フラグを設定することを知っています。 しかし、方向フラグの設定と解除のポイントは何ですか?x86アセンブリ言語のCLDとSTDは何ですか? DFは何をしていますか?
答えて
方向フラグは、文字列命令がポインタレジスタをオフセットする方向に影響を与えるために使用されます。これらは、操作を繰り返すために使用できる同じ指示です。 (lods
はrep
ではあまり役に立ちませんが)。
ストリング命令は、次のとおりMOVS
(MEMは、MEMにコピー)、STOS
(店舗AL/AX/EAX/RAX)、SCAS
(走査列)、CMPS
(文字列比較)、及びLODS
(負荷列)。メモリとIOポート間のコピーにはins
/outs
もあります。これらの各命令は、バイト、ワード、ワード、およびワードのオペランド・サイズで使用できます。
一言で言えば、方向フラグが0の場合、指示はすべての繰り返しの後に(ECX
が0またはその他の条件になるまで、REP
接頭辞のフレーバに応じて)データのポインタをインクリメントして機能します。ifフラグが1の場合、ポインタはデクリメントされます。例えば
、movsd
コピー(64ビットモードまたはRDI)[ds:esi]
から[es:edi]
にDWORD、この行います(インテル社のPDFファイルから抽出されたリンクされたISAリファレンスマニュアルエントリに「操作」の項を参照)
dword [es:edi] = dword [ds:esi] // 4-byte copy memory to memory
if (DF == 0)
esi += 4;
edi += 4;
else // DF == 1
esi -= 4;
edi -= 4;
fi
REP接頭辞を使用すると、このECX回数が実行され、現代のx86 CPUは16バイトまたは32バイトの内部操作でコピー(またはstos
が格納)される「ファースト・ストリング」マイクロコードを最適化しました。 this Q&A about memory bandwidth and the ERMSB featureも参照してください。 (repne/repe scas
またはcmps
ではなく、rep stos
とrep movs
のみが最適化されています)。
その後、STDCALL呼び出し規約どおりのWindows、使用している場合 - STDCALLの下
を、方向フラグは、エントリに明確であると は明確返さなければなりません。
DFを設定すると、API呼び出しの前にクリアする必要があります。
オペレーティングシステムに依存します。 – amanuel2
これは、i386 System Vやx86-64 System Vを含むほとんどの32ビット/ 64ビット呼び出し規約に共通しています。CLD命令を使用せずに 'rep movsd' /' rep stosd'を効率的にインライン化することができます。 (現代のx86では、DF = 0の場合、多くの場合、上向きにしか高速化しません) –
CLD CLears方向フラグには、データが先に進みます。 STD Directionフラグに設定され、データが逆方向に移動します。
CLD:明確な方向フラグので、各文字列操作後に、その文字列のポインタ オートインクリメント
STD: STDは、Siおよび/またはDIを自動的にデクリメントされるように、1方向フラグを設定するために使用され文字列命令の1つが実行されたときに次の文字列要素をポイントします。方向フラグが設定されている場合、SI/DIはバイト文字列では1、ワード列では2減算されます。
この回答は役に立ちます。
- 1. 良いx86アセンブリ言語リソースには何がありますか?
- 2. アセンブリ言語の逆アセンブリ言語x86
- 3. アセンブリ言語 - sarqはコード内で何をしますか?
- 4. アセンブリ言語x86 Irvine32
- 5. アセンブリ言語でグローバル_startとは何ですか?
- 6. アセンブリ言語で1とは何ですか?
- 7. アセンブリ言語コードの "$"に相当するトークンは何ですか?
- 8. アセンブリX86言語の質問
- 9. この構文は、nasm x86アセンブリ言語の意味(MOV [EBX]、110)は何ですか?
- 10. [^ \ n]とは何ですか?(C言語)
- 11. x86アセンブリ言語上位と下位ビット
- 12. Windows x86アセンブリ言語の構文
- 13. 離散数学とアセンブリ言語の使用法は何ですか?
- 14. x86-32アセンブリの "lea eax、[ebx + eax]"と "add eax、ebx"の違いは何ですか?
- 15. Ionic 2の言語は何ですか?
- 16. 言語Xのネットワークグラフライブラリは何ですか?
- 17. Arduinoのプログラミング言語は何ですか?
- 18. この新しいAxumプログラミング言語とは何ですか?
- 19. 自然言語とプログラミング言語の文法上の違いは何ですか?
- 20. Scalaの言語はScalaScriptと何らかの形で関係しています
- 21. アセンブリ言語の電卓 - Linux x86&NASM - Division
- 22. コンポーネント指向言語とオブジェクト指向言語の違いは何ですか?
- 23. GCD再帰アセンブリ言語X86 MASM
- 24. 「de」と「de-DE」の言語コードの違いは何ですか?
- 25. df [i]は何をしていますか?
- 26. プログラミング言語コンパイラとデータベースコンパイラの違いは何ですか?
- 27. Linuxプラットフォームでx86アセンブリを学ぶ最も良い方法は何ですか?
- 28. 「語彙タイプ」とは何ですか?プログラミング言語間
- 29. 何かをoutパラメータとして返す正しい用語は何ですか?
- 30. 並行言語とは何ですか? Java言語仕様から
これは、ビットが原因で発生したバグの数です。私のTurbo Pascalコードは、インラインアセンブリーを使ってリセットされました。 –