圖書簡介
《程式是怎樣跑起來的》一書從計算機的內部結構開始講起,以圖配文的形式詳細講解了二進制、記憶體、數據壓縮、源檔案和執行檔、作業系統和應用程式的關係、彙編語言、硬體控制方法等內容,是讓讀者了解從用戶雙擊程式圖示到程式開始運行之間到底發生了什麼。同時專設了“如果是你,你會怎樣介紹?”專欄,以小學生、老奶奶為對象講解程式的運行原理,頗為有趣。本書圖文並茂,通俗易懂,非常適合計算機愛好者及相關從業人員閱讀。
目錄
第 1章 對程式設計師來說CPU是什麼 1
1.1 CPU的內部結構解析 3
1.2 CPU是暫存器的集合體 6
1.3 決定程式流程的程式計數器 9
1.4 條件分支和循環機制 10
1.5 函式的調用機制 13
1.6 通過地址和索引實現數組 16
1.7 CPU的處理其實很簡單 17
第 2章 數據是用二進制數表示的 19
2.1 用二進制數表示計算機信息的原因 21
2.2 什麼是二進制數 23
2.3 移位運算和乘除運算的關係 25
2.4 便於計算機處理的“補數” 27
2.5 邏輯右移和算術右移的區別 31
2.6 掌握邏輯運算的竅門 34
COLUMN 如果是你,你會怎樣介紹?——向小學生講解CPU和二進制 38
第3章 計算機進行小數運算時出錯的原因 41
3.1 將0.1累加100次也得不到10 43
3.2 用二進制數表示小數 44
3.3 計算機運算出錯的原因 46
3.4 什麼是浮點數 47
3.5 正則表達式和 EXCESS系統 50
3.6 在實際的程式中進行確認 52
3.7 如何避免計算機計算出錯 55
3.8 二進制數和十六進制數 56
第4章 熟練使用有稜有角的記憶體 59
4.1 記憶體的物理機制很簡單 61
4.2 記憶體的邏輯模型是樓房 65
4.3 簡單的指針 67
4.4 數組是高效使用記憶體的基礎 69
4.5 棧、佇列以及環形緩衝區 71
4.6 鍊表使元素的追加和刪除更容易 75
4.7 二叉查找樹使數據搜尋更有效 79
第5章 記憶體和磁碟的親密關係 81
5.1 不讀入記憶體就無法運行 83
5.2 磁碟快取加快了磁碟訪問速度 84
5.3 虛擬記憶體把磁碟作為部分記憶體來使用 85
5.4 節約記憶體的編程方法 88
5.5 磁碟的物理結構 93
第6章 親自嘗試壓縮數據 97
6.1 檔案以位元組為單位保存 99
6.2 RLE 算法的機制 100
6.3 RLE 算法的缺點 101
6.4 通過莫爾斯編碼來看哈夫曼算法的基礎 103
6.5 用二叉樹實現哈夫曼編碼 105
6.6 哈夫曼算法能夠大幅提升壓縮比率 109
6.7 可逆壓縮和非可逆壓縮 110
COLUMN 如果是你,你會怎樣介紹?——向沉迷遊戲的中學生講解記憶體和磁碟 114
第7章 程式是在何種環境中運行的 117
7.1 運行環境 = 作業系統 + 硬體 119
7.2 Windows克服了CPU以外的硬體差異 122
7.3 不同作業系統的 API不同 124
7.4 FreeBSD Port 幫你輕鬆使用原始碼 125
7.5 利用虛擬機獲得其他作業系統環境 127
7.6 提供相同運行環境的 Java虛擬機 128
7.7 BIOS 和引導 130
第8章 從源檔案到執行檔 133
8.1 計算機只能運行本地代碼 135
8.2 本地代碼的內容 137
8.3 編譯器負責轉換原始碼 139
8.4 僅靠編譯是無法得到執行檔的 141
8.5 啟動及庫檔案 143
8.6 DLL 檔案及導入庫 145
8.7 執行檔運行時的必要條件 146
8.8 程式載入時會生成棧和堆 148
8.9 有點難度的Q&A 150
第9章 作業系統和套用的關係 153
9.1 作業系統功能的歷史 155
9.2 要意識到作業系統的存在 157
9.3 系統調用和高 級程式語言的移植性 160
9.4 作業系統和高 級程式語言使硬體抽象化 161
9.5 Windows作業系統的特徵 163
COLUMN 如果是你,你會怎樣介紹?——向超喜歡手機的女高中生講解作業系統的作用 170
第 10章 通過彙編語言了解程式的實際構成 173
10.1 彙編語言和本地代碼是一一對應的 175
10.2 通過編譯器輸出彙編語言的原始碼 177
10.3 不會轉換成本地代碼的偽指令 180
10.4 彙編語言語法是“操作碼+運算元” 182
10.5 **常用的mov指令 185
10.6 對棧進行push和pop 185
10.7 函式調用機制 187
10.8 函式內部的處理 189
10.9 始終確保全局變數用的記憶體空間 191
10.10 臨時確保局部變數用的記憶體空間 196
10.11 循環處理的實現方法 199
10.12 條件分支的實現方法 202
10.13 了解程式運行方式的必要性 204
第 11章 硬體控制方法 209
11.1 套用和硬體無關? 211
11.2 支撐硬體輸入輸出的 IN指令和OUT指令 212
11.3 編寫測試用的輸入輸出程式 215
11.4 外圍設備的中斷請求 218
11.5 用中斷來實現實時處理 221
11.6 DMA 可以實現短時間內傳送大量數據 222
11.7 文字及圖片的顯示機制 224
COLUMN 如果是你,你會怎樣介紹?——向鄰居老奶奶說明顯示器和電視機的不同 226
第 12章 讓計算機“思考” 229
12.1 作為“工具”的程式和為了“思考”的程式 231
12.2 用程式來表示人類的思考方式 232
12.3 用程式來表示人類的思考習慣 235
12.4 程式生成隨機數的方法 237
12.5 活用記憶功能以達到更接近人類的判斷 239
12.6 用程式來表示人類的思考方式 242
COLUMN 如果是你,你會怎樣介紹?——向常光臨的酒館老闆講解計算機的思考機制 245
附錄 讓我們開始C語言之旅 247
C語言的特點 247
變數和函式 248
數據類型 249
標準函式館 250
函式調用 251
局部變數和全局變數 254
數組和循環 255
其他語法結構 256