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