問題タブ [eflags]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
144 参照

go - x64 アセンブリと CMOVLMI: このオペコードはどこに記述されていますか?

Go のソース コードを読んでいるときfastrand()に、自分のマシンのファイルにある関数を読んでいるときに、次のasm_amd64.sスニペットに出くわしました。

私の人生では、何CMOVLMIをすべきか理解できません。それを検索すると、Go だけがそれについて何かを知っているように見えることがわかります。CMOVxxAMD X86_64 リファレンスで定義されている多くのオペコードを見つけることができ、ウィキペディアのページには条件付き移動命令の長い歴史がありますが、これはそのリストのどこにも表示されません。

CMOVLMI はどこで定義されていますか? Go の内部アセンブラに固有のものですか?

0 投票する
2 に答える
3355 参照

assembly - x86で乗算を計算するためにキャリーフラグとオーバーフローフラグがどのように使用されていますか

乗算された 2 つの数値がレジスタをオーバーフローしたときに、答えを正しく計算するために 2 つのフラグはどのように使用されますか?

たとえば、alが保持され、0xffが乗算され0x2、 へのオーバーフローが発生したax場合、フラグはこれにどのように役立つのでしょうか?

0 投票する
1 に答える
1020 参照

assembly - x86 アセンブリ - CMP がゼロ フラグを正しく設定しない

デバッグ中にこの比較に出くわしました:

私はそれにブレークポイントを設定し、これを見ました(hexの値):

したがって、ECX と BL が指すバイトが等しいため、この比較を実行した後にゼロ フラグが設定されると予想していました。ただし、代わりに発生したのは、オーバーフロー フラグが設定され、ZF は 0 のままでした。比較後:

なぜこのように振る舞うのですか?符号付き/符号なし整数と関係がありますか? 私は、CMP は不可知論的だと思っていました。つまり、比較の結果を符号付き/符号なしとして解釈することは、次の分岐命令 (たとえば、JG と JA) が行うことでした。比較の後に JNE が続きます。これは、ZF=0 であるために取得され、誤った結果を引き起こしています。

0 投票する
1 に答える
1248 参照

windows - Windows 64 ビット呼び出し規約

Windows関数の呼び出しで見つけることができるドキュメントによると、以下が適用されます:-

Microsoft x64 呼び出し規則 [12][13] は、Windows およびプリブート UEFI (x86-64 でのロング モード用) に準拠しています。最初の 4 つの整数またはポインター引数にレジスター RCX、RDX、R8、R9 を (この順序で) 使用し、追加の引数を (右から左に) スタックにプッシュします。整数の戻り値 (x86 と同様) は、64 ビット以下の場合、RAX で返されます。

Microsoft x64 呼び出し規約では、関数を呼び出す直前にスタックに 32 バイトの "シャドウ スペース" を割り当て (実際に使用されるパラメーターの数に関係なく)、呼び出し後にスタックをポップするのは呼び出し元の責任です。シャドウ スペースは、RCX、RDX、R8、および R9 をスピルするために使用されますが、[14] すべての関数で使用できるようにする必要があります。

レジスタ RAX、RCX、RDX、R8、R9、R10、R11 は揮発性 (呼び出し元保存) と見なされます [15]。

レジスタ RBX、RBP、RDI、RSI、RSP、R12、R13、R14、および R15 は、不揮発性 (callee-saved) と見なされます。[15]

GetEnvironmentVariableAそのため、特定の状況でへの呼び出しが失敗するまで、kernel32 を喜んで呼び出していました。DF最終的に、方向フラグが設定されていて、それをクリアする必要があるという事実にたどり着きました。

私は今までこれについての言及を見つけることができず、電話の前に常にそれをクリアするのが賢明かどうか疑問に思いました.

あるいは、他の問題を引き起こす可能性があります。この場合の呼び出しの規則を知っている人はいますか?

0 投票する
1 に答える
1337 参照

assembly - 「AND AL,0xFF」の目的は何ですか?

逆アセンブルされた win32 C++ プログラムを読んでいると、かなりの数が表示されます。

これは完全に無意味ですか、それともコンパイラがこれらを生成するのはなぜですか?

より長い例を次に示します。

これらの操作の後にフラグがチェックされていないため、それは目的ではありません。の後、、、およびANDの値が に移動されます。ALCLDL[ESI + n]

0 投票する
1 に答える
75 参照

assembly - 関数またはサブルーチンでDFを保持するためのより良い方法はありますか

私はアルゴリズムの流れについて考えることによって、主に空間のコンテキストで最適化に手を出すのが好きです。いくつかの異なるシナリオを試した結果、これが私が考えた中で最高のシナリオのようです。また、このプロシージャが呼び出されると、DF が設定される場合と設定されない場合があるため、これは必須であると仮定します。

目的: DF を変更せずに発信者に返します。

STD実際に本体の一部になるものを除いて、このプロローグ/エピローグから目的へのアドレスは 18 バイトで入ります。


これよりもタイトなメソッドを実装した人はいますか?