《編程卓 越之道(卷1)深入理解計算機(第2版)》是電子工業出版社出版的圖書,作者是(美)Randall Hyde。
作為Randall1Hyde經典著作《編程卓 越之道》系列的第1卷,《深入理解計算機》深入地研究了計算機結構,卻不需要讀者掌握彙編語言。
基本介紹
- 中文名:編程卓越之道(卷1)深入理解計算機(第2版)
- 作者:【美】Randall Hyde
- 譯者:覃宇
- 出版社:電子工業出版社
- 出版時間:2022年12月
- 頁數:456 頁
- 定價:150 元
- 開本:16 開
- ISBN:9787121445316
內容簡介,圖書目錄,作者簡介,
內容簡介
將重點放在軟體執行背後的計算機底層上,深入淺出地介紹了計算機體系結構的方方面面,幫助我們理解如何才能寫出在計算機上高效運行的代碼。
圖書目錄
1 編寫卓 越代碼須知 1
1.1 《編程卓 越之道》系列 1
1.2 本書涵蓋的主題 2
1.3 閱讀本書的前提 4
1.4 卓 越代碼的特徵 5
1.5 本書要求的環境 6
1.6 額外建議 7
1.7 更多信息 7
2 數字表示 8
2.1 什麼是數字 8
2.2 計數系統 9
2.2.1 十進制位值計數系統 10
2.2.2 底數(基數) 11
2.2.3 二進制計數系統 12
2.2.4 十六進制計數系統 15
2.2.5 八進制計數系統 17
2.3 數字/字元串轉換 18
2.4 內部數字表示形式 20
2.4.1 位 20
2.4.2 位串 21
2.5 有符號和無符號數 24
2.6 二進制數的屬性 26
2.7 符號擴展、零擴展和收縮 27
2.8 飽和操作 31
2.9 二進制編碼的十進制表示 32
2.10 定點表示形式 33
2.11 比例數字格式 35
2.12 有理數表示形式 37
2.13 更多信息 38
3 二進制算術運算和位運算 39
3.1 二進制和十六進制數字的算術運算 39
3.1.1 二進制加法 40
3.1.2 二進制減法 41
3.1.3 二進制乘法 42
3.1.4 二進制除法 43
3.2 位的邏輯運算 45
3.3 二進制數值和位串的邏輯運算 47
3.4 有用的位運算 48
3.4.1 使用AND運算判斷位串中的一位 49
3.4.2 使用AND運算判斷多個位為零或非零 49
3.4.3 比較二進制字元串中的多個位 50
3.4.4 使用AND運算創建模n計數器 51
3.5 移位和旋轉 52
3.6 位欄位和打包數據 55
3.7 數據的打包和解包 60
3.8 更多信息 65
4 浮點表示形式 66
4.1 浮點運算簡介 66
4.2 IEEE 浮點格式 72
4.2.1 單精度浮點格式 72
4.2.2 雙精度浮點格式 74
4.2.3 擴展精度浮點格式 75
4.2.4 四精度浮點格式 76
4.3 規約形式與非規約形式 76
4.4 捨入 77
4.5 特殊的浮點值 79
4.6 浮點數異常 80
4.7 浮點運算 81
4.7.1 浮點表示形式 82
4.7.2 浮點數的加減法 82
4.7.3 浮點數的乘除法 93
4.8 更多信息 102
5 字元表示形式 103
5.1 字元數據 103
5.1.1 ASCII字元集 104
5.1.2 EBCDIC字元集 107
5.1.3 雙位元組字元集 108
5.1.4 Unicode字元集 109
5.1.5 Unicode碼位 110
5.1.6 Unicode編碼平面 111
5.1.7 代用碼位 111
5.1.8 字形、字元和字素簇 112
5.1.9 Unicode規範和規範等價性 115
5.1.10 Unicode編碼 116
5.1.11 Unicode組合字元 118
5.2 字元串 120
5.2.1 字元串格式 120
5.2.2 靜態字元串、偽動態字元串和動態字元串 127
5.2.3 字元串的引用計數 129
5.2.4 Delphi字元串 130
5.2.5 自定義字元串格式 130
5.3 字元集數據類型 130
5.3.1 字元集的冪集表示形式 131
5.3.2 字元集的列表表示形式 132
5.4 設計自定義字元集 133
5.4.1 設計高效的字元集 134
5.4.2 數字字元的編碼分組 135
5.4.3 字母字元分組 135
5.4.4 比較字母字元 138
5.4.5 其他字元分組 140
5.5 更多信息 143
6 記憶體結構和訪問 144
6.1 基本系統組件 144
6.1.1 系統匯流排 145
6.2 記憶體的物理結構 148
6.2.1 8位數據匯流排 151
6.2.2 16位數據匯流排 152
6.2.3 32位數據匯流排 155
6.2.4 64位數據匯流排 156
6.2.5 非80x86處理器對小單位記憶體的訪問 156
6.3 大端序與小端序結構 157
6.4 系統時鐘 163
6.4.1 記憶體訪問和系統時鐘 165
6.4.2 等待狀態 166
6.4.3 快取 168
6.5 CPU的記憶體訪問模式 172
6.5.1 直接記憶體定址模式 172
6.5.2 間接定址模式 173
6.5.3 變址定址模式 174
6.5.4 比例變址定址模式 175
6.6 更多信息 175
7 複合數據類型與記憶體對象 176
7.1 指針類型 176
7.1.1 指針的實現 178
7.1.2 指針與動態記憶體分配 179
7.1.3 指針操作與指針運算 179
7.2 數組 184
7.2.1 數組聲明 185
7.2.2 記憶體中的數組表示形式 188
7.2.3 訪問數組元素 190
7.2.4 多維數組 190
7.3 記錄/結構體 200
7.3.1 Pascal/Delphi記錄 201
7.3.2 C/C++記錄 202
7.3.3 HLA記錄 203
7.3.4 Swift記錄(元組) 203
7.3.5 記錄的記憶體存儲 204
7.4 判別聯合 207
7.4.1 C/C++聯合 208
7.4.2 Pascal/Delphi聯合 208
7.4.3 Swift聯合 209
7.4.4 HLA聯合 211
7.4.5 聯合的記憶體存儲 211
7.4.6 聯合的其他用途 213
7.5 類 214
7.5.1 繼承 216
7.5.2 類構造函式 221
7.5.3 多態 224
7.5.4 抽象方法和抽象基類 225
7.6 C++類 229
7.6.1 C++中的抽象成員函式和類 230
7.6.2 C++的多重繼承 231
7.7 Java類 233
7.8 Swift類 234
7.9 協定與接口 235
7.10 泛型和模板 239
7.11 更多信息 241
8 布爾邏輯與數字設計 242
8.1 布爾代數 243
8.1.1 布爾運算符 243
8.1.2 布爾假設 243
8.1.3 布爾運算符優先權 246
8.2 布爾函式與真值表 246
8.3 函式編號 248
8.4 布爾表達式的代數運算 250
8.5 規範形式 250
8.5.1 極小項和規範形式與真值表 252
8.5.2 使用代數方法得到極小項和規範形式 254
8.5.3 極大項積規範形式 255
8.6 布爾函式簡化 256
8.7 這和計算機有什麼關係 264
8.7.1 電路與布爾函式 265
8.7.2 組合電路 267
8.7.3 時序與時鐘邏輯 274
8.8 更多信息 278
9 CPU 體系結構 280
9.1 CPU設計基礎 280
9.2 指令的解碼與執行:隨機邏輯與微碼 283
9.3 指令執行詳解 284
9.3.1 mov指令 285
9.3.2 add指令 286
9.3.3 jnz指令 288
9.3.4 loop指令 289
9.4 RISC還是CISC:通過執行更多更快的指令來提高性能 290
9.5 提高處理速度的關鍵:並行 291
9.5.1 功能單元 294
9.5.2 預取佇列 296
9.5.3 影響預取佇列性能的情況 299
9.5.4 同時執行多條指令的流水線 299
9.5.5 指令快取:提供多條記憶體訪問通路 304
9.5.6 流水線冒險 306
9.5.7 超標量運算:並行執行指令 308
9.5.8 亂序執行 310
9.5.9 暫存器重命名 310
9.5.10 甚長指令字型繫結構 312
9.5.11 並行處理 312
9.5.12 多處理 313
9.6 更多信息 315
10 指令集體系結構 316
10.1 指令集設計的重要性 317
10.2 指令設計的基本目標 318
10.2.1 操作碼的長度選擇 320
10.2.2 規劃未來 322
10.2.3 選擇指令 322
10.2.4 分配指令操作碼 323
10.3 假想處理器Y86 324
10.3.1 Y86的限制 324
10.3.2 Y86指令 325
10.3.3 Y86的定址模式 327
10.3.4 Y86指令編碼 327
10.3.5 Y86指令編碼示例 330
10.3.6 擴展Y86指令集 335
10.4 80x86 指令編碼 336
10.4.1 指令操作碼的編碼 339
10.4.2 add指令編碼的例子 346
10.4.3 x86的立即(常量)運算元編碼 351
10.4.4 8位、16位和32位運算元的編碼 352
10.4.5 64位運算元編碼 353
10.4.6 指令的替代編碼 353
10.5 指令集設計對程式設計師的意義 354
10.6 更多信息 354
11 記憶體體系結構與組織 355
11.1 記憶體層次結構 355
11.2 記憶體層次結構的工作原理 359
11.3 記憶體子系統的性能差距 360
11.4 快取體系結構 362
11.4.1 直接映射快取 364
11.4.2 全相聯快取 365
11.4.3 n路組相聯快取 365
11.4.4 快取行置換策略 367
11.4.5 快取寫入策略 368
11.4.6 快取使用與軟體 369
11.5 NUMA與外設 370
11.6 虛擬記憶體、記憶體保護與分頁 370
11.7 編寫理解記憶體層次結構的軟體 375
11.8 運行時的記憶體結構 376
11.8.1 靜態對象與動態對象,綁定與生命期 378
11.8.2 代碼段、唯讀數據段與常量段 379
11.8.3 靜態變數段 380
11.8.4 存儲變數段 380
11.8.5 棧 381
11.8.6 堆與動態記憶體分配 381
11.9 更多信息 388
12 輸入與輸出 389
12.1 連線CPU與外界 389
12.2 連線埠和系統連線的其他方式 393
12.3 輸入/輸出機制 394
12.3.1 記憶體映射輸入/輸出 395
12.3.2 I/O映射輸入/輸出 396
12.3.3 直接記憶體訪問 396
12.4 輸入/輸出速度等級 397
12.5 系統匯流排與數據傳輸速率 398
12.5.1 PCI匯流排的性能 400
12.5.2 ISA匯流排的性能 401
12.5.3 AGP匯流排 401
12.6 緩衝 402
12.7 握手 403
12.8 I/O連線埠逾時 404
12.9 中斷與輪詢式I/O 405
12.10 保護模式操作與設備驅動程式 406
12.10.1 設備驅動模型 407
12.10.2 與設備驅動程式通信 408
12.11 更多信息 409
13 計算機外設匯流排 410
13.1 小型計算機系統接口 410
13.1.1 限制 411
13.1.2 改進 412
13.1.3 SCSI協定 413
13.1.4 SCSI的優點 415
13.2 IDE/ATA接口 416
13.2.1 SATA接口 417
13.2.2 光纖通道 418
13.3 通用串列匯流排 418
13.3.1 USB設計 418
13.3.2 USB性能 420
13.3.3 USB傳輸的類型 421
13.3.4 USB-C 423
13.3.5 USB設備驅動程式 424
13.4 更多信息 425
14 大容量存儲設備與檔案系統 426
14.1 磁碟驅動器 426
14.1.1 軟碟驅動器 427
14.1.2 硬碟驅動器 427
14.1.3 RAID系統 433
14.1.4 光碟機 435
14.1.5 CD、DVD與藍光碟機動器 436
14.2 磁帶驅動器 438
14.3 快閃記憶體 439
14.4 RAM盤 441
14.5 固態硬碟 442
14.6 混合硬碟 443
14.7 大容量存儲設備上的檔案系統 443
14.7.1 順序檔案系統 444
14.7.2 高效的檔案分配策略 445
14.8 編寫操作大容量存儲設備數據的軟體 454
14.8.1 檔案訪問的性能 454
14.8.2 同步與異步I/O 456
14.8.3 I/O類型的影響 457
14.8.4 記憶體映射檔案 457
14.9 更多信息 459
15 豐富多彩的輸入/輸出設備 460
15.1 探索特定PC上的外設 460
15.1.1 鍵盤 461
15.1.2 標準PC並口 462
15.1.3 串口 464
15.2 滑鼠、觸控板及其他定點設備 465
15.3 操縱桿與遊戲控制器 466
15.4 音效卡 467
15.4.1 音頻接口外設如何產生聲音 468
15.4.2 音頻與MIDI檔案格式 470
15.4.3 音頻設備編程 471
15.5 更多信息 472
後記:運用底層語言思想,編寫高級語言代碼 473
附錄B 相關內容 334
附錄C 人物清單 337
附錄D 致謝
作者簡介
Randall Hyde 著有《彙編語言藝術》和《編程卓 越之道》第一卷、第二卷、第三卷(均由 No Starch 出版社出版),以及Using 6502 Assembly Language和P-Source(均由 Datamost 出版社出版),合著有Microsoft Macro Assembler 6.0 Bible(由 The Waite Group 出版社出版)。過去40年,Hyde 作為嵌入式軟/硬體工程師,為核反應堆、交通控制系統及其他消費電子設備開發過儀表工具。他還在加州州立理工大學波莫納分校和加州大學河濱分校教授計算機科學這門課。
譯者簡介
覃宇,Thoughtworks諮詢師/套用架構專家,12年軟體開發經驗,移動套用開發專家,作為架構師和技術教練專注於輔導客戶團隊改進持續交付實踐。譯有《Kotlin實戰》、《領域驅動設計精粹》、《Serverless架構:無伺服器套用與AWS Lambda》和《雲原生安全與DevOps保障》;合著有《代碼管理核心技術及實踐》。