書籍概要

アタマとカラダで理解する! コンピュータプログラムはどのように動くのか?

著者
発売日
更新日

概要

CPUのしくみ,コンパイラ/インタープリタ・OSの自作といったテーマについては,もちろん大学の教科書には載っています。また実用書にも総花的なテーマを扱ったものはありますが,それらの解説は表面的なものになりがちである上,文章による説明ではどうしても理解が困難です。それに対して本書は,誰でも実際に自分でやってみることにより自然に納得できる,きわめて敷居の低い本になっています。目的は,プログラムが実行されるまでの「すべて」の過程がわかるようになること(本書の目的はプログラムが動くまでのプロセスを見せること)。著者の提供するエミュレータおよびロジックシミュレータ(Webブラウザがあれば使用可)で確認することにより,頭だけでなく体でも徹底的に原理を理解できます。

こんな方におすすめ

  • 系統立ったコンピュータ教育を受けてこなかったプログラマー
  • 何事も確認しながら覚えたいという初心者プログラマー
  • 大学などの授業では難しくて付いていくのが困難だという学生など

目次

Chapter 0 本書が目指すもの

  • 0.1 本書の目的
  • 0.2 本書が提供するエミュレータについて
  • 0.3 エミュレータのソースコードについて
  • 0.4 本書で紹介したソースコード

Chapter 1 基本ロジック編

  • 1.1 デジタルとアナログ
  • 1.2 連続と離散
  • 1.3 それでもデジタルが勝利する理由
  • 1.4 アナログコンピュータは実在するか?
  • 1.5 デジタル情報は何分割すると良いのか?
  • 1.6 ジョージ・ブール登場
  • 1.7 ビット
  • 1.8 電圧とビット
  • 1.9 ビット演算
  • 1.10 真理表
  • 1.11 真理表と等価回路
  • 1.12 回路図記号
  • 1.13 論理演算の応答速度
  • 1.14 負論理出力のゲート
  • 1.15 負論理入力のゲート
  • 1.16 多入力ゲート
  • 1.17 数値の基底
  • 1.18 バイト
  • 1.19 バイトの仲間たち
  • 1.20 2進数とビットの共通点
  • 1.21 2進数とビットの相違点
  • 1.22 1の補数と2の補数
  • 1.23 2の補数の非対称性
  • 1.24 符号ビット
  • 1.25 固定小数点実数
  • 1.26 浮動小数点実数
  • 1.27 誤差の問題
  • 1.28 8進数
  • 1.29 10進数
  • 1.30 2進化10進数
  • 1.31 16進数
  • 1.32 ワイヤードOR
  • 1.33 スリーステート
  • 1.34 加算(ADDER)
  • 1.35 フリップフロップ
  • 1.36 ラッチ
  • 1.37 カウンタ
  • 1.38 デコーダ
  • 1.39 マルチプレクサ

Chapter 2 CPU 構造/命令編

  • 2.1 CPUとは?
  • 2.2 御先祖様を復活させよう
  • 2.3 Z80というオプション
  • 2.4 Intel 8080の内部構造
  • 2.5 時分割バス
  • 2.6 内部バスと外部バス
  • 2.7 バスの本数
  • 2.8 レジスタ/ラッチ
  • 2.9 8ビットレジスタと16ビットレジスタ
  • 2.10 8ビットレジスタと見なせるもの
  • 2.11 16ビットレジスタと見なせるもの
  • 2.12 バッファ
  • 2.13 アドレスバッファ(ADDRESS BUFFER)
  • 2.14 フラグフリップフロップ(FLAG FLIPFLOPS)
  • 2.15 リトルエンディアンとビッグエンディアン
  • 2.16 Intel 8080全命令詳説
    • 2.16.1 各命令の説明中で使用される共通の記号
    • 2.16.2 データ転送グループ
    • 2.16.3 算術/論理演算グループ
    • 2.16.4 分岐命令グループ
    • 2.16.5 スタックI/Oおよび機械制御グループ
    • 2.16.6 擬似命令
    • 2.16.7 ラベルと値
    • 2.16.8 コメント
  • 2.17 演算装置(ARITHMETIC LOGIC UNIT)
  • 2.18 10進補正(DECIMAL ADJUST)
  • 2.19 命令デコーダおよびマシンサイクルエンコーダ(INSTRUCTION DECODER AND MACHINE CYCLE ENCODING)
  • 2.20 レジスタアレイ(REGISTER ARRAY)
  • 2.21 レジスタ選択(REGISTER SELECT)
  • 2.22 マルチプレクサ(MULTIPLEXER)
  • 2.23 タイミングおよび制御(TIMING AND CONTROL)
  • 2.24 電源(POWER SUPPLIES)
  • 2.25 CPUパッケージ(PACKAGE)
  • 2.26 割り込み
  • 2.27 DMA(DIRECT MEMORY ACCESS)
  • 2.28 CPU構造編の先に待つもの
  • 2.29 CPUその他の必須知識集
    • 2.29.1 バスそのものを時分割する時分割バス
    • 2.29.2 メモリマップドI/OとポートマップドI/O
    • 2.29.3 クロック回路
    • 2.29.4 同期バスと非同期バス
    • 2.29.5 プログラムカウンタ
    • 2.29.6 スタックポインタ
    • 2.29.7 インデックスレジスタ
    • 2.29.8 ベースポインタ
    • 2.29.9 フラグ
    • 2.29.10 アキュムレータ
    • 2.29.11 起動シーケンス
    • 2.29.12 停止命令と停止信号
    • 2.29.13 最強の割り込み
    • 2.29.14 WAIT外し

Chapter 3 システム編

  • 3.1 標準化されたバス
  • 3.2 シリアルバスとパラレルバス
  • 3.3 メモリ(記憶装置)
  • 3.4 交換可能なメモリ
  • 3.5 メモリ ―書き換え可能か否か
  • 3.6 メモリ ―アクセス速度による分類
  • 3.7 主要なRAMの分類
  • 3.8 D-RAMリフレッシュ
  • 3.9 主要なROM の分類
  • 3.10 メモリのバックアップ
  • 3.11 キャッシュメモリ
  • 3.12 バンク切り替え
  • 3.13 バンク切り替えとCP/M
  • 3.14 2ポートメモリ
  • 3.15 パラレル入出力
  • 3.16 シリアル入出力
  • 3.17 割り込みコントローラ
  • 3.18 DMAコントローラ
  • 3.19 ディスクコントローラ
  • 3.20 CRTコントローラ
  • 3.21 手動DMA
  • 3.22 キャラクタジェネレータ
  • 3.23 テキストVRAMとグラフィックVRAM
  • 3.24 サウンドジェネレータ
  • 3.25 アドレスデコーダ
  • 3.26 手抜きデコードとゴーストイメージ
  • 3.27 クロックジェネレータ
  • 3.28 バスバッファ
  • 3.29 キーボードインターフェース
  • 3.30 マウスインターフェース
  • 3.31 電源
  • 3.32 マザーボード

Chapter 4 ファームウェア編

  • 4.1 起動スタイル
  • 4.2 起動の歴史
  • 4.3 ファームウェアとBIOS
  • 4.4 PCの起動シーケンス
  • 4.5 機械語モニタと完全に自立したシステム
  • 4.6 今回のCPUエミュレータでの実装

Chapter 5 OS編

  • 5.1 OSの役割
  • 5.2 OSの基本構造
  • 5.3 CP/Mをブートする
  • 5.4 BIOSの内容
  • 5.5 CP/Mを使ってBIOSを開発するなら

Chapter 6 アセンブラ編

  • 6.1 機械語をアセンブラで扱う
  • 6.2 アセンブラの基本構造
  • 6.3 アセンブラの分類
  • 6.4 LOADコマンドの存在意義
  • 6.5 リンカの存在意義
  • 6.6 アセンブラの長所,アセンブラの死角
  • 6.7 エミュレータEE8080の簡易アセンブラ

Chapter 7 高級言語編

  • 7.1 アセンブラの限界
  • 7.2 文法と規格と実装
  • 7.3 インタープリタとコンパイラ
  • 7.4 シンプルな高級言語を試作する
  • 7.5 言語仕様の確定
  • 7.6 字句解析
  • 7.7 構文解析
  • 7.8 実行またはコード生成
  • 7.9 minibfのソースコード
  • 7.10 コンパイラコンパイラ
  • 7.11 構文木
  • 7.12 最適化
  • 7.13 レジスタ変数とレジスタカラーリング
  • 7.14 コード生成

Chapter 8 セキュリティ編

  • 8.1 自己増殖プログラムは可能か?
  • 8.2 無限自己増殖プログラムは可能か?
  • 8.3 悪意ある第三者は処理に割り込めるか?
  • 8.4 自殺プログラムは可能か?
  • 8.5 プログラムがお互いをつぶし合うゲームは可能か?

Chapter 9 まとめ

    • 9.0.1 魔法と見分けがつかない
    • 9.0.2 過去を見れば未来が見える
    • 9.0.3 そしてあなたが使うアプリが生まれた

Appendix 1 エミュレータEE8080操作説明

    • A.1.1 トップメニュー
    • A.1.2 CPUメニュー
    • A.1.3 Miscメニュー
    • A.1.4 CPUエミュレータ実行時ハンバーガーメニュー
    • A.1.5 Uploadコマンドで読み込める仮想フロッピーディスク一覧

Appendix 2 WordMaster 簡易リファレンス

    • A.2.1 ビデオモードの操作(抜粋)
    • A.2.2 コマンドラインモードの操作(抜粋)

Appendix 3 CP/M CCP簡易リファレンス

    • A.3.1 内部コマンド
    • A.3.2 外部コマンド

Appendix 4 CP/M CALL 5簡易リファレンス

Appendix 5 CP/M DDT簡易リファレンス

Appendix 6 ADM-3A簡易リファレンス

Appendix 7 読者のためのヒント

    • A.7.1 EE8080のソースコード活用のヒント
    • A.7.2 CP/Mなどが起動不能になった場合の対象方法

Index

サポート

正誤表

小社刊『アタマとカラダで理解する! コンピュータプログラムはどのように動くのか?』(川俣 晶・著/2018年1月29日 初版 第1刷)におきまして,一部の記述に間違いのあることが判明いたしましたので,下記のとおりお知らせいたします。読者の皆様にはご迷惑をおかけし,まことに申し訳ございません。ご容赦くださいますよう,お願い申し上げます。

(2018年3月26日最終更新)

P.50 図1.24中の表

状態ケース1ケース2ケース3ケース4
入力1(右手)FalseTrueFalseFalse
入力2(左手)FalseFalseTrueFalse
AND演算の結果FalseTrueTrueTrue
 
状態ケース1ケース2ケース3ケース4
入力1(右手)FalseTrueFalseFalse
入力2(左手)FalseFalseTrueFalse
AND演算の結果FalseFalseFalseTrue

商品一覧