6

x86 AT&T 構文の je、jnl などの命令しか知りません。

jcc とは実際にはどういう意味ですか? すべてのジャンプ命令?

4

2 に答える 2

8

ccの略ですcondition code

Jcc単一の命令ではなく、ジャンプする前に条件コードをチェックするジャンプ ニーモニックを記述しているだけです。

JNEたとえば、ジャンプする前に条件コードをチェックします。

典型的なケースは、(CC を設定する) 比較を行い、その後ジャンプ ニーモニックの 1 つを使用することです。

AND条件コードは、 、ORXOR、加算、減算 (またはCMPもちろん ) などの命令で設定することもできます。

于 2016-09-19T08:02:11.333 に答える
3

CC はコンディションコードを意味します。通常、これは FLAGS の状態を意味しますが、JECXZ を除き、Intel はJcc insn set ref manual entryで他の Jcc 命令とグループ化します。

Agner Fog の命令表のような他のマニュアルでは、JECXZ をフラグベースのジャンプから分離することがよくあります。

すべてのジャンプ命令?

いいえ、絶対に違います。

x86 には、別の条件付きジャンプ命令、LOOP/LOOPccもあります。LOOPE LOOPNE は、使用可能な唯一の条件であり、フラグ状態の完全なセットではありません。( LOOP は使用しないでください。遅いです)

Jcc には、JMP やその他の無条件ジャンプ、さらには間接ジャンプ ( jmp *raxAT&T 構文など) も含まれていません。間接的なジャンプは常に行われますが、可変の宛先を持つことができます。CALL と RET もジャンプです。

XEND 命令に到達する前にトランザクショナル メモリ操作が中止された場合、XBEGIN でさえジャンプとして動作するため、トランザクションのコミットまたは中止に対する条件分岐です。


条件付きジャンプと同じ FLAGS 条件を使用する他の "cc" 命令があります: SETccおよびCMOVcc。Jcc と同様に、FLAGS はこれらの命令へのデータ入力であり、それらのデータ出力はそれに依存します。そのため、ジャンプなしでフラグベースの操作を実行できます。


用語は x86 だけに限定されません。

GNU C インライン アセンブリ構文は、 inline-asm ステートメントがマシンの条件コードを上書きすることを宣言するためにも使用"cc"します。(これは x86 および x86-64 では暗黙的です: 明示的なクロバーは必要ありません"cc"。一部のアーキテクチャ (ARM など) とは異なり、ほとんどの x86 命令はフラグを変更するため、gcc が x86 に移植されたとき、設計者はより良いコードになり、人々が"cc"clobber セクションに書き忘れたときにバグの原因となる可能性がはるかに高くなります)。

于 2016-09-19T16:12:15.133 に答える