內容簡介
本書通過展現簡單但功能強大的計算機系統之構建過程,為讀者呈現了一幅完整、嚴格的計算機套用科學大圖景。本書作者認為,理解計算機工作原理的最好方法就是親自動手,從零開始構建計算機系統。.
通過12個章節和項目來引領讀者從頭開始,本書逐步地構建一個基本的硬體平台和現代軟體階層體系。在這個過程中,讀者能夠獲得關於硬體體系結構、作業系統、程式語言、編譯器、數據結構、算法以及軟體工程的詳實知識。通過這種逐步構造的方法,本書揭示了計算機科學知識中的重要成分,並展示其它課程中所介紹的理論和套用技術如何融入這幅全局大圖景當中去。全書基於“先抽象再實現”的闡述模式,每一章都介紹一個關鍵的硬體或軟體抽象,一種實現方式以及一個實際的項目。完成這些項目所必要的計算機科學知識在本書中都有涵蓋,只要求讀者具備程式設計經驗。本書配套的支持網站提供了書中描述的用於構建所有硬體和軟體系統所必需的工具和資料,以及用於12個項目的200個測試程式。..
全書內容廣泛、涉獵全面,適合計算機及相關專業本科生、研究生、技術開發人員、教師以及技術愛好者參考和學習。
目錄
前言.
介紹:hello, world below
第1章 布爾邏輯
1.1 背景知識
1.1.1 布爾代數
1.1.2 門邏輯
1.1.3 實際硬體結構
1.1.4 硬體描述語言(hdl)
1.1.5 硬體仿真
1.2 規範詳述
1.2.1 nand門
1.2.2 基本邏輯門
1.2.3 多位基本門
1.2.4 多通道邏輯門
1.3 實現
1.4 觀點
1.5 項目
第2章 布爾運算
2.1 背景知識
2.2 規範詳述
.2.2.1 加法器
2.2.2算術邏輯單元(alu)
2.3 實現
2.4 觀點
2.5 項目
第3章 時序邏輯
3.1 背景知識
3.2 規範詳述
3.2.1 d觸發器
3.2.2 暫存器
3.2.3 存儲
3.2.4 計數器
3.3 實現
3.4 觀點
3.5 項目
第4章 機器語言
4.1 背景知識
4.1.1 機器
4.1.2 語言
4.1.3 命令
4.2 hack機器語言規範詳述
4.2.1 概述
4.2.2 a-指令
4.2.3 c-指令
4.2.4 符號
4.2.5 輸入/輸出處理
4.2.6 語法規約和檔案格式
4.3 觀點
4.4 項目
第5章 計算機體系結構
5.1 背景知識
5.1.1 存儲程式概念
5.1.2 馮?諾依曼結構
5.1.3 記憶體
5.1.4 中央處理器
5.1.5 暫存器
5.1.6 輸入和輸出
5.2 hack硬體平台規範詳述
5.2.1 概述
5.2.2 中央處理器(cpu)
5.2.3 指令記憶體
5.2.4 數據記憶體
5.2.5 計算機
5.3 實現
5.3.1 中央處理器
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.2.4 範例
6.3 實現
6.3.1 parser模組
6.3.2 code模組
6.3.3 無符號程式的彙編編譯器
6.3.4 symboltable模組
6.3.5 有符號程式的彙編編譯器
6.4 觀點
6.5 項目
第7章 虛擬機ⅰ:堆疊運算
7.1 背景知識
7.1.1 虛擬機范型
7.1.2 堆疊機模型
7.2 vm規範詳述,第i部分
7.2.1 概論
7.2.2 算術命令和邏輯命令
7.2.3 記憶體訪問命令
7.2.4 程式流程控制命令和函式調用命令
7.2.5 jack-vm-hack 平台中的程式元素
7.2.6 vm編程實例
7.3 實現
7.3.1 hack平台上的標準vm映射,第i部分
7.3.2 關於vm設計實現的建議
7.3.3 程式結構
7.4 觀點
7.5 項目
第8章 虛擬機ⅱ:程式控制
8.1 背景知識
8.1.1 程式控制流
8.1.2 子程式調用
8.2 vm規範詳述,第ⅱ部分..
8.2.1 程式控制流命令
8.2.2 函式調用命令
8.2.3 函式調用協定
8.2.4 初始化
8.3 實現
8.3.1 hack平台上的標準vm映射,第ⅱ部分
8.3.2 範例
8.3.3 vm實現的設計建議
8.4 觀點
8.5 項目
第9章 高級語言
9.1 背景知識
9.1.1 範例1:hello world
9.1.2 範例2:過程化編程和數組處理
9.1.3 範例3:抽象數據類型
9.1.4 範例4:鍊表實現
9.2 jack語言規範詳述
9.2.1 語法要素
9.2.2 程式結構
9.2.3 變數
9.2.4 語句
9.2.5 表達式
9.2.6 子程式調用
9.2.7 jack標準庫
9.3 編寫jack應用程式
9.4 觀點
9.5 項目
第10章 編譯器ⅰ:語法分析
10.1 背景知識
10.1.1詞法分析
10.1.2 語法
10.1.3 語法分析(parsing)
10.2 規範詳述
10.2.1 jack語言語法
10.2.2 jack語言的語法分析器
10.2.3 語法分析器的輸入
10.2.4 語法分析器的輸出
10.3 實現
10.3.1 jackanalyzer模組
10.3.2 jacktokenizer模組
10.3.3 compilationengine模組
10.4 觀點
10.5 項目
第11章 編譯器ⅱ:代碼生成
11.1 背景知識
11.1.1 數據翻譯
11.1.2 命令翻譯
11.2 規範詳述
11.2.1 虛擬機平台之上的標準映射
11.2.2 編譯過程舉例
11.3 實現
11.3.1 jackcompiler模組
11.3.2 jacktokenizer模組
11.3.3 symboltabel模組
11.3.4 vmwriter模組
11.3.5 compilationengine模組
11.4 觀點
11.5 項目
第12章 作業系統
12.1 背景知識
12.1.1 數學操作
12.1.2 數字的字元串表示
12.1.3 記憶體管理
12.1.4 變長數組和字元串
12.1.5 輸入/輸出管理
12.2 jack os規範詳述
12.2.1 math
12.2.2 string
12.2.3 array
12.2.4 output
12.2.5 screen
12.2.6 keyboard
12.2.7 memory
12.2.8 sys
12.3 實現
12.3.1 math
12.3.2 string
12.3.3 array
12.3.4 output
12.3.5 screen
12.3.6 keyboard
12.3.7 memory
12.3.8 sys
12.4 觀點
12.5 項目
第13章 後記:發掘更多樂趣
13.1 硬體的實現
13.2 硬體的改進
13.3 高級語言
13.4 最佳化
13.5 通信
附錄a: 硬體描述語言(hdl)
a.1 範例
a.2 約定
a.3 將晶片載入到硬體仿真器
a.4 晶片描述頭(接口)
a.5 晶片描述體(實現)
a.5.1 單元
a.5.2 管腳和連線
a.5.3 匯流排
a.6 內置晶片
a.7 時序晶片
a.7.1 時鐘
a.7.2 時鐘晶片和管腳
a.7.3 反饋環
a.8 晶片操作的可視化
a.9 已經提供的內置晶片與新的內置晶片
附錄b:測試腳本語言
b.1 檔案的格式和用法
b.2 在硬體仿真器中測試晶片
b.2.1 範例
b.2.2 數據類型和變數
b.2.3 腳本命令
b.2.4 內置晶片的方法和變數
b.2.5 範例
b.2.6 默認腳本
b.3 在cpu仿真器中測試機器語言程式
b.3.1 範例
b.3.2 變數
b.3.3 命令
b.3.4 默認腳本
b.4 在vm仿真器中測試vm程式
b.4.1 範例
b.4.2 變數
b.4.3 命令
b.4.4 默認腳本
索引...