電腦組成原理(基於x86-64架構) Introduction to Computer Organization: An Under the Hood Look at Hardware and x86-64 Assembly
[美]羅伯特·G.普蘭茨(Robert G. Plantz)
- 出版商: 人民郵電
- 出版日期: 2025-04-01
- 定價: $719
- 售價: 8.5 折 $611
- 語言: 簡體中文
- 頁數: 373
- ISBN: 7115639604
- ISBN-13: 9787115639608
- 此書翻譯自: Introduction to Computer Organization: A Guide to X86-64 Assembly Language and Gnu/Linux
下單後立即進貨 (約4週~6週)
商品描述
瞭解電腦軟硬件的工作原理可以為理解復雜代碼打下堅實的基礎,從而提升對代碼的控制力。本書圍繞如何將高級語言代碼翻譯成匯編語言、操作系統硬件資源管理、數據的編碼、硬件的十進制數據處理、程序代碼和機器代碼等主題,解釋了現代電腦的工作原理;從內存組織、二進制邏輯和數據類型等基本概念開始,逐步探討它們在匯編語言層面的實現方式。全書共21章,涵蓋了數據存儲、邏輯門和晶體管、中央處理器、匯編和機器代碼、數據結構、面向對象編程等內容。
本書適合作為高等院校電腦組成原理相關課程的參考教材,也適合有編程基礎的人閱讀。
作者簡介
羅伯特·G.普蘭茨(Robert G. Plantz)曾為雙子星座號飛船和阿波羅登月艙設計電子設備。他在加利福尼亞大學伯克利分校獲得電氣工程博士學位,並在投身教育工作之前擔任了8年的軟件工程師。他在索諾瑪州立大學擔任教授20餘年。
目錄大綱
第 1章 預備知識 1
1.1 電腦子系統 1
1.2 程序執行 2
1.3 編程環境 3
1.4 小結 5
第 2章 數據存儲格式 6
2.1 描述開關和開關組 6
2.1.1 使用位表示開關 6
2.1.2 表示位組 7
2.1.3 使用十六進制數碼 8
2.2 二進制和十進制的數學等價性 9
2.2.1 瞭解位置記數法 9
2.2.2 將二進制數轉換為無符號十進制數 10
2.2.3 將無符號十進制數轉換為二進制數 11
2.3 在存儲器中存儲數據 13
2.3.1 內存地址的表示方式 14
2.3.2 字符 15
2.3.3 無符號整數 17
2.4 使用C語言探究數據格式 18
2.4.1 C和C++ I/O庫 19
2.4.2 編寫並執行第 一個C程序 20
2.5 使用調試器檢查內存 22
2.5.1 使用調試器 23
2.5.2 理解內存字節存儲序 26
2.6 小結 28
第3章 電腦算術 29
3.1 無符號整數的加減 29
3.1.1 十進制數字系統的加法 29
3.1.2 十進制數字系統的減法 30
3.1.3 無符號二進制整數的加法和減法 32
3.2 有符號整數的加減 33
3.2.1 補碼 34
3.2.2 計算補碼 35
3.2.3 二進制有符號整數的加減 37
3.2.4 整數編碼的環性質 39
3.3 小結 41
第4章 布爾代數 42
4.1 基本布爾運算符 42
4.2 布爾表達式 44
4.3 布爾代數法則 44
4.3.1 與初等代數相同的布爾代數法則 45
4.3.2 與初等代數不同的布爾代數法則 46
4.4 布爾函數 48
4.4.1 規範和或最小項之和 49
4.4.2 規範積或最大項之積 50
4.4.3 規範布爾形式的比較 51
4.5 布爾表達式最小化 51
4.5.1 最小表達式 52
4.5.2 使用代數操作實現最小化 53
4.5.3 使用卡諾圖進行最小化 55
4.6 組合基本布爾運算符 61
4.7 小結 62
第5章 邏輯門 63
5.1 電子學入門 63
5.1.1 電源和電池 64
5.1.2 無源元件 64
5.2 晶體管 70
5.2.1 MOSFET開關 70
5.2.2 CMOS開關 72
5.3 與非門和或非門 74
5.4 作為萬能門的與非門 75
5.5 小結 76
第6章 組合邏輯電路 77
6.1 兩類邏輯電路 77
6.2 加法器 78
6.2.1 半加器 78
6.2.2 全加器 78
6.2.3 由兩個半加器組成的全加器 79
6.2.4 波動進制加法和減法電路 80
6.3 解碼器 82
6.4 復用器 85
6.5 可編程邏輯設備 87
6.5.1 可編程邏輯陣列 87
6.5.2 只讀存儲器 89
6.5.3 可編程陣列邏輯 90
6.6 小結 91
第7章 時序邏輯電路 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 觸發器 98
7.2.1 時鐘 98
7.2.2 D觸發器 99
7.2.3 T觸發器 100
7.2.4 JK觸發器 101
7.3 設計時序邏輯電路 103
7.3.1 設計計數器 104
7.3.2 設計分支預測器 107
7.4 小結 110
第8章 存儲器 112
8.1 存儲器層級結構 112
8.1.1 大容量存儲器 113
8.1.2 內存 113
8.1.3 緩存 114
8.1.4 寄存器 115
8.2 實現存儲器硬件 115
8.2.1 4位寄存器 115
8.2.2 移位寄存器 117
8.2.3 寄存器文件 118
8.2.4 讀-寫存儲器 119
8.2.5 靜態隨機存取存儲器 120
8.2.6 動態隨機存取存儲器 121
8.3 小結 122
第9章 中央處理單元 123
9.1 CPU概述 123
9.1.1 CPU子系統 123
9.1.2 指令執行周期 125
9.2 x86-64寄存器 126
9.2.1 通用寄存器 127
9.2.2 狀態寄存器 129
9.3 C/C++的整數數據類型和寄存器大小 129
9.4 使用gdb查看CPU寄存器 130
9.5 小結 135
第 10章 匯編語言編程 137
10.1 編譯C程序 137
10.2 從C到匯編語言 138
10.2.1 我們不會用到的匯編器指令 140
10.2.2 我們會用到的編譯器指令 142
10.3 使用匯編語言創建程序 143
10.3.1 匯編語言概述 144
10.3.2 第 一條匯編語言指令 145
10.3.3 函數內的最小化處理 147
10.3.4 使用gdb學習匯編語言 148
10.4 AT&T語法 154
10.5 小結 155
第 11章 深入main函數 156
11.1 write和read系統調用函數 156
11.2 通過寄存器傳遞參數 157
11.3 位置無關代碼 159
11.4 調用棧 160
11.4.1 棧的概述 160
11.4.2 深入函數序言和結語 162
11.5 函數的局部變量 166
11.5.1 棧內變量 166
11.5.2 棧損壞 169
11.6 不使用C運行時環境 172
11.7 小結 173
第 12章 剖析指令 174
12.1 機器碼 174
12.2 指令字節 175
12.2.1 操作碼字節 176
12.2.2 ModR/M字節 176
12.2.3 REX前綴字節 177
12.3 立即尋址模式 178
12.4 內存尋址模式 179
12.4.1 直接內存尋址 179
12.4.2 帶有偏移量的寄存器間接尋址 180
12.4.3 帶有索引的寄存器間接尋址 181
12.4.4 SIB字節 182
12.5 跳轉指令 182
12.6 匯編器和鏈接器 184
12.6.1 匯編器 184
12.6.2 鏈接器 185
12.7 小結 186
第 13章 控制流結構 187
13.1 跳轉 187
13.1.1 無條件跳轉 187
13.1.2 條件跳轉 188
13.2 迭代 189
13.2.1 while循環 189
13.2.2 for循環 194
13.2.3 do-while循環 195
13.3 選擇 197
13.3.1 if條件 197
13.3.2 if-then-else條件 199
13.3.3 switch條件 203
13.4 小結 207
第 14章 剖析函數 208
14.1 C語言的變量名作用域 208
14.2 參數傳遞概述 209
14.3 全局變量 210
14.4 顯式傳遞參數 213
14.4.1 C語言中的參數傳遞 214
14.4.2 匯編語言實現 215
14.5 處理6個以上的參數 218
14.5.1 將參數壓入棧 218
14.5.2 直接在棧內存儲參數 222
14.5.3 棧幀用法總結 225
14.6 靜態局部變量 227
14.7 小結 236
第 15章 函數的特殊用法 237
15.1 遞歸 237
15.2 使用匯編語言訪問CPU特性 243
15.2.1 使用匯編語言編寫的獨立函數 243
15.2.2 內聯匯編語言 249
15.3 小結 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 小結 283
第 17章 數據結構 284
17.1 數組 284
17.1.1 C語言中的數組 284
17.1.2 匯編語言中的數組 289
17.2 記錄 292
17.2.1 C語言中的記錄 292
17.2.2 匯編語言中的記錄 294
17.2.3 在C語言中向其他函數傳遞記錄 295
17.2.4 在匯編語言中向其他函數傳遞記錄 301
17.3 小結 305
第 18章 面向對象編程 306
18.1 C++中的對象 306
18.1.1 使用C++對象 308
18.1.2 定義類成員函數 311
18.1.3 由編譯器生成構造函數和析構函數 315
18.2 匯編語言中的對象 317
18.3 小結 322
第 19章 小數 323
19.1 二進制小數 323
19.2 定點數 324
19.2.1 當小數部分為2的倒數冪之和時 324
19.2.2 當小數部分為十進制時 328
19.3 浮點數 332
19.3.1 浮點表示 333
19.3.2 IEEE 754浮點數標準 333
19.3.3 SSE2浮點數硬件 334
19.3.4 xmm寄存器 335
19.3.5 浮點數編程 336
19.3.6 浮點算術誤差 339
19.4 關於數值精確性的一些說明 345
19.5 小結 345
第 20章 輸入/輸出 347
20.1 時序考量 347
20.1.1 內存時序 347
20.1.2 I/O設備時序 348
20.1.3 總線時序 348
20.2 訪問I/O設備 349
20.2.1 埠映射I/O 349
20.2.2 內存映射I/O 350
20.3 I/O編程 351
20.3.1 輪詢式I/O 351
20.3.2 中斷驅動I/O 351
20.3.3 直接內存訪問 352
20.4 輪詢式I/O編程算法 352
20.4.1 使用C語言實現UART內存映射I/O 353
20.4.2 使用匯編語言實現UART內存映射I/O 358
20.4.3 UART埠映射I/O 361
20.5 小結 365
第 21章 中斷與異常 366
21.1 特權級 366
21.2 CPU響應中斷或異常 367
21.2.1 外部中斷 368
21.2.2 異常 368
21.2.3 軟件中斷 369
21.3 系統調用 369
21.3.1 int 0x80軟件中斷 369
21.3.2 syscall指令 371
21.4 小結 373