it-swarm.dev

手書きのアセンブリは消えますか?

先週、コンパイラの最適化がどんどん良くなっているので、手書きのアセンブリが不要になる時期があるのではないかと思っていました。コンパイラが手書きのアセンブリに匹敵するコードを生成するのに十分スマートではない特別なフィールドはまだありますか?

7
Oliver Weiler

手書きの組み立てが不要になる点はありますか?

決して。専用のハードウェア固有の命令が常に必要です。

コンパイラが手書きのアセンブリに匹敵するコードを生成するのに十分スマートではない特別なフィールドはまだありますか?

カーネルの割り込み管理、I/Oドライバーの機能、ロックおよびスレッド同期が頻繁にmust使用されるため、いくつかのアセンブラーを含めるoutside使用される標準の命令セットコンパイラによって。

実際、Intelが作成したメモリの順序付けの問題(http://www.mpdiag.com/intel_Arch.html)を解決しようと前進するにつれて、共通のOS内で追加または調整する必要のある追加または異なる命令が存在する可能性がありますカーネル;コンパイラが通常はエンドユーザーアプリケーションに対して生成しないもの。

25
S.Lott

一部の非常に特殊なマイクロコントローラーでは、コンパイラーを移植する価値はありません。

たとえば、FPGAの24ビットコントローラ用に、特別な目的のアプリケーション用に、約1000行のアセンブリを書いたことがあります。

12
starblue

まず第一に、エドモンドヒラリー卿がエベレストに登る人々について話しているのと同じように、「そこにあるから」とアセンブリを書いている人がいると思います。その存在そのものが彼らにとっての挑戦であり、彼らは、結果に対する実際的な必要性(または使用さえ)があるかどうかにかかわらず、その挑戦を受け入れます。

とは言っても、私自身の考えは、すべてのコードのpercentageを縮小するためにアセンブリ言語が使用されていますが、プログラミング全体ではまだ十分な成長があり、絶対的な意味で、アセンブリコーディングはまだ成長しています。

たとえば、MS-DOSの大部分はアセンブリ言語で記述されています。議論のために、それがall手書きのアセンブリ言語であると仮定しましょう。端数を出すために、約100キロバイトの出力コード(おそらく5万行のソースコードのようなもの)を生成した手書きのアセンブリ言語を意味しているとしましょう。

最後に聞いたところによると、Microsoftは、Windowsの1パーセントの約1/10がアセンブリ言語で記述されていると主張しました。 Windowsは現在約1億5,000万行のコードですが、その.1パーセントは合計150,000行です。

また、Windowsはおそらくコンパイラの使用に適したmostである領域を表しています。これは、主に大量のメモリと一般に大量のリソースを備えた高速マシンを対象としています。機能はmuchリソースの使用を最小限にするよりも重要です。

小さな組み込みシステム(1つの明白な例について)は、手書きのアセンブリコードをmuch程度まで間違いなく支持しています。典型的な電子レンジのコードは、ファイルシステム、アンチエイリアスフォントのレンダリング、ネットワーク上の多数のマシンの管理などのために、コードの巨大なチャンクをほとんど必要としません。

10
Jerry Coffin

Assemblyでしか実行できないことがいくつかありますが、それらは既に便利に関数にラップされています。したがって、実際に手作業で行う必要はありません。

あなたがすべてを知っている非常に特定のチップをプログラムする場合、Assemblyを使用すると、その最後のビットを圧迫するだけかもしれません(ただし、その知識をコンパイラーに入れることは可能です)。

ただし、すべての異なるアーキテクチャを備えた通常のCPUでは、命令セットや、分岐予測や順不同の実行なども、特定のチップ用にビルドする場合を除いて、手書きのアセンブリでは実際に速度が低下する可能性があります。適切なCコンパイラーは、言語をそれらの固有の最適化の可能性のほとんどを活用するすべてのアーキテクチャーに分解できるので、この努力は正当化できません。一方で、これをすべて手作業で行おうとすると、頭が爆発し、地球上の誰も喜んで予算を使いません。結果がかなり速くなるかどうかさえはっきりしないので、支払うこと。

7
back2dos

この質問は2つの部分に分けられると思います。

実行速度を上げるためにアセンブリで書くことがなくなる時が来るでしょうか?

もう来たと思います。

Assemblyでの書き込みがなくなる時期は来るのでしょうか?

いいえ、ハイパーバイザー、カーネル、デバイスドライバーなどを作成するときは、常にハードウェアにさらに接近する必要があります。

7
dan_waterworth

生成されたすべてのアセンブリが最適または最速であるとは限らないため、常に手動でアセンブリをプログラミングする必要があります。この良い例は次のとおりです。 http://www.virtualdub.org/blog/pivot/entry.php?id=307

7
Daemin