本書共三部分。第 一 部分介紹了計算機體系結(jié)構(gòu)的基本內(nèi)容;第二部分介紹指令集體系結(jié)構(gòu),這是本書的核心,包括指令集的概念、計算機體系結(jié)構(gòu)的一些重要問題,ARM系列微處理器,處理器適應視頻編輯和現(xiàn)代多媒體應用的方法;第三部分介紹計算機是如何工作的,以及它在內(nèi)部是如何組織的。
21世紀是科學和技術奇跡頻出的時代。計算機已經(jīng)做到了人們期望它做到的一切——甚至更多。生物工程解開了細胞的秘密,使科學家能夠合成10年前無法想象的新藥。納米技術讓人們有機會窺探微觀世界,將計算機革命與原子工程結(jié)合在一起創(chuàng)造出的納米機器人,也許有一天能夠植人人體,修復人體內(nèi)部的創(chuàng)傷。普適計算帶來了手機、MP3播放器和數(shù)碼相機,使人們彼此之間能夠通過Internet保持聯(lián)系。計算機是幾乎所有現(xiàn)代技術的核心。本書將闡述計算機是如何工作的。
從20世紀50年代起大學就開始教授這門被稱為計算的學科了。一開始,大型機主導了計算,這個學科包括對計算機本身、控制計算機的操作系統(tǒng)、語言和它們的編譯器、數(shù)據(jù)庫以及商業(yè)計算等的研究。此后,計算的發(fā)展呈指數(shù)增長,到現(xiàn)在已包含多個不同的領域,任何一所大學都不可能完全覆蓋這些領域。人們不得不將注意力集中在計算的基本要素上。這一學科的核心在于機器本身:計算機。當然,作為一個理論概念,計算可以脫離計算機而獨立存在。實際上,在20世紀三四十年代計算機革命開始之前,人們已經(jīng)進行了相當多的關于計算機的科學理論基礎的研究工作。然而,計算在過去40年里的發(fā)展方式與微處理器的崛起緊密聯(lián)系在一起。如果人們無法擁有價格非常便宜的計算機,Internet也無法按照它已有的軌跡取得成功。
由于計算機本身對計算的發(fā)展及其發(fā)展方向產(chǎn)生了巨大影響,在計算的課程體系中包含一門有關計算機如何工作的課程是非常合理的。大學里計算機科學或計算機工程方向的培養(yǎng)方案中都會有這樣一門課程。實際上,專業(yè)和課程的認證機構(gòu)都將計算機體系結(jié)構(gòu)作為一項核心要求。比如,計算機體系結(jié)構(gòu)就是IEEE計算機協(xié)會和ACM聯(lián)合發(fā)布的計算學科課程體系的中心內(nèi)容。
介紹計算機具體體現(xiàn)與實現(xiàn)的課程有各種各樣的名字。有人將它們叫作硬件課,有人管它們叫作計算機體系結(jié)構(gòu),還有人把它們叫作計算機組成(以及它們之間的各種組合)。本書用計算機體系結(jié)構(gòu)表示這門研究計算機設計方法和運行方式的課程。當然,我會解釋為什么這門課程有那么多不同的名字,并會指出可以用不同的方式來看待計算機。
與計算機科學的所有領域一樣,計算機體系結(jié)構(gòu)也隨著指令集設計、指令級并行(ILP)、Cache緩存技術、總線系統(tǒng)、猜測執(zhí)行、多核計算等技術的發(fā)展而飛速進步。本書將討論所有這些話題。
計算機體系結(jié)構(gòu)是計算機科學的基石。例如,計算機性能在今天的重要性超過了以往任何時候,為了做出最佳選擇,即便是那些購買個人電腦的用戶也必須了解計算機系統(tǒng)的結(jié)構(gòu)。
盡管絕大多數(shù)學生永遠不會設計一臺新的計算機,但今天的學生卻需要比他們的前輩更全面地了解計算機。雖然學生們不必是合格的匯編語言程序員,但他們一定要理解總線、接口、Cache和指令系統(tǒng)是如何決定計算機系統(tǒng)的性能的。
而且,理解計算機體系結(jié)構(gòu)會使學生能夠更好地學習計算機科學的其他領域。例如,指令系統(tǒng)的知識就能使學生更好地理解編譯器的運行機制。
寫作這本書的動機源于我在提賽德大學(universityofTeesside)講授計算機體系結(jié)構(gòu)中級課程的經(jīng)歷。我沒有按照傳統(tǒng)方式授課,而是講授了那些能夠最好地體現(xiàn)計算機體系結(jié)構(gòu)偉大思想的內(nèi)容。在這門課程里,我講授了一些強調(diào)計算機科學整體概念的主題,對學生的操作系統(tǒng)和C語言課程均有不小的幫助。這門課非常成功,特別是在激發(fā)學生的學習動力方面。
任何編寫計算機體系結(jié)構(gòu)教材的人必須知道這門課會在3個不同的系講授:電子工程(EE),電子與計算機工程(EcE),計算機科學(cs)。這些系有自己的文化,也會從各自的角度看待計算機體系結(jié)構(gòu)。電子工程系和電子與計算機工程系會關注電子學以及計算機的每個部件是如何工作的。面向這兩個系的教材會將重點放在門、接口、信號和計算機組成上。而計算機科學系的學生大都沒有足夠的電子學知識背景,因此很難對那些強調(diào)電路設計的教材感興趣。實際上,計算機科學系更強調(diào)底層的處理器體系結(jié)構(gòu)與高層的計算機科學抽象之間的關系。
盡管要寫出一本能夠同時滿足電子工程系、電子與計算機工程系和計算機科學系的教材幾乎是不可能的,但本書進行了有效的折中,它為電子工程系和電子與計算機工程系提供了足夠的門級和部件級的知識,而這些內(nèi)容也沒有高深到使計算機科學系的學生望而卻步的程度。
本科計算機體系結(jié)構(gòu)課可在三個不同層次上講授:介紹性的、中級的和高級的。有些學校會講授全部三個層次的內(nèi)容,有些學校則將這些內(nèi)容壓縮為兩個層次,還有一些學校只進行介紹。本書面向那些學習第一層次和第二層次計算機體系結(jié)構(gòu)課的學生,以及那些希望了解微處理器體系結(jié)構(gòu)當前進展的職業(yè)工程師。學習本書的唯一前提條件是讀者應了解高級語言(如C)的基本原理和基本的代數(shù)知識。
艾倫·克萊門茨(Alan Clements)國際著名的計算機體系結(jié)構(gòu)教育的推動者和踐行者。他于1 997年獲得英國拉夫堡大學(Loughborough University)博士學位,隨后加入提賽德大學(University of Teesside)計算機科學系。在20世紀70~80年代,他編寫了兩本計算機體系結(jié)構(gòu)領域的重要教材:《計算機硬件原理》(The Principles of Computer Hardware)和《微處理器系統(tǒng)設計》(Microprocessor Systems Design)。
2001年,他擔任了計算機學會國際學生競賽(CSIDC)主席,并于同年獲得英國國家教學獎(National Teaching Fellowship),這是英國高等教育的zui高獎項。由于在計算機體系結(jié)構(gòu)教育方面的貢獻,他于是2002年獲得IEEE CS本科教學獎,2006年獲得TEEE CS泰勒布斯教育獎(Taylor LBooth award)。2009年被選為IEEE Fellow。他在IEEE計算機學會擔任了多個職務,并積極參加課程體系設計,撰寫了關于未來計算機體系結(jié)構(gòu)教育的論文,參加了CS/ACM 2001計算課程體系的編寫和制定工作。2010烏Alan Clements從全職教學崗位退休。
目 錄
Computer Organization and Architecture: Themes and Variations
出版者的話
譯者序
前言
本書導讀
作者簡介
第一部分 起始篇
第1章 計算機系統(tǒng)體系結(jié)構(gòu) 4
1.1 什么是計算機系統(tǒng)體系結(jié)構(gòu) 7
1.2 體系結(jié)構(gòu)和組成 11
1.2.1 計算機系統(tǒng)和技術 14
1.2.2 計算機體系結(jié)構(gòu)在計算機科學中的地位 14
1.3 計算機的發(fā)展 16
1.3.1 機械計算機 17
1.3.2 機電式計算機 19
1.3.3 早期的電子計算機 19
1.3.4 微機和PC革命 20
1.3.5 摩爾定律和進步的歷程 21
1.3.6 存儲技術發(fā)展 22
1.3.7 普適計算 23
1.3.8 多媒體計算機 23
1.4 存儲程序計算機 24
1.4.1 問題描述 24
1.4.2 解決方法 24
1.4.3 構(gòu)造一個算法 26
1.4.4 計算機需要通過什么來解決問題 27
1.4.5 存儲器 29
1.5 存儲程序的概念 31
1.6 計算機系統(tǒng)概覽 35
1.6.1 存儲層次 35
1.6.2 總線 37
1.7 現(xiàn)代計算 39
本章小結(jié) 39
習題 40
第2章 計算機算術 42
2.1 數(shù)據(jù)是什么 43
2.1.1 位與字節(jié) 43
2.1.2 位模式 44
2.2 數(shù)字 48
2.2.1 位置記數(shù)法 48
2.3 二進制運算 49
2.4 有符號整數(shù) 52
2.4.1 符號及值表示法 52
2.4.2 二進制補碼運算 53
2.5 乘除法簡介 55
2.5.1 移位運算 55
2.5.2 無符號二進制乘法 56
2.5.3 快速乘法 57
2.5.4 除法 59
2.6 浮點數(shù) 63
2.6.1 IEEE浮點數(shù) 64
2.7 浮點運算 68
2.8 浮點運算和程序員 70
2.8.1 浮點運算中的誤差傳播 71
2.8.2 生成數(shù)學函數(shù) 72
本章小結(jié) 74
習題 74
第二部分 指令集體系結(jié)構(gòu)
第3章 體系結(jié)構(gòu)與組成 79
3.1 存儲程序計算機 79
3.1.1 擴展處理器:常量處理 84
3.1.2 擴展處理器:流控制 85
3.2 ISA的組成 93
3.2.1 寄存器 94
3.2.2 尋址方式概述 96
3.2.3 指令格式 98
3.2.4 操作碼與指令 99
3.3 ARM指令集體系結(jié)構(gòu) 101
3.3.1 ARM寄存器集 103
3.3.2 ARM指令集 103
3.4 ARM匯編語言 104
3.4.1 ARM程序結(jié)構(gòu) 105
3.4.2 匯編器的實際考慮因素 107
3.4.3 偽指令 110
3.5 ARM數(shù)據(jù)處理指令 112
3.5.1 算術指令 113
3.5.2 位操作 116
3.5.3 移位操作 117
3.5.4 指令編碼——洞察ARM體系結(jié)構(gòu) 121
3.6 ARM的流控制指令 121
3.6.1 無條件分支 122
3.6.2 條件分支 122
3.6.3 測試與比較指令 123
3.6.4 分支與循環(huán)結(jié)構(gòu) 124
3.6.5 條件執(zhí)行 124
3.7 ARM尋址方式 126
3.7.1 立即數(shù)尋址 127
3.7.2 寄存器間接尋址 129
3.7.3 帶偏移量的寄存器間接尋址 131
3.7.4 ARM的自動前索引尋址方式 134
3.7.5 ARM的自動后索引尋址方式 136
3.7.6 程序計數(shù)器相對尋址 136
3.7.7 ARM的load與store指令編碼 136
3.8 子程序調(diào)用與返回 138
3.8.1 ARM對子程序的支持 139
3.8.2 條件子程序調(diào)用 141
3.9 ARM代碼實例 141
3.9.1 計算絕對值 141
3.9.2 字節(jié)操作與拼接 141
3.9.3 字節(jié)逆轉(zhuǎn) 142
3.9.4 乘以2n-1或2n+1 142
3.9.5 多條件的使用 143
3.9.6 只用一條指令 143
3.9.7 實現(xiàn)多段程序 143
3.9.8 簡單位級邏輯操作 144
3.9.9 十六進制字符轉(zhuǎn)換 144
3.9.10 輸出十六進制字符 144
3.9.11 打印橫幅 145
3.10 子程序與棧 145
3.10.1 子程序調(diào)用與返回 147
3.10.2 子程序嵌套 148
3.10.3 葉子程序 150
3.11 數(shù)據(jù)的大小與排列 150
3.11.1 數(shù)據(jù)組織與端格式 150
3.11.2 數(shù)據(jù)組織和ARM 152
3.11.3 塊移動指令 156
3.12 整合——將所有內(nèi)容放在一起 160
本章小結(jié) 163
習題 163
第4章 指令集體系結(jié)構(gòu)——廣度和深度 168
4.1 數(shù)據(jù)存儲和棧 170
4.1.1 存儲和棧 172
4.1.2 通過棧傳遞參數(shù) 179
4.2 特權(quán)模式和異常 187
4.3 MIPS:另一種RISC 190
4.3.1 MIPS數(shù)據(jù)處理指令 193
4.4 數(shù)據(jù)處理與數(shù)據(jù)傳送 195
4.4.1 不可見的交換指令 198
4.4.2 雙精度移位 199
4.4.3 壓縮和解壓縮指令 200
4.4.4 邊界測試 201
4.4.5 位字段數(shù)據(jù) 202
4.4.6 循環(huán) 206
4.5 存儲器間接尋址 207
4.6 壓縮代碼、RISC、Thumb和MIPS16 213
4.6.1 Thumb指令集體系結(jié)構(gòu) 214
4.6.2 MIPS16 219
4.7 變長指令 220
本章小結(jié) 224
習題 224
第5章 計算機體系結(jié)構(gòu)與多媒體 229
5.1 高性能計算應用 230
5.1.1 圖像處理 233
5.2 多媒體的影響——重新使用CISC 243
5.3 SIMD處理簡介 246
5.3.1 SIMD技術的應用 254
5.4 流擴展和SIMD技術的發(fā)展 259
5.4.1 浮點軟件擴展 261
5.4.2 Intel的第三層多媒體擴展 263
5.4.3 Intel SSE3和SSE4指令 264
5.4.4 ARM系列處理器的多媒體
指令 265
本章小結(jié) 267
習題 267
第三部分 組成和效能
第6章 處理器控制 272
6.1 通用數(shù)字處理器 274
6.1.1 微程序 277
6.1.2 生成微操作 282
6.2 RISC的組成 286
6.2.1 寄存器–寄存器數(shù)據(jù)通路 289
6.2.2 單周期直通計算機的控制 292
6.3