teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/02/19 04:38

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -6,4 +6,20 @@
6
6
  多くの人は、そのようにして開発されたデバイスドライバやライブラリを用いて、それなりの速度で動作するプログラムを開発し、生産性を確保します。
7
7
 
8
8
  この速度と生産性のトレードオフは対象のプログラムで大きく振れます。生産性命の分野もあれば速度命の分野もあります。C言語は速度命に近い分野のプログラムで良く使われます。ですので、ハードウェアの特性を把握していれば居るほど有利になる(より高速なプログラムを開発できる)というわけです。
9
- そのためにアセンブラを勉強することはかなりお薦めです。
9
+ そのためにアセンブラを勉強することはかなりお薦めです。
10
+
11
+ ---
12
+ 【質問の追記への回答】
13
+
14
+ > だとしたら、何をもとに使っているCPUの内部構造を把握したのでしょうか?
15
+
16
+ 最初はやはりアセンブラの入門書で学習するのが良いように感じます。情報処理技術者試験の[CASL](https://ja.wikipedia.org/wiki/CASL)などなら入門書もあるように思います。
17
+
18
+ 実際のハードウェアを制御してみたいのであれば、[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がお勧めです。)
19
+
20
+ > 個人的にはアセンブリ言語はCPUに依存するため使うCPUの構造を詳しく知らないとプログラム自体組めない様にも思えます。
21
+
22
+ その通りです。しかし、いきなりPCのCPUから始めるのは難しすぎるのでお勧めではありません。
23
+ 私自身はまだCPUが単純だった頃からこの分野に興味を持ちましたので、上記のAVRマイコンよりも更に簡単なマイコンから入りました。その流れ自体は正解だったと思います。
24
+
25
+ まずは、基本のメモリやレジスタの仕組みをマスターすることが重要と思います。その辺りを把握しているのとしていないのとでは、C言語で書けるプログラムの質が結構変わると思います。