maya's blog

About programming, aws and ubuntu

『プログラムはなぜ動くのか』読書メモ 1章

『プログラムはなぜ動くのか 知っておきたいプログラミングの基礎知識 第2版』

矢沢久雄, 日経ソフトウェア監修, 日経BP社発行

ISBN978-4-8222-8315-5

はじめに

2001年10月第1版の評判

「」CPUのレジスタとメモリーの働きがわかり、自分が書いたプログラムが動作する仕組みがわかった」

プログラミング経験が少ない読者からは「内容がややむずかしい」との声もありました。

  • 物事の本質を知ること -> 応用につながる
  • 新しい技術が登場しても容易に理解できる

本書の概要

  • 293p
  • 全部で12章

目次

  1. プログラマにとってCPUとはなにか
  2. データを2進数でイメージしよう
  3. コンピュータが小数点数の計算を間違える理由
  4. 四角いメモリーを丸く使う
  5. モリーとディスクの親密な関係
  6. 自分でデータを圧縮してみよう
  7. プログラムはどんな環境で動くのか
  8. ソース・ファイルから実行可能ファイルができるまで
  9. OSとアプリケーションの関係
  10. アセンブリ言語からプログラムの本当の姿を知る
  11. ハードウエアを制御する方法
  12. コンピュータに「考え」させるためには

1章 プログラマにとってCPUとはなにか

ウォーミングアップ

プログラムとは、何ですか?

コンピュータに実行させる処理の順番を示すもの

プログラムの中には、何が含まれていますか?

命令とデータ

マシン語とは、何ですか?

CPUが直接解釈できる言語

実行時のプログラムは、どこに格納されていますか?

モリー(メイン・メモリー

モリーのアドレスとは、何ですか?

モリー上で命令やデータが格納されている場所を示す値

コンピュータの構成要素の中で、プログラムを解釈・実行する装置は何ですか?

CPU

CPUの中身をのぞいてみよう

  • CPUは最終的にマシン語となったプログラムの内容を解釈して実行する装置
  • CPUやメモリの実体は、多くのトランジスタから構成されたIC(集積回路)
  • CPUの内部は以下の4つから構成されている
    1. レジスタ
      • 処理対象となる命令・データを格納する領域 一種のメモリ
    2. 制御装置
      • メモリ上の命令・データをレジスタに読み出し、命令の実行結果に応じてコンピュータ全体を制御
    3. 演算装置
      • メモリからレジスタに読み出されたデータを演算する装置
    4. クロック
      • CPUが動作するタイミングとなるクロック信号を発生
      • クロック信号 2GHzとかのやつ

メモリとは

  • 命令とデータを格納するための装置
  • 1バイトずつにアドレスが割り振られている
  • CPUはアドレスを指定して格納された命令・データを読み書き
  • 揮発性 (電源を切ると格納されている命令・データは削除される)

CPUはレジスタの集合体

主なレジスタの種類とその役割

レジスタに格納される値は「命令」「データ」の2種類

データには(1)演算に使われる値, (2)メモリーのアドレスを表す値

要は値の種類によって、どのレジスタに格納するのかが決まってくる

  • アキュムレータ 演算を行うデータおよび演算後のデータを格納する
  • フラグ・レジスタ 演算処理後のCPUの情愛を格納する
  • プログラム・カウンタ 次に実行する命令が格納されたメモリーのアドレスを格納する
  • ベース・レジスタ データ用のメモリー領域の先頭アドレスを格納する
  • インデックス・レジスタ ベース・レジスタから相対アドレスを格納する
  • 汎用レジスタ 任意のデータを格納する
  • 命令レジスタ 命令そのものを格納する。プログラマがプログラムでこのレジスタの値を読み書きするのではなく、CPUが内部的に使用する
  • スタック・レジスタ スタック領域の先頭アドレスを格納する

プログラムの流れを決めるプログラム・カウンタ

  1. プログラム開始位置(アドレス)をプログラム・カウンタにset
  2. CPUがメモリに格納されている命令を実行するとプログラムカウンタの値が自動でインクリメント

条件分岐と繰り返しの仕組み

関数呼び出しの仕組み

ベースとインデックスで配列を表現する

CPUにできることは、いたって単純