どちらのツールもアセンブリ命令を直接マシン コードに変換しますが、どちらが最も高速でクリーンなコードを生成するかを判断できますか?
6 に答える
アセンブラで書いているときは、生成する命令を正確に記述しているので、アセンブラに依存しません。あなた次第です。記述したニーモニックとマシン コードの実際の命令の間には、1 対 1 の対応があります。
これら 2 つの特定のツールについてはわかりませんが、異なる方法でエンコードできる命令がいくつかあります。
ADD AX,1
05 01
または81 c0 01
または_fe c0
INT 3
cc
または_cd 03
- 2 バイトの SSE 命令を拡張する新しいAVX命令には、2 バイトまたは 3 バイトのプレフィックスが付きます。すべての 2 バイトのプレフィックスは、3 バイトのプレフィックスとしてエンコードすることもできます。
これらは、アセンブラーが同じ命令を別の方法でエンコードする方法について、頭の中で思い浮かんだほんの数例にすぎないため、この質問は実際には理にかなっています。
構文の問題に関する補足として。ソースファイルの先頭に次の行を追加することで、Intel 構文で GAS を完全に正常に動作させることができます。
.intel_syntax noprefix
私はすべてのアセンブリのニーズに対して Intel 構文も使用しています。AT&T 構文よりもはるかに自然に思えます。そして、それはいくつかのキーストロークを節約します:-)。
アセンバーです...コードを最適化しません。そのまま訳すだけです。したがって、最速で最もクリーンなコードは、プログラマーまたはコンパイラーによって生成されます。
Intel の構文は AT&T の構文よりもはるかにきれいに見えるため、明らかに nasm です。
@ブライアン:それは問題ではありませんでした...
@cyber98834: アセンブラは、すべてのアセンブラがしなければならないことを行います: すべての命令をそのオペコードに変換します。
最適化はありません。
あ、それと、「最速のコード」というものはありません... 質問してもいいですか?CPU の速度は静的ですね。
したがって、CPU の速度を変更できないため、コードをより高速に実行することはできません。
ただし、コードを縮小して、CPU が処理する命令の量を減らし、実行にかかる時間を短縮することができます。
私が言おうとしていることを理解していただければ幸いです。
多くの最適化レッスンをカバーする Michael Abrash の Graphics Programming Black Book を購入することをお勧めします (または PDF を探しますが、それが合法かどうかはわかりません)。