回答編集履歴

1 追記

Chironian

Chironian score 22527

2018/02/19 13:38  投稿

こんにちは。
> C言語において勉強中なのですが、CPUなどを使いこなすのにアセンブリ言語を勉強している人などがいるなどの記述があったので気になりました。
アセンブラでギチギチにハードウェアを制御すれば最大限の性能を引き出せますが、その方法で大規模なプログラムを開発することはあまり現実的ではありません。生産性が低すぎてお金がかかりすぎるのです。そのため、そこまでやるのは処理速度が最重要なごく一部の分野の狭い範囲に限定されます。
多くの人は、そのようにして開発されたデバイスドライバやライブラリを用いて、それなりの速度で動作するプログラムを開発し、生産性を確保します。
この速度と生産性のトレードオフは対象のプログラムで大きく振れます。生産性命の分野もあれば速度命の分野もあります。C言語は速度命に近い分野のプログラムで良く使われます。ですので、ハードウェアの特性を把握していれば居るほど有利になる(より高速なプログラムを開発できる)というわけです。
そのためにアセンブラを勉強することはかなりお薦めです。
そのためにアセンブラを勉強することはかなりお薦めです。
---
【質問の追記への回答】
> だとしたら、何をもとに使っているCPUの内部構造を把握したのでしょうか?
最初はやはりアセンブラの入門書で学習するのが良いように感じます。情報処理技術者試験の[CASL](https://ja.wikipedia.org/wiki/CASL)などなら入門書もあるように思います。
実際のハードウェアを制御してみたいのであれば、[ATEMLのAVR](https://ja.wikipedia.org/wiki/Atmel_AVR)や[PIC](https://ja.wikipedia.org/wiki/PIC_(%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9))ならばハードウェアも廉価ですし、情報も豊富です。(個人的には構造が素直なAVRがお勧めです。)
> 個人的にはアセンブリ言語はCPUに依存するため使うCPUの構造を詳しく知らないとプログラム自体組めない様にも思えます。
その通りです。しかし、いきなりPCのCPUから始めるのは難しすぎるのでお勧めではありません。
私自身はまだCPUが単純だった頃からこの分野に興味を持ちましたので、上記のAVRマイコンよりも更に簡単なマイコンから入りました。その流れ自体は正解だったと思います。
まずは、基本のメモリやレジスタの仕組みをマスターすることが重要と思います。その辺りを把握しているのとしていないのとでは、C言語で書けるプログラムの質が結構変わると思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る