了解計(jì)算機(jī)軟硬件的工作原理可以為理解復(fù)雜代碼打下堅(jiān)實(shí)的基礎(chǔ),從而提升對代碼的控制力。本書圍繞如何將高級語言代碼翻譯成匯編語言、操作系統(tǒng)硬件資源管理、數(shù)據(jù)的編碼、硬件的十進(jìn)制數(shù)據(jù)處理、程序代碼和機(jī)器代碼等主題,解釋了現(xiàn)代計(jì)算機(jī)的工作原理;從內(nèi)存組織、二進(jìn)制邏輯和數(shù)據(jù)類型等基本概念開始,逐步探討它們在匯編語言層面的實(shí)現(xiàn)方式。全書共21章,涵蓋了數(shù)據(jù)存儲、邏輯門和晶體管、中央處理器、匯編和機(jī)器代碼、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο缶幊痰葍?nèi)容。
本書適合作為高等院校計(jì)算機(jī)組成原理相關(guān)課程的參考教材,也適合有編程基礎(chǔ)的人閱讀。
【實(shí)用性強(qiáng)】著眼于硬件組件和機(jī)器指令,幫助讀者理解計(jì)算機(jī)執(zhí)行代碼時(shí)背后發(fā)生的事情,讓讀者成為更優(yōu)秀、更有信心的程序員。
【案例豐富】經(jīng)過多年課堂實(shí)踐的檢驗(yàn),覆蓋數(shù)據(jù)存儲方式、操作系統(tǒng)管理硬件資源、布爾代數(shù)應(yīng)用等多方面內(nèi)容。
【知識全面】全書共21章,涵蓋數(shù)據(jù)存儲、邏輯門和晶體管、中央處理器、匯編和機(jī)器代碼、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο缶幊痰葍?nèi)容。
【架構(gòu)清晰】大致分為數(shù)學(xué)和邏輯、硬件、軟件3部分,為讀者提供討論概念所需的數(shù)學(xué)語言,介紹構(gòu)建計(jì)算機(jī)的組件,講解軟件如何控制硬件。
羅伯特·G.普蘭茨(Robert G. Plantz)曾為雙子星座號飛船和阿波羅登月艙設(shè)計(jì)電子設(shè)備。他在加利福尼亞大學(xué)伯克利分校獲得電氣工程博士學(xué)位,并在投身教育工作之前擔(dān)任了8年的軟件工程師。他在索諾瑪州立大學(xué)擔(dān)任教授20余年。
第 1章 預(yù)備知識 1
1.1 計(jì)算機(jī)子系統(tǒng) 1
1.2 程序執(zhí)行 2
1.3 編程環(huán)境 3
1.4 小結(jié) 5
第 2章 數(shù)據(jù)存儲格式 6
2.1 描述開關(guān)和開關(guān)組 6
2.1.1 使用位表示開關(guān) 6
2.1.2 表示位組 7
2.1.3 使用十六進(jìn)制數(shù)碼 8
2.2 二進(jìn)制和十進(jìn)制的數(shù)學(xué)等價(jià)性 9
2.2.1 了解位置記數(shù)法 9
2.2.2 將二進(jìn)制數(shù)轉(zhuǎn)換為無符號十進(jìn)制數(shù) 10
2.2.3 將無符號十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù) 11
2.3 在存儲器中存儲數(shù)據(jù) 13
2.3.1 內(nèi)存地址的表示方式 14
2.3.2 字符 15
2.3.3 無符號整數(shù) 17
2.4 使用C語言探究數(shù)據(jù)格式 18
2.4.1 C和C I/O庫 19
2.4.2 編寫并執(zhí)行第 一個C程序 20
2.5 使用調(diào)試器檢查內(nèi)存 22
2.5.1 使用調(diào)試器 23
2.5.2 理解內(nèi)存字節(jié)存儲序 26
2.6 小結(jié) 28
第3章 計(jì)算機(jī)算術(shù) 29
3.1 無符號整數(shù)的加減 29
3.1.1 十進(jìn)制數(shù)字系統(tǒng)的加法 29
3.1.2 十進(jìn)制數(shù)字系統(tǒng)的減法 30
3.1.3 無符號二進(jìn)制整數(shù)的加法和減法 32
3.2 有符號整數(shù)的加減 33
3.2.1 補(bǔ)碼 34
3.2.2 計(jì)算補(bǔ)碼 35
3.2.3 二進(jìn)制有符號整數(shù)的加減 37
3.2.4 整數(shù)編碼的環(huán)性質(zhì) 39
3.3 小結(jié) 41
第4章 布爾代數(shù) 42
4.1 基本布爾運(yùn)算符 42
4.2 布爾表達(dá)式 44
4.3 布爾代數(shù)法則 44
4.3.1 與初等代數(shù)相同的布爾代數(shù)法則 45
4.3.2 與初等代數(shù)不同的布爾代數(shù)法則 46
4.4 布爾函數(shù) 48
4.4.1 規(guī)范和或最小項(xiàng)之和 49
4.4.2 規(guī)范積或最大項(xiàng)之積 50
4.4.3 規(guī)范布爾形式的比較 51
4.5 布爾表達(dá)式最小化 51
4.5.1 最小表達(dá)式 52
4.5.2 使用代數(shù)操作實(shí)現(xiàn)最小化 53
4.5.3 使用卡諾圖進(jìn)行最小化 55
4.6 組合基本布爾運(yùn)算符 61
4.7 小結(jié) 62
第5章 邏輯門 63
5.1 電子學(xué)入門 63
5.1.1 電源和電池 64
5.1.2 無源元件 64
5.2 晶體管 70
5.2.1 MOSFET開關(guān) 70
5.2.2 CMOS開關(guān) 72
5.3 與非門和或非門 74
5.4 作為萬能門的與非門 75
5.5 小結(jié) 76
第6章 組合邏輯電路 77
6.1 兩類邏輯電路 77
6.2 加法器 78
6.2.1 半加器 78
6.2.2 全加器 78
6.2.3 由兩個半加器組成的全加器 79
6.2.4 波動進(jìn)位加法和減法電路 80
6.3 譯碼器 82
6.4 復(fù)用器 85
6.5 可編程邏輯設(shè)備 87
6.5.1 可編程邏輯陣列 87
6.5.2 只讀存儲器 89
6.5.3 可編程陣列邏輯 90
6.6 小結(jié) 91
第7章 時(shí)序邏輯電路 92
7.1 鎖存器 92
7.1.1 使用或非門的SR鎖存器 93
7.1.2 使用與非門的SR鎖存器 94
7.1.3 帶有Enable的SR鎖存器 96
7.1.4 D鎖存器 97
7.2 觸發(fā)器 98
7.2.1 時(shí)鐘 98
7.2.2 D觸發(fā)器 99
7.2.3 T觸發(fā)器 100
7.2.4 JK觸發(fā)器 101
7.3 設(shè)計(jì)時(shí)序邏輯電路 103
7.3.1 設(shè)計(jì)計(jì)數(shù)器 104
7.3.2 設(shè)計(jì)分支預(yù)測器 107
7.4 小結(jié) 110
第8章 存儲器 112
8.1 存儲器層級結(jié)構(gòu) 112
8.1.1 大容量存儲器 113
8.1.2 內(nèi)存 113
8.1.3 緩存 114
8.1.4 寄存器 115
8.2 實(shí)現(xiàn)存儲器硬件 115
8.2.1 4位寄存器 115
8.2.2 移位寄存器 117
8.2.3 寄存器文件 118
8.2.4 讀-寫存儲器 119
8.2.5 靜態(tài)隨機(jī)存取存儲器 120
8.2.6 動態(tài)隨機(jī)存取存儲器 121
8.3 小結(jié) 122
第9章 中央處理單元 123
9.1 CPU概述 123
9.1.1 CPU子系統(tǒng) 123
9.1.2 指令執(zhí)行周期 125
9.2 x86-64寄存器 126
9.2.1 通用寄存器 127
9.2.2 狀態(tài)寄存器 129
9.3 C/C 的整數(shù)數(shù)據(jù)類型和寄存器大小 129
9.4 使用gdb查看CPU寄存器 130
9.5 小結(jié) 135
第 10章 匯編語言編程 137
10.1 編譯C程序 137
10.2 從C到匯編語言 138
10.2.1 我們不會用到的匯編器指令 140
10.2.2 我們會用到的編譯器指令 142
10.3 使用匯編語言創(chuàng)建程序 143
10.3.1 匯編語言概述 144
10.3.2 第 一條匯編語言指令 145
10.3.3 函數(shù)內(nèi)的最小化處理 147
10.3.4 使用gdb學(xué)習(xí)匯編語言 148
10.4 AT&T語法 154
10.5 小結(jié) 155
第 11章 深入main函數(shù) 156
11.1 write和read系統(tǒng)調(diào)用函數(shù) 156
11.2 通過寄存器傳遞參數(shù) 157
11.3 位置無關(guān)代碼 159
11.4 調(diào)用棧 160
11.4.1 棧的概述 160
11.4.2 深入函數(shù)序言和結(jié)語 162
11.5 函數(shù)的局部變量 166
11.5.1 棧內(nèi)變量 166
11.5.2 棧損壞 169
11.6 不使用C運(yùn)行時(shí)環(huán)境 172
11.7 小結(jié) 173
第 12章 剖析指令 174
12.1 機(jī)器碼 174
12.2 指令字節(jié) 175
12.2.1 操作碼字節(jié) 176
12.2.2 ModR/M字節(jié) 176
12.2.3 REX前綴字節(jié) 177
12.3 立即尋址模式 178
12.4 內(nèi)存尋址模式 179
12.4.1 直接內(nèi)存尋址 179
12.4.2 帶有偏移量的寄存器間接尋址 180
12.4.3 帶有索引的寄存器間接尋址 181
12.4.4 SIB字節(jié) 182
12.5 跳轉(zhuǎn)指令 182
12.6 匯編器和鏈接器 184
12.6.1 匯編器 184
12.6.2 鏈接器 185
12.7 小結(jié) 186
第 13章 控制流結(jié)構(gòu) 187
13.1 跳轉(zhuǎn) 187
13.1.1 無條件跳轉(zhuǎn) 187
13.1.2 條件跳轉(zhuǎn) 188
13.2 迭代 189
13.2.1 while循環(huán) 189
13.2.2 for循環(huán) 194
13.2.3 do-while循環(huán) 195
13.3 選擇 197
13.3.1 if條件 197
13.3.2 if-then-else條件 199
13.3.3 switch條件 203
13.4 小結(jié) 207
第 14章 剖析函數(shù) 208
14.1 C語言的變量名作用域 208
14.2 參數(shù)傳遞概述 209
14.3 全局變量 210
14.4 顯式傳遞參數(shù) 213
14.4.1 C語言中的參數(shù)傳遞 214
14.4.2 匯編語言實(shí)現(xiàn) 215
14.5 處理6個以上的參數(shù) 218
14.5.1 將參數(shù)壓入棧 218
14.5.2 直接在棧內(nèi)存儲參數(shù) 222
14.5.3 棧幀用法總結(jié) 225
14.6 靜態(tài)局部變量 227
14.7 小結(jié) 236
第 15章 函數(shù)的特殊用法 237
15.1 遞歸 237
15.2 使用匯編語言訪問CPU特性 243
15.2.1 使用匯編語言編寫的獨(dú)立函數(shù) 243
15.2.2 內(nèi)聯(lián)匯編語言 249
15.3 小結(jié) 251
第 16章 邏輯位、乘法以及除法指令 252
16.1 位掩碼 252
16.1.1 C語言中的位掩碼 253
16.1.2 邏輯指令 255
16.1.3 匯編語言中的位掩碼 256
16.2 移位 259
16.2.1 C語言中的移位操作 259
16.2.2 移位指令 263
16.2.3 匯編語言中的移位操作 264
16.3 乘法 266
16.3.1 C語言中的乘法 267
16.3.2 乘法指令 269
16.3.3 匯編語言中的乘法 271
16.4 除法 274
16.4.1 C語言中的除法 274
16.4.2 除法指令 277
16.4.3 匯編語言中的除法 279
16.5 小結(jié) 283
第 17章 數(shù)據(jù)結(jié)構(gòu) 284
17.1 數(shù)組 284
17.1.1 C語言中的數(shù)組 284
17.1.2 匯編語言中的數(shù)組 289
17.2 記錄 292
17.2.1 C語言中的記錄 292
17.2.2 匯編語言中的記錄 294
17.2.3 在C語言中向其他函數(shù)傳遞記錄 295
17.2.4 在匯編語言中向其他函數(shù)傳遞記錄 301
17.3 小結(jié) 305
第 18章 面向?qū)ο缶幊?306
18.1 C 中的對象 306
18.1.1 使用C 對象 308
18.1.2 定義類成員函數(shù) 311
18.1.3 由編譯器生成構(gòu)造函數(shù)和析構(gòu)函數(shù) 315
18.2 匯編語言中的對象 317
18.3 小結(jié) 322
第 19章 小數(shù) 323
19.1 二進(jìn)制小數(shù) 323
19.2 定點(diǎn)數(shù) 324
19.2.1 當(dāng)小數(shù)部分為2的倒數(shù)冪之和時(shí) 324
19.2.2 當(dāng)小數(shù)部分為十進(jìn)制時(shí) 328
19.3 浮點(diǎn)數(shù) 332
19.3.1 浮點(diǎn)表示 333
19.3.2 IEEE 754浮點(diǎn)數(shù)標(biāo)準(zhǔn) 333
19.3.3 SSE2浮點(diǎn)數(shù)硬件 334
19.3.4 xmm寄存器 335
19.3.5 浮點(diǎn)數(shù)編程 336
19.3.6 浮點(diǎn)算術(shù)誤差 339
19.4 關(guān)于數(shù)值精確性的一些說明 345
19.5 小結(jié) 345
第 20章 輸入/輸出 347
20.1 時(shí)序考量 347
20.1.1 內(nèi)存時(shí)序 347
20.1.2 I/O設(shè)備時(shí)序 348
20.1.3 總線時(shí)序 348
20.2 訪問I/O設(shè)備 349
20.2.1 端口映射I/O 349
20.2.2 內(nèi)存映射I/O 350
20.3 I/O編程 351
20.3.1 輪詢式I/O 351
20.3.2 中斷驅(qū)動I/O 351
20.3.3 直接內(nèi)存訪問 352
20.4 輪詢式I/O編程算法 352
20.4.1 使用C語言實(shí)現(xiàn)UART內(nèi)存映射I/O 353
20.4.2 使用匯編語言實(shí)現(xiàn)UART內(nèi)存映射I/O 358
20.4.3 UART端口映射I/O 361
20.5 小結(jié) 365
第 21章 中斷與異常 366
21.1 特權(quán)級 366
21.2 CPU響應(yīng)中斷或異常 367
21.2.1 外部中斷 368
21.2.2 異常 368
21.2.3 軟件中斷 369
21.3 系統(tǒng)調(diào)用 369
21.3.1 int 0x80軟件中斷 369
21.3.2 syscall指令 371
21.4 小結(jié) 373