まえがき
この記事は「プログラムはなぜ動くのか」の本を読み、各章ごとにまとめとして、投稿しています。
さらっとまとめてあるので、本の内容を復習したい方なんかにはいいかなと思います。
なぜ「プログラムはなぜ動くのか」を読もうと思ったのか?
まつもとゆきひろ氏の20代へ向けた若手エンジニアの勉強法の講演内容をまとめた記事が人気を博しており、私もいくつかの投稿を一読しました。
そのなかで優秀なプログラマーはCS(コンピューターサイエンス)に精通しているとあり、技術力の高い著名人もみな似たようなことを言っているのを思い出しました。そのため、文系出身であり、コンピュータに関する知識があまりないため、CSを学習していこうと思いました。
そのための触りとして、各ブログ記事やQiltaの投稿等でおすすめされていたこの本を読み、まとめとして、こちらにアウトプットしておこうと思いました。
第一章 「プログラマにとってCPUとはなにか」まとめ
第1章である内容をまとめていきます。ちなみにCPUに関する内容が中心です。
CPUの構成要素
CPUの内部は主にE以下4つの要素から構成される。
- レジスタ
- 制御装置
- 演算装置
- クロック
レジスタ→処理対象となる命令やデータを格納する領域で、1種のメモリーのようなもの。
制御装置→メモリー上の命令やデータをレジスタに読み出し、命令の実行結果に応じてコンピューター全体を制御する。
演算装置→メモリーからレジスタに読み出されたデータを演算する
クロック→CPUが動作するタイミングとなるクロック信号を発生させる
CPUはレジスタの集合体である。プログラミングをする上で、他3つのCPUの構成要素(制御装置、演算装置、クロック)はさほど
重要でなく、レジスタを意識すべき。なぜなら、プログラムはレジスタを対象として、記述されるものだから。
### メモリとは?
一般的にメモリと呼ばれているのはメイン・メモリと呼ばれているもの。
1バイト(8ビット)ずつにアドレスと呼ばれる番号がついていて、CPUはアドレスを指定して、データの読み書きを行う。
CPU(マシン語)が行っている命令
- データ転送命令
- 演算命令
- ジャンプ命令
- コール/リターン命令
データ転送命令→レジスタとメモリ、メモリとメモリ、レジスタ周辺装置の間でデータの読み書きをする
演算命令→アキュムレータで算術演算、論理演算、比較演算、シフト演算を行う
ジャンプ命令→条件分岐、繰り返し、無条件のジャンプを行う
コール/リターン命令 関数を呼び出す、呼び出し元に戻る
主なレジスタの種類とその役割
- アキュムレータ
- フラグ・レジスタ
- プログラム・カウンタ
- ベース・レジスタ
- インデックス・レジスタ
- 汎用レジスタ
- 命令レジスタ
- スタック・レジスタ
データには①演算に使われる値と②メモリーのアドレスを表す値の2種類が存在する。
演算に使う値は「アキュムレータ」に保存し、アドレスを表す値は「ベース・レジスタ」や「インデックス・レジスタ」に格納する。
プログラム・カウンタとは?
プログラムの流れを制御する。
フラグレジスタとは?
直前に実行した演算の結果として、値が負、ゼロ、正のいずれになったかを記憶する。
ベース・レジスタ、インデックス・レジスタとは?
これらのレジスタをペアで使うことにより、メインメモリ上の特定のメモリ領域を区切って配列のように使うことができる。
まとめ
ざっくりになってしまい(アセンブラのくだりはまとめてません…)ましたが、後々編集して充実させていきたいと思います。