本書共三部分。第 一 部分介紹了計算機體系結(jié)構(gòu)的基本內(nèi)容;第二部分介紹指令集體系結(jié)構(gòu),這是本書的核心,包括指令集的概念、計算機體系結(jié)構(gòu)的一些重要問題,ARM系列微處理器,處理器適應(yīng)視頻編輯和現(xiàn)代多媒體應(yīng)用的方法;第三部分介紹計算機是如何工作的,以及它在內(nèi)部是如何組織的。
21世紀(jì)是科學(xué)和技術(shù)奇跡頻出的時代。計算機已經(jīng)做到了人們期望它做到的一切——甚至更多。生物工程解開了細(xì)胞的秘密,使科學(xué)家能夠合成10年前無法想象的新藥。納米技術(shù)讓人們有機會窺探微觀世界,將計算機革命與原子工程結(jié)合在一起創(chuàng)造出的納米機器人,也許有一天能夠植人人體,修復(fù)人體內(nèi)部的創(chuàng)傷。普適計算帶來了手機、MP3播放器和數(shù)碼相機,使人們彼此之間能夠通過Internet保持聯(lián)系。計算機是幾乎所有現(xiàn)代技術(shù)的核心。本書將闡述計算機是如何工作的。
從20世紀(jì)50年代起大學(xué)就開始教授這門被稱為計算的學(xué)科了。一開始,大型機主導(dǎo)了計算,這個學(xué)科包括對計算機本身、控制計算機的操作系統(tǒng)、語言和它們的編譯器、數(shù)據(jù)庫以及商業(yè)計算等的研究。此后,計算的發(fā)展呈指數(shù)增長,到現(xiàn)在已包含多個不同的領(lǐng)域,任何一所大學(xué)都不可能完全覆蓋這些領(lǐng)域。人們不得不將注意力集中在計算的基本要素上。這一學(xué)科的核心在于機器本身:計算機。當(dāng)然,作為一個理論概念,計算可以脫離計算機而獨立存在。實際上,在20世紀(jì)三四十年代計算機革命開始之前,人們已經(jīng)進(jìn)行了相當(dāng)多的關(guān)于計算機的科學(xué)理論基礎(chǔ)的研究工作。然而,計算在過去40年里的發(fā)展方式與微處理器的崛起緊密聯(lián)系在一起。如果人們無法擁有價格非常便宜的計算機,Internet也無法按照它已有的軌跡取得成功。
由于計算機本身對計算的發(fā)展及其發(fā)展方向產(chǎn)生了巨大影響,在計算的課程體系中包含一門有關(guān)計算機如何工作的課程是非常合理的。大學(xué)里計算機科學(xué)或計算機工程方向的培養(yǎng)方案中都會有這樣一門課程。實際上,專業(yè)和課程的認(rèn)證機構(gòu)都將計算機體系結(jié)構(gòu)作為一項核心要求。比如,計算機體系結(jié)構(gòu)就是IEEE計算機協(xié)會和ACM聯(lián)合發(fā)布的計算學(xué)科課程體系的中心內(nèi)容。
介紹計算機具體體現(xiàn)與實現(xiàn)的課程有各種各樣的名字。有人將它們叫作硬件課,有人管它們叫作計算機體系結(jié)構(gòu),還有人把它們叫作計算機組成(以及它們之間的各種組合)。本書用計算機體系結(jié)構(gòu)表示這門研究計算機設(shè)計方法和運行方式的課程。當(dāng)然,我會解釋為什么這門課程有那么多不同的名字,并會指出可以用不同的方式來看待計算機。
與計算機科學(xué)的所有領(lǐng)域一樣,計算機體系結(jié)構(gòu)也隨著指令集設(shè)計、指令級并行(ILP)、Cache緩存技術(shù)、總線系統(tǒng)、猜測執(zhí)行、多核計算等技術(shù)的發(fā)展而飛速進(jìn)步。本書將討論所有這些話題。
計算機體系結(jié)構(gòu)是計算機科學(xué)的基石。例如,計算機性能在今天的重要性超過了以往任何時候,為了做出最佳選擇,即便是那些購買個人電腦的用戶也必須了解計算機系統(tǒng)的結(jié)構(gòu)。
盡管絕大多數(shù)學(xué)生永遠(yuǎn)不會設(shè)計一臺新的計算機,但今天的學(xué)生卻需要比他們的前輩更全面地了解計算機。雖然學(xué)生們不必是合格的匯編語言程序員,但他們一定要理解總線、接口、Cache和指令系統(tǒng)是如何決定計算機系統(tǒng)的性能的。
而且,理解計算機體系結(jié)構(gòu)會使學(xué)生能夠更好地學(xué)習(xí)計算機科學(xué)的其他領(lǐng)域。例如,指令系統(tǒng)的知識就能使學(xué)生更好地理解編譯器的運行機制。
寫作這本書的動機源于我在提賽德大學(xué)(universityofTeesside)講授計算機體系結(jié)構(gòu)中級課程的經(jīng)歷。我沒有按照傳統(tǒng)方式授課,而是講授了那些能夠最好地體現(xiàn)計算機體系結(jié)構(gòu)偉大思想的內(nèi)容。在這門課程里,我講授了一些強調(diào)計算機科學(xué)整體概念的主題,對學(xué)生的操作系統(tǒng)和C語言課程均有不小的幫助。這門課非常成功,特別是在激發(fā)學(xué)生的學(xué)習(xí)動力方面。
任何編寫計算機體系結(jié)構(gòu)教材的人必須知道這門課會在3個不同的系講授:電子工程(EE),電子與計算機工程(EcE),計算機科學(xué)(cs)。這些系有自己的文化,也會從各自的角度看待計算機體系結(jié)構(gòu)。電子工程系和電子與計算機工程系會關(guān)注電子學(xué)以及計算機的每個部件是如何工作的。面向這兩個系的教材會將重點放在門、接口、信號和計算機組成上。而計算機科學(xué)系的學(xué)生大都沒有足夠的電子學(xué)知識背景,因此很難對那些強調(diào)電路設(shè)計的教材感興趣。實際上,計算機科學(xué)系更強調(diào)底層的處理器體系結(jié)構(gòu)與高層的計算機科學(xué)抽象之間的關(guān)系。
盡管要寫出一本能夠同時滿足電子工程系、電子與計算機工程系和計算機科學(xué)系的教材幾乎是不可能的,但本書進(jìn)行了有效的折中,它為電子工程系和電子與計算機工程系提供了足夠的門級和部件級的知識,而這些內(nèi)容也沒有高深到使計算機科學(xué)系的學(xué)生望而卻步的程度。
本科計算機體系結(jié)構(gòu)課可在三個不同層次上講授:介紹性的、中級的和高級的。有些學(xué)校會講授全部三個層次的內(nèi)容,有些學(xué)校則將這些內(nèi)容壓縮為兩個層次,還有一些學(xué)校只進(jìn)行介紹。本書面向那些學(xué)習(xí)第一層次和第二層次計算機體系結(jié)構(gòu)課的學(xué)生,以及那些希望了解微處理器體系結(jié)構(gòu)當(dāng)前進(jìn)展的職業(yè)工程師。學(xué)習(xí)本書的唯一前提條件是讀者應(yīng)了解高級語言(如C)的基本原理和基本的代數(shù)知識。
艾倫·克萊門茨(Alan Clements)國際著名的計算機體系結(jié)構(gòu)教育的推動者和踐行者。他于1 997年獲得英國拉夫堡大學(xué)(Loughborough University)博士學(xué)位,隨后加入提賽德大學(xué)(University of Teesside)計算機科學(xué)系。在20世紀(jì)70~80年代,他編寫了兩本計算機體系結(jié)構(gòu)領(lǐng)域的重要教材:《計算機硬件原理》(The Principles of Computer Hardware)和《微處理器系統(tǒng)設(shè)計》(Microprocessor Systems Design)。
2001年,他擔(dān)任了計算機學(xué)會國際學(xué)生競賽(CSIDC)主席,并于同年獲得英國國家教學(xué)獎(National Teaching Fellowship),這是英國高等教育的zui高獎項。由于在計算機體系結(jié)構(gòu)教育方面的貢獻(xiàn),他于是2002年獲得IEEE CS本科教學(xué)獎,2006年獲得TEEE CS泰勒布斯教育獎(Taylor LBooth award)。2009年被選為IEEE Fellow。他在IEEE計算機學(xué)會擔(dān)任了多個職務(wù),并積極參加課程體系設(shè)計,撰寫了關(guān)于未來計算機體系結(jié)構(gòu)教育的論文,參加了CS/ACM 2001計算課程體系的編寫和制定工作。2010烏Alan Clements從全職教學(xué)崗位退休。
目 錄
Computer Organization and Architecture: Themes and Variations
出版者的話
譯者序
前言
本書導(dǎo)讀
作者簡介
第一部分 起始篇
第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)和技術(shù) 14
1.2.2 計算機體系結(jié)構(gòu)在計算機科學(xué)中的地位 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 摩爾定律和進(jìn)步的歷程 21
1.3.6 存儲技術(shù)發(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
習(xí)題 40
第2章 計算機算術(shù) 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 二進(jìn)制運算 49
2.4 有符號整數(shù) 52
2.4.1 符號及值表示法 52
2.4.2 二進(jìn)制補碼運算 53
2.5 乘除法簡介 55
2.5.1 移位運算 55
2.5.2 無符號二進(jìn)制乘法 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ù)學(xué)函數(shù) 72
本章小結(jié) 74
習(xí)題 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 算術(shù)指令 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 十六進(jìn)制字符轉(zhuǎn)換 144
3.9.10 輸出十六進(jìn)制字符 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
習(xí)題 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
習(xí)題 224
第5章 計算機體系結(jié)構(gòu)與多媒體 229
5.1 高性能計算應(yīng)用 230
5.1.1 圖像處理 233
5.2 多媒體的影響——重新使用CISC 243
5.3 SIMD處理簡介 246
5.3.1 SIMD技術(shù)的應(yīng)用 254
5.4 流擴展和SIMD技術(shù)的發(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
習(xí)題 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