2

「いつASMを使用するのですか?」というトピックについていくつかのグーグル調査を行いました。そして有益な情報を見つけました。もちろん、HL コードのサイズと速度の最適化、ブートローダー、組み込みシステム、ドライバー開発、リバース エンジニアリングなど、幅広い分野のアプリケーションについて言及されています。

ここで、Intel プロセッサ (x86) で通常の C コンパイラ (gcc など) を使用して実行できない (または非常に効果がない) ASM で何が達成できるかをお聞きしたいと思いますか?

私は聞いたことがあります:

  • ミューテックスの実装 - 直接の CP​​U サポートが必要 (例: lockxchg)
  • ファンシー ビット操作 - 1 に設定された最上位 / 最下位ビットの検出 ( bsfbsr)、ビットが 1 かどうかのテスト ( btbts...)、値の回転 ( rorrol)
  • 割り込みマスキング ( sti, cli)
  • CPU 固有の情報へのアクセス ( cpuid)

ASM で標準メモリ関数 (memcpy() など) を書き直すことを提案する人もいます。最近のコンパイラはすでにこれらの操作を最適な方法で実装していると思っていましたが、間違っているのでしょうか?

誰かが、私が理解できない int/float 変換についても言及しました。つまり、このような変換を手動で実行する方がはるかに効率的ですか?

4

1 に答える 1

1

コンパイラでサポートされていない CPU アーキテクチャの利点を利用しています。コンパイラがvectorizations計算を実行してパフォーマンスを向上させるのに十分でない場合は、アセンブリも使用できます。AVX 対応の CPU で 1 つの命令で 32 文字の計算を行うことを考えてみてください。

于 2012-09-07T14:57:09.997 に答える