2011-12-15 11 views
7

アセンブリ言語で書くことについて議論するのが好きで、それを書くことを学びたいという理由の1つである、私の周りの人がよく聞きます。現在、私はアセンブリとCを一緒に学んでいます。実際のコードをアセンブリ言語で記述する必要はありますか?

私の質問は、実際のコードでアセンブリを書く必要があるときです。
学ぶだけでいいですか?
Cでコードを書くときに実際に使用されていますか?

ご意見やご感想をお寄せください。

+1

アセンブリは、もはやIMOにはあまり役に立ちませんが、そうであれば、それを読むことはしばしばそれを書くことよりも有用です。 – zneak

+1

コンパイラが実際にそれをカットしないときはいつでも必要になります。ビデオデータ、科学的シミュレーション、ゲームの中のいくつかのもの、特にBashworkなどで言及されているような非常に厳しいサイクルバジェットのものを扱うコードなど、それはいくつかの人がそれを作り出すほど稀です。あなたがそれらを書くときあなたの人生を吸う退屈な企業向けアプリではまれです。 – harold

答えて

4

これはまれです。私は23年以上ものキャリアの経験がありませんでした。しかし、私はClient ServerのDBアプリケーションの領域で主に仕事をしています。そこにはたくさんのことを使う仕事や、少なくともプロセッサの実際の働きを知る必要があります。

しかし、これは私が最初に学んだことであり、基本的なデジタルエレクトロニクスは含まれていませんでした。学習は私のキャリアや趣味のプログラミングよりも大きな助けとなっています。

5

私は長い記事を書くつもりだったが、代わりにまとめることにしました:

  1. 埋め込みコード、ブートローダー、コンパイラのバックエンド
  2. をはい、それはあなたが理解し、あなたのコンパイルされたコード
  3. をデバッグします私がcで使った唯一の時間は、リアルタイムクロックレジスタを読み取るためのものです
8

アセンブリコードを書くことはますます珍しくなったにもかかわらず、どのように物事がボンネットの下でどのように機能するかを理解するために、現代のC/C++コンパイラの最適化コンパイラは、非常に高品質のアセンブリ命令に変換するコードをC言語で記述することができます。 CPUのパイプライン)。

新しいアーキテクチャ用のコンパイラ、非常に低いレベルのライブラリ、または厳密なリソース制約を持つ組み込みシステムを作成する場合、アセンブリを使用する必要があります。それ以外のものについては、CとC++も同様に優れた処理を行います。

2

私は、Cであなたが何か特別なことをすることはできませんでした(例えば、特別なCPUレジスタにアクセスしたり、CPUのシステム命令を使うなど)、あるいはCコードもコンパイルされていました遅くても大きすぎても(コンパイラは十分ではありませんでした)。

まだ、それを書いているasmコードや時間を費やす部分はかなり重要ではありませんでした。

学習asmは良いです。これは、あなたのCコードを "見て"、どの命令と何が変わるかを予測し、コードの部分の速度をおおよそ見積もります。このプロセスでは、最適化とその他の数々のトリックと、いくつかのクールなアルゴリズム/メソッドを学習して、Cコードに転送することができます。 Cポインタに関する数多くの質問や、バイナリと小数の間の数値の変換、または任意精度の算術を見てください。 asmを知ることは、これらのことや他のことを助けます。

3

アセンブリ言語の専門家の使用は、組み込みの世界ではかなり一般的です。マイクロコントローラーがシンプルで便利なことを行うアプリケーションは、私たちの周りにたくさんあります。たとえば、tinyAVR family of microcontrollers from Atmelを見てください。特に、ATtiny13は、1kBのプログラムメモリがちょっと小さめで、32ビットの8ビットCPUレジスタを除いてRAMはまったくありません。しかし、これらのチップはcapable ofです。そのチップは大量に購入すると約1ドルのコストがかかる。したがって、単純な(または単純ではない)ロジックを必要とする大量のデバイスを作成する場合、ハードウェア製作コストの節約は、非常に限定されたプラットフォームで動作させるためにアセンブラのコードを手作業で作成するオーバーヘッドよりも重要です。

2

私はこれまで2011年にこれを2回やっていましたが、主にJavaのビジネス向けアプリケーションを扱っています。簡単なsetup.exeを使ってJREをラップしてアプリをインストールすると便利です。コンパイラよりもアセンブラを手に入れてセットアップする方が早いですし、このようなシンプルなアプリケーションでは、書き込み時間はどちらの方法にも匹敵します...また、USBデバイスとのインタフェースに問題がある場合にも使用します。 JNAを介して不明な理由で失敗していたので、私はアセンブリでそれを書いて、すべてのビットがいつどこに行くのかを知っていることを確認しました。

関連する問題