內容簡介
各位程式設計師一定希望自己編寫的代碼是能讓老闆讚賞、滿意的代碼;是能讓客戶樂意掏錢購買的代碼;是能讓使用者順利使用的代碼;是能讓同行欣賞讚譽的代碼;是能讓自己引以為豪的卓越代碼。
本書作者為希望能編寫出卓越代碼的人提供了自己積累的關於卓越編程的真知灼見。它彌補了計算機科學和工程課程中被忽略的一個部分——底層細節,而這正是構建卓越代碼的基石。具體內容包括:計算機數據表示法,二進制數學運算與位運算,記憶體組織與內存訪問,數據類型及其表示,布爾邏輯與數字設計,CPU體系結構,CPU指令集的體系結構,記憶體體系與記憶體組織,計算機系統如何與外界通信等。
目錄
1 編寫卓越代碼須知.
1.1 編程卓越之道系列 1
1.2 本卷內容 3
1.3 本卷所做的假設 5
1.4 卓越代碼的各項特徵 6
1.5 本卷涉及的環境 7
1.6 獲取更多信息 8
2 數值表示
2.1 什麼是數 10
2.2 計數系統(numbering system) 11
2.2.1 十進制位值計數系統 11
2.2.2 進制(基數) 12
2.2.3 二進制計數系統 13
2.2.4 十六進制計數系統 15
2.2.5 八進制(基數為8)計數系統 18
2.3 數/字元串轉換 19
2.4 數的內部表示 21
2.4.1 位(bits) 21
2.4.2 位串 22
2.5 有符號數與無符號數 24
.2.6 二進制數一些有用的特性 25
2.7 符號擴展,零擴展,以及縮減 27
2.8 飽和操作(saturation) 30
2.9 二進制編碼的十進制(bcd)表示法 31
2.10 定點表示法 33
2.11 比例數格式(scaled numeric formats) 35
2.12 有理數表示法 38
2.13 獲取更多信息 38
3 二進制算術與位運算
3.1 二進制數與十六進制數的算術運算 39
3.1.1 二進制加法 40
3.1.2 二進制減法 41
3.1.3 二進制乘法 42
3.1.4 二進制除法 43
3.2 位邏輯運算 46
3.3 二進制數和位串(bit string)的邏輯運算 47
3.4 有用的位運算 48
3.4.1 使用與運算檢測位串的各個位 48
3.4.2 使用與運算來檢測一組位是零/非零 49
3.4.3 比較一個位串中的一組位 49
3.4.4 使用邏輯與創建模-n計數器(modulo-n counters) 51
3.5 移位(shift)與循環移位(rotate) 52
3.6 位域與打包(packed)數據 55
3.7 打包與解包數據 60
3.8 獲取更多信息 64
4.1 浮點運算簡介 66
4.2 ieee浮點數格式 71
4.2.1 單精度浮點格式 72
4.2.2 雙精度浮點格式 74
4.2.3 擴展精度浮點格式 74
4.3 規格化(normalization)與反向規格化(denormalized)數 75
4.4 捨入(rounding) 77
4.5 特殊的浮點數 78
4.6 浮點異常 79
4.7 浮點運算 80
4.7.1 浮點表示 80
4.7.2 浮點加法與減法 81
4.7.3 浮點乘法與除法 92
4.8 獲取更多信息 100
5 字元表示法
5.1 字元數據 104
5.1.1 ascii字元集 104
5.1.2 ebcdic字元集 107
5.1.3 雙位元組字元集 108
5.1.4 unicode字元集 109
5.2 字元串 110
5.2.1 字元串格式 111
5.2.2 字元串類型:靜態,偽動態,以及動態字元串 116
5.2.3 字元串引用計數 117
5.2.4 delphi/kylix字元串 118
5.2.5 創建你自己的字元串格式 119
5.3 字元集合 119
5.3.1 字元集合的冪集表示法 120
5.3.2 字元集合的列表表示法 120
5.4設計你自己的字元集 121
5.4.1 設計一種高效的字元集 122
5.4.2 為數字分組字元碼 124
5.4.3 分組字母字元 124
5.4.4 比較字母字元 126
5.4.5 其他字元分組 128
5.5 獲取更多信息 131
6 記憶體組織與訪問
6.1 基本的系統組成部分 134
6.1.1 系統匯流排 134
6.1.2 地址匯流排 135
6.1.3 控制匯流排 136
6.2 記憶體物理組織 137
6.2.1 8 位地址匯流排 139
6.2.2 16位數據匯流排 140
6.2.3 32位數據匯流排 142
6.2.4 64位匯流排 143
6.2.5 在非80x86處理器上訪問小數據單位 143
6.3 大端組織與小端組織 144
6.4 系統時鐘 149
6.4.1 記憶體訪問與系統時鐘 151
6.4.2 等待狀態 152
6.4.3 高速快取記憶體 153
6.5 cpu記憶體訪問 157
6.5.1 直接記憶體定址模式 158
6.5.2 間接定址模式 158
6.5.3 變址定址模式 159
6.5.4 比例變址定址模式 160
6.6 獲取更多信息 160
7 複合數據類型與記憶體對象
7.1 指針類型 162
7.1.1 指針的實現 163
7.1.2 指針與動態記憶體分配 164
7.1.3 指針操作與指針運算 164
7.2 數組 169
7.2.1 數組聲明 169
7.2.2 數組在記憶體中的表示 172
7.2.3 訪問數組元素 173
7.2.4 多維數組 174
7.3 記錄/結構 181
7.3.1 pascal/delphi中的記錄 181
7.3.2 c/c++中的記錄 182
7.3.3 hla中的記錄 182
7.3.4 記錄的記憶體存儲 183
7.4 判別式聯合 185
7.4.1 c/c++中的聯合 186
7.4.2 pascal/delphi/kylix中的聯合 186
7.4.3 hla中的聯合 187
7.4.4 聯合的記憶體存儲 187
7.4.5 聯合的其他用途 188
7.5 獲取更多信息 189
8 布爾邏輯與數字設計
8.1 布爾代數 192
8.1.1 布爾運算符 192
8.1.2 布爾代數的公理 192
8.1.3 布爾運算符優先權 194
8.2 布爾函式與真值表 194
8.3 函式號 197
8.4 布爾表達式的代數運算 198
8.5 標準型 199
8.5.1最小項之和標準型與真值表 200
8.5.2 使用代數方法得到最小項之和標準型 202
8.5.3 最大項之積標準型 203
8.6 布爾函式化簡 204
8.7 但是,這些和計算機又有什麼關係呢? 212
8.7.1 電子線路與布爾函式的對應 213
8.7.2 組合電路 214
8.7.3 時序與鍾控邏輯(sequential and clocked logic) 220
8.8 獲取更多信息 224
9 cpu體系結構
9.1 cpu設計基礎 225
9.2指令解碼與執行:隨機邏輯與微碼 228
9.3 指令執行詳解 229
9.3.1 mov指令 230
9.3.2 add指令 232
9.3.3jnz指令 234
9.3.4 loop指令 234
9.4 並行——提高處理速度的關鍵 235
9.4.1 預取佇列 238
9.4.2 妨礙預取佇列性能的情況 242
9.4.3 流水線操作——重疊執行多條指令 243
9.4.4 指令高速快取——提供訪問記憶體的多條通路 247
9.4.5 流水線相關(pipeline hazards) 249
9.4.6 超標量運算——並行執行指令 251
9.4.7亂序執行(out-of-order execution) 253
9.4.8暫存器重命名253
9.4.9 甚長指令字(VLIW)體系結構 255
9.4.10 並行處理 255
9.4.11 多處理 257
9.5 獲取更多信息 258
10 指令集體系結構
10.1 指令集設計的重要性 260
10.2指令設計基本目標 261
10.2.1 選擇指令長度263
10.2.2 規劃未來 265
10.2.3 選擇指令 266
10.2.4 給指令指派操作碼 266
10.3 y86假想處理器 267
10.3.1 y86的限制 268
10.3.2 y86指令 268
10.3.3 y86的定址模式 270
10.3.4 y86指令編碼 271
10.3.5 y86指令編碼舉例 274
10.3.6 擴展y86指令集 278
10.4 80x86指令編碼 279
10.4.1 編碼指令操作碼 281
10.4.2 add指令編碼的例子 287
10.4.3 編碼立即運算元 291
10.4.4 8,16,與32位運算元編碼 292
10.4.5 指令的替代編碼(alternate encoding) 292
10.5 指令集設計對程式設計師的意義 293
10.6 獲取更多信息 293
11 記憶體體系結構與組織
11.1 記憶體層次結構 295
11.2 記憶體層次結構是如何工作的 298
11.3 記憶體子系統的相對性能 300
11.4 高速快取體系結構 302
11.4.1 直接映射高速快取 303
11.4.2 全相聯高速快取 304
11.4.3 n路組相聯高速快取 304
11.4.4高速快取方案與數據訪問類型的匹配 305
11.4.5 快取線替換策略 306
11.4.6 寫數據到記憶體中 307
11.4.7 高速快取使用與軟體 308
11.5 虛存,保護,以及頁面調度 309
11.6 顛簸 312
11.7 numa與外圍設備 313
11.8 編寫理解記憶體層次結構的軟體 314
11.9 運行時記憶體組織 316
11.9.1 靜態與動態對象,綁定,以及生命期 317
11.9.2 代碼,唯讀,以及常量段 319
11.9.3 靜態變數段 319..
11.9.4 未初始化存儲(bss)段 319
11.9.5 棧段 320
11.9.6 堆段與動態記憶體分配 321
11.10 獲取更多信息 328
12 輸入與輸出(i/o)
12.1 將cpu與外界相連 330
12.2 將連線埠連線到系統的其他方式 333
12.3 i/o機制 334
12.3.1 記憶體映射輸入輸出 334
12.3.2 輸入輸出與高速快取 335
12.3.3 i/o映射輸入/輸出 335
12.3.4直接記憶體訪問(dma) 336
12.4 輸入輸出速度等級 337
12.5 系統匯流排與數據傳輸率 338
12.5.1 pci匯流排的性能 339
12.5.2 isa匯流排的性能 340
12.5.3 agp匯流排 341
12.6 緩衝 341
12.7 握手 342
12.8 i/o連線埠的逾時 343
12.9 中斷與輪詢方式i/o 344
12.10 保護模式操作與設備驅動程式 345
12.10.1 設備驅動程式(device drivers) 346
12.10.2 與設備驅動程式以及“檔案”通信 347
12.11 深入研究各種pc外設 347
12.12 鍵盤 348
12.13 標準pc並口 349
12.14 串口 351
12.15 磁碟驅動器 352
12.15.1 軟碟驅動器 352
12.15.2 硬碟驅動器 352
12.15.3 raid系統 358
12.15.4 zip與其他光讀軟碟驅動器 359
12.15.5 光碟機(optical drive) 359
12.15.6 cd-rom,cd-r,cd-r/w,dvd,dvd-r,
dvd-ram與dvd-r/w驅動器 360
12.16 磁帶驅動器 362
12.17 快閃記憶體 363
12.18 ram盤與半導體盤 365
12.19 scsi設備與控制器 367
12.20 ide/ata接口 372
12.21 大容量存儲設備上的檔案系統 374
12.21.1 使用空閒空間點陣圖(bitmap)管理檔案 377
12.21.2 檔案分配表 378
12.21.3 塊表檔案組織 381
12.22 編寫處理大容量存儲設備上的數據的軟體 385
12.22.1 檔案訪問性能 386
12.22.2 同步與異步i/o 387
12.22.3 i/o類型的影響 388
12.22.4 記憶體映射檔案 389
12.23 通用串列匯流排(usb) 390
12.23.1 usb的設計 390
12.23.2 usb的性能 392
12.23.3 usb傳輸的類型 393
12.23.4 usb設備驅動程式 395
12.24 滑鼠,觸控板與其他指點設備 396
12.25 操縱桿與遊戲控制器 397
12.26 音效卡 399
12.26.1 音頻接口外設如何產生聲音 400
12.26.2 音頻與MIDI檔案格式401
12.26.3 編程處理音頻設備 403
12.27 獲取更多信息 403...
運用底層語言思想
編寫高級語言代碼
a ascii字元集