第1章 CPUの気持ちを知るということ
この本に書かれているCPUの気持ちを知ることで見えてくる世界を解説します。ソフトウェア開発するにあたって、CPUの気持ちを知っておくと、どんないいことがあるのかも解説します。
第2章 CPUと友達になろう
CPUの気持ちを知る前にCPUとお友達になることからはじめていきます。ここではC言語のソースコードから実行ファイルを作成し、そのファイルの中身を覗いていきます。そこからOSの役割や実行ファイルの内部構造、ファイル中に含まれているコード(CPUが直接実行している)の構成や内容を解説します。
第3章 アセンブリ言語をなんとなく読む
前述の内容をもう少し掘り下げ、コンパイラによってC言語のソースコードからCPUが理解できるコード(アセンブリ言語)へ変換された際、どのようなコードとなるのかを解説します。本章では、完璧な理解は目指さず、フィーリングで理解していきます。そして友達から一歩先に進んでいきます。
第4章 CPUをざっくり把握する
CPUを構成している機能(回路)の概要を解説します。CPUはさまざまな回路から成り立っています。では、どのような回路が組み込まれおり、どんな役割を果たしているのか。基本的な構成をさまざまな例えを交えて解説します。
第5章 値を扱う(レジスタ)
CPUでは値をレジスタと呼ばれる変数のようなもので扱っています。具体的なレジスタの仕組みを通じて、プログラミング言語によくある変数とは何が異なるのかを解説します。また、レジスタは用途別にいくつか種類があるので、それらもあわせて解説します。
第6章 CPUができる事は多くない(命令)
コンピュータではAIから3Dゲームまで幅広く処理できます。が、CPU自体が直接実行できる処理(命令)は、実は多くなく、1つ1つがシンプルな処理ばかりです。本章では、直接実行できる処理(命令)について、余すところなく解説します。
第7章 道は分かれる(分岐命令)
CPUにもif文のような処理先を分岐させる命令が存在してます。ただ、分岐命令は一般的なプログラミング言語と考え方が異なるため独立した章で解説します。また、分岐命令はCPUの気持ちを知る上で鍵となる処理のひとつです。
第8章 シンプルなCPU、複雑なCPU(RISCとCISC)
現在のCPUの設計方法には、大きく分けてRISCとCISCという2種類に分類できます。本章ではRISCとCISCという2つの設計手法が生まれた経緯を含めてそれらの違いを解説します。また、CISCとRISCという区別は歴史を重ねるなかでどんどん曖昧になってきています。どのような変化があるのかについても解説します。
第9章 記憶の仕組み(メインメモリ)
CPUとメインメモリは密接な関係があります。メインメモリはどのようにデータを扱っているのか、またCPUはメインメモリに対してデータを読み書きする際、どのように読み書きするデータを指定しているのか、について解説します。
第10章 処理を効率よく実行する仕組み(パイプライン)
パイプラインのおかげで命令の実行効率が向上し、CPUの性能向上に大きく貢献しました。パイプラインは、どんな仕組みなのか、揚げ物に例えて解説します。また、性能向上に大きく貢献してはいますが、パイプラインを採用すると無条件で処理速度がアップする訳ではないという現実もあります。そういった理想と現実の乖離も解説します。
第11章 手が届く範囲にモノがあると便利だよね(キャッシュメモリ)
よく実行する処理や参照するデータを記録してあるのがキャッシュメモリです。そこで、キャッシュメモリが扱うデータの内容や、キャッシュメモリがなぜ必要なのかを解説します。お気に入りのコミックを手の届く範囲に置いておくと、すぐに読めるというメリットがあります。この欲求はCPUも同じです。キャッシュメモリの用法用量を正しく理解していないとCPUの機嫌を損ねることもあるので、それらも解説します。
第12章 CPUと周辺機器との結びつき(I/O)
CPUは演算のみならず周辺機器に対してやりとり(入出力)も行っています。本章ではCPUが周辺機器に対してデータを送ったりデータを受けとったりなど周辺機器とやりとりする方法を解説します。
第13章 多くの仕事を差し込まれる立場です(割り込み)
人が普段仕事をしていても発生する割り込みですが、コンピュータには必要不可欠な機能であり、これが無ければコンピュータを快適に利用することは難しいでしょう。ということでコンピュータにおける割り込みの解説や、機能の重要性について解説します。