コンピュータシステムをゼロから作って学ぶベストセラー書の改訂第2版。コンピュータを理解するための最善の方法はゼロからコンピュータを作ることです。コンピュータの構成要素は、ハードウェア、ソフトウェア、コンパイラ、OSに大別できます。本書では、これらコンピュータの構成要素をひとつずつ組み立てます。具体的には、NANDという電子素子からスタートし、論理ゲート、加算器、CPUを設計します。そして、アセンブラ、仮想マシン、コンパイラ、OSなどを実装しコンピュータを完成させて、最後にその上でアプリケーション(テトリスなど)を動作させます。
コンピュータシステムの理論と実装 第2版
―モダンなコンピュータの作り方
Noam Nisan、Shimon Schocken 著、斎藤 康毅 訳
- TOPICS
- System/Network
- 発行年月日
- 2024年12月
- PRINT LENGTH
- 472
- ISBN
- 978-4-8144-0087-4
- 原書
- The Elements of Computing Systems, Second Edition
- FORMAT
- Print PDF EPUB
関連ファイル
目次
賞賛の声 訳者まえがき まえがき 第I部 ハードウェア I.1 Hello, World Below(こんにちは、低レイヤの世界) I.2 Nand to Tetris I.3 抽象化と実装 I.4 方法論 I.5 この先の展望 1章 ブール論理 1.1 ブール代数 1.2 論理ゲート 1.3 ハードウェアの構築 1.3.1 ハードウェア記述言語(HDL) 1.3.2 ハードウェアシミュレーション 1.4 仕様 1.4.1 Nandゲート 1.4.2 基本論理ゲート 1.4.3 複数ビットの基本ゲート 1.4.4 複数入力の基本ゲート 1.5 実装 1.5.1 動作シミュレーション 1.5.2 ハードウェア実装 1.5.3 ビルトインチップ 1.6 プロジェクト 1.7 展望 2章 ブール算術 2.1 算術演算 2.2 2進数 2.3 2進数の加算 2.4 符号付き2進数 2.5 仕様 2.5.1 加算器 2.5.2 ALU(算術論理演算器) 2.6 実装 2.7 プロジェクト 2.8 展望 3章 メモリ 3.1 メモリデバイス 3.2 順序回路 3.2.1 時間について 3.2.2 フリップフロップ 3.2.3 組み合わせ論理回路と順序論理回路 3.3 仕様 3.3.1 Dフリップフロップ 3.3.2 レジスタ 3.3.3 ランダムアクセスメモリ(RAM) 3.3.4 カウンタ 3.4 実装 3.4.1 Dフリップフロップ 3.4.2 レジスタ 3.4.3 RAM 3.4.4 カウンタ 3.5 プロジェクト 3.6 展望 4章 機械語 4.1 機械語の概要 4.1.1 ハードウェアの要素 4.1.2 アセンブリ言語 4.1.3 命令 4.2 Hack機械語 4.2.1 背景 4.2.2 プログラム例 4.2.3 Hack言語の仕様 4.2.4 シンボル 4.2.5 入出力操作 4.2.6 構文規則とファイル形式 4.3 Hackプログラミング 4.4 プロジェクト 4.5 展望 5章 コンピュータアーキテクチャ 5.1 コンピュータアーキテクチャの基礎 5.1.1 プログラム内蔵方式 5.1.2 ノイマン型アーキテクチャ 5.1.3 メモリ 5.1.4 CPU 5.1.5 入出力(I/O) 5.2 Hackハードウェアのプラットフォーム仕様 5.2.1 概観 5.2.2 CPU 5.2.3 命令メモリ 5.2.4 入出力 5.2.5 データメモリ 5.2.6 コンピュータ 5.3 実装 5.3.1 CPU 5.3.2 メモリ 5.3.3 コンピュータ 5.4 プロジェクト 5.5 展望 6章 アセンブラ 6.1 背景 6.2 Hack機械語の仕様 6.2.1 プログラム 6.2.2 シンボル 6.2.3 構文規則 6.3 アセンブリからバイナリへの変換 6.3.1 命令の処理 6.3.2 シンボル処理 6.4 実装 6.4.1 基本版アセンブラの開発 6.4.2 完全版アセンブラの開発 6.5 プロジェクト 6.6 展望 第II部 ソフトウェア II.1 Jackプログラミング II.2 プログラムのコンパイル 7章 仮想マシンI:処理 7.1 仮想マシンのパラダイム 7.2 スタックマシン 7.2.1 pushとpop 7.2.2 スタック演算 7.2.3 仮想メモリセグメント 7.3 VM仕様① 7.4 実装 7.4.1 Hackプラットフォーム上の標準VMマッピング① 7.4.2 VMエミュレータ 7.4.3 VM実装の設計に関する提案 7.5 プロジェクト 7.6 展望 8章 仮想マシンII:制御 8.1 高水準のマジック 8.2 分岐 8.3 関数 8.4 VM仕様② 8.5 実装 8.5.1 関数の呼び出しと復帰 8.5.2 Hackプラットフォーム上の標準VMマッピング② 8.5.3 VM実装の設計案 8.6 プロジェクト 8.7 展望 9章 高水準言語 9.1 例 9.2 Jack言語の仕様 9.2.1 構文要素 9.2.2 プログラムの構造 9.2.3 データ型 9.2.4 変数 9.2.5 文 9.2.6 式 9.2.7 サブルーチン呼び出し 9.2.8 オブジェクトの生成と破棄 9.3 Jackアプリケーションの作成 9.4 プロジェクト 9.5 展望 10章 コンパイラI:構文解析 10.1 背景 10.1.1 字句解析 10.1.2 文法 10.1.3 パース 10.1.4 パーサ 10.2 仕様 10.2.1 Jack言語の文法 10.2.2 Jack言語の構文解析器 10.3 実装 10.4 プロジェクト 10.4.1 トークナイザ 10.4.2 コンパイルエンジン 10.5 展望 11章 コンパイラII:コード生成 11.1 コード生成 11.1.1 変数の扱い 11.1.2 式のコンパイル 11.1.3 文字列のコンパイル 11.1.4 文のコンパイル 11.1.5 オブジェクトの扱い 11.1.6 配列のコンパイル 11.2 仕様 11.3 実装 11.3.1 仮想マシンへの標準マッピング 11.3.2 実装ガイドライン 11.3.3 ソフトウェアアーキテクチャ 11.4 プロジェクト 11.5 展望 12章 OS 12.1 背景 12.1.1 数学演算 12.1.2 文字列 12.1.3 メモリ管理 12.1.4 グラフィック出力 12.1.5 文字出力 12.1.6 キーボード入力 12.2 Jack OSの仕様 12.3 実装 12.4 プロジェクト 12.5 展望 13章 さらなる冒険へ 13.1 ハードウェアの実現 13.2 ハードウェアの改良 13.3 高水準言語 13.4 最適化 13.5 通信 付録A ブール関数の合成 A.1 ブール代数 A.2 ブール関数の合成 A.3 Nandの表現力 付録B ハードウェア記述言語 B.1 HDLの基本 B.2 マルチビットバス B.3 ビルトインチップ B.4 順序回路 B.5 チップの可視化 B.6 HDLサバイバルガイド 付録C テスト記述言語 C.1 一般的なガイドライン C.2 ハードウェアシミュレータでのチップのテスト C.3 CPUエミュレータ上での機械語プログラムのテスト C.4 VMエミュレータ上でのVMプログラムのテスト 付録D Hackのチップセット 付録E Hackの文字セット 付録F Jack OSのAPI F.1 Math F.2 String F.3 Array F.4 Output F.5 Screen F.6 Keyboard F.7 Memory F.8 Sys 付録G オンラインIDEの使い方 G.1 オンラインIDEの概要 G.2 オンラインIDEの主要ツール G.3 ハードウェアシミュレータ G.4 CPUエミュレータ G.5 アセンブラ G.6 VMエミュレータ G.7 Jackコンパイラ G.8 日本語版のサポートサイト 索引