電腦組成原理(基於x86-64架構) Introduction to Computer Organization: An Under the Hood Look at Hardware and x86-64 Assembly

[美]羅伯特·G.普蘭茨(Robert G. Plantz)

  • 電腦組成原理(基於x86-64架構)-preview-1
  • 電腦組成原理(基於x86-64架構)-preview-2
電腦組成原理(基於x86-64架構)-preview-1

商品描述

瞭解電腦軟硬件的工作原理可以為理解復雜代碼打下堅實的基礎,從而提升對代碼的控制力。本書圍繞如何將高級語言代碼翻譯成匯編語言、操作系統硬件資源管理、數據的編碼、硬件的十進制數據處理、程序代碼和機器代碼等主題,解釋了現代電腦的工作原理;從內存組織、二進制邏輯和數據類型等基本概念開始,逐步探討它們在匯編語言層面的實現方式。全書共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