5

大学では、コンピューター アーキテクチャとアセンブリ言語プログラミングの必修コースを受講しました。アセンブリ言語は非常に時間がかかり、理解するのが難しいことがわかりました。なぜアセンブリ言語を教えるのか、いまだに理解できません。私は私のインストラクターに同じ質問をしました. しかし、私は一度質問が頭を悩ませると、その答えをそれほど長く待つことができない性質を持っています. ですから、非常に強力で高速で効率的なプログラミング言語があり、その上、そのような言語がプログラミングを容易にするさまざまなツールを提供しているのに、なぜアセンブリ言語がまだ必要なのかを尋ねたいと思います。なぜ?

4

2 に答える 2

12

もっともな理由の 1 つは、すべてのプログラミング言語がコンピューターの動作を抽象化したものだからです。理論的には、高級言語の場合、抽象化とは、プログラマーがコンピューターの詳細について心配する必要がないことを意味します。

ただし、抽象化は常に漏れやすいです。たとえば、ほとんどの (すべてではないにしても) 高水準言語は、CPU キャッシュ (キャッシュの一貫性や偽の共有など) を自動的に最適化するわけではなく、効率的なマルチスレッド化は常に注意が必要です。これは、パフォーマンスが重要な場合、プログラマーはコードを別の方法で記述しなければならない可能性があることを意味します。

パフォーマンスを得る最善の方法は、マシンがどのように機能するかを理解することです。これにより、プログラマーは、コンパイラーが容易にできない大規模なアーキテクチャーの変換を実行できるようになります。例として、スレッドが 64 バイトの倍数でデータを処理することを確認する (キャッシュ ラインでの誤った共有を減らすため)、または構造体の配列 ⇔ 配列の構造体変換を実行します。


アセンブリ (およびある程度の C) は、これらのパフォーマンスの詳細を学習するための非常に優れた方法です。各ステップで何が起こるかを正確に制御できるため、コンピューターが何をしているかを正確に理解することが非常に簡単になるからです。

(漏れやすい抽象化ポイントは、特定の/カスタム ハードウェア コンポーネントへのアクセスにも適用されます。)

于 2012-07-04T06:02:01.390 に答える
5

主要なタスクには、マシンコードが依然として必要です。

  • デバイス ドライバなどのハードウェア固有のコード
  • コードのサイズが重要な組み込みデバイス
  • パフォーマンスが重要な低レベル コードなど。

多くの場合、アセンブリ言語は、アセンブリを C コードにインラインで追加できる C などの高水準言語に混在させることができます。

とはいえ、スタック、ヒープ、ポインターなどがどのように機能するかについての洞察が得られるため、高水準言語でプログラミングする場合でも、基礎となるハードウェア アーキテクチャを把握することをお勧めします。

于 2012-07-04T05:48:17.540 に答える