11

どちらのツールもアセンブリ命令を直接マシン コードに変換しますが、どちらが最も高速でクリーンなコードを生成するかを判断できますか?

4

6 に答える 6

28

アセンブラで書いているときは、生成する命令を正確に記述しているので、アセンブラに依存しません。あなた次第です。記述したニーモニックとマシン コードの実際の命令の間には、1 対 1 の対応があります。

于 2009-08-15T19:27:41.533 に答える
8

これら 2 つの特定のツールについてはわかりませんが、異なる方法でエンコードできる命令がいくつかあります。

  • ADD AX,105 01または81 c0 01または_fe c0
  • INT 3ccまたは_cd 03
  • 2 バイトの SSE 命令を拡張する新しいAVX命令には、2 バイトまたは 3 バイトのプレフィックスが付きます。すべての 2 バイトのプレフィックスは、3 バイトのプレフィックスとしてエンコードすることもできます。

これらは、アセンブラーが同じ命令を別の方法でエンコードする方法について、頭の中で思い浮かんだほんの数例にすぎないため、この質問は実際には理にかなっています。

于 2009-08-15T20:07:18.630 に答える
5

構文の問題に関する補足として。ソースファイルの先頭に次の行を追加することで、Intel 構文で GAS を完全に正常に動作させることができます。

.intel_syntax noprefix

私はすべてのアセンブリのニーズに対して Intel 構文も使用しています。AT&T 構文よりもはるかに自然に思えます。そして、それはいくつかのキーストロークを節約します:-)。

于 2009-08-17T22:40:22.213 に答える
4

アセンバーです...コードを最適化しません。そのまま訳すだけです。したがって、最速で最もクリーンなコードは、プログラマーまたはコンパイラーによって生成されます。

于 2009-08-15T19:27:41.893 に答える
2

Intel の構文は AT&T の構文よりもはるかにきれいに見えるため、明らかに nasm です。

于 2009-08-15T19:28:08.977 に答える
1

@ブライアン:それは問題ではありませんでした...

@cyber98834: アセンブラは、すべてのアセンブラがしなければならないことを行います: すべての命令をそのオペコードに変換します。

最適化はありません。

あ、それと、「最速のコード」というものはありません... 質問してもいいですか?CPU の速度は静的ですね。

したがって、CPU の速度を変更できないため、コードをより高速に実行することはできません。

ただし、コードを縮小して、CPU が処理する命令の量を減らし、実行にかかる時間を短縮することができます。

私が言おうとしていることを理解していただければ幸いです。

多くの最適化レッスンをカバーする Michael Abrash の Graphics Programming Black Book を購入することをお勧めします (または PDF を探しますが、それが合法かどうかはわかりません)。

于 2009-08-15T19:38:10.843 に答える