本書共三部分。第 一 部分介紹了計(jì)算機(jī)體系結(jié)構(gòu)的基本內(nèi)容;第二部分介紹指令集體系結(jié)構(gòu),這是本書的核心,包括指令集的概念、計(jì)算機(jī)體系結(jié)構(gòu)的一些重要問題,ARM系列微處理器,處理器適應(yīng)視頻編輯和現(xiàn)代多媒體應(yīng)用的方法;第三部分介紹計(jì)算機(jī)是如何工作的,以及它在內(nèi)部是如何組織的。
21世紀(jì)是科學(xué)和技術(shù)奇跡頻出的時(shí)代。計(jì)算機(jī)已經(jīng)做到了人們期望它做到的一切——甚至更多。生物工程解開了細(xì)胞的秘密,使科學(xué)家能夠合成10年前無法想象的新藥。納米技術(shù)讓人們有機(jī)會(huì)窺探微觀世界,將計(jì)算機(jī)革命與原子工程結(jié)合在一起創(chuàng)造出的納米機(jī)器人,也許有一天能夠植人人體,修復(fù)人體內(nèi)部的創(chuàng)傷。普適計(jì)算帶來了手機(jī)、MP3播放器和數(shù)碼相機(jī),使人們彼此之間能夠通過Internet保持聯(lián)系。計(jì)算機(jī)是幾乎所有現(xiàn)代技術(shù)的核心。本書將闡述計(jì)算機(jī)是如何工作的。
從20世紀(jì)50年代起大學(xué)就開始教授這門被稱為計(jì)算的學(xué)科了。一開始,大型機(jī)主導(dǎo)了計(jì)算,這個(gè)學(xué)科包括對(duì)計(jì)算機(jī)本身、控制計(jì)算機(jī)的操作系統(tǒng)、語言和它們的編譯器、數(shù)據(jù)庫以及商業(yè)計(jì)算等的研究。此后,計(jì)算的發(fā)展呈指數(shù)增長,到現(xiàn)在已包含多個(gè)不同的領(lǐng)域,任何一所大學(xué)都不可能完全覆蓋這些領(lǐng)域。人們不得不將注意力集中在計(jì)算的基本要素上。這一學(xué)科的核心在于機(jī)器本身:計(jì)算機(jī)。當(dāng)然,作為一個(gè)理論概念,計(jì)算可以脫離計(jì)算機(jī)而獨(dú)立存在。實(shí)際上,在20世紀(jì)三四十年代計(jì)算機(jī)革命開始之前,人們已經(jīng)進(jìn)行了相當(dāng)多的關(guān)于計(jì)算機(jī)的科學(xué)理論基礎(chǔ)的研究工作。然而,計(jì)算在過去40年里的發(fā)展方式與微處理器的崛起緊密聯(lián)系在一起。如果人們無法擁有價(jià)格非常便宜的計(jì)算機(jī),Internet也無法按照它已有的軌跡取得成功。
由于計(jì)算機(jī)本身對(duì)計(jì)算的發(fā)展及其發(fā)展方向產(chǎn)生了巨大影響,在計(jì)算的課程體系中包含一門有關(guān)計(jì)算機(jī)如何工作的課程是非常合理的。大學(xué)里計(jì)算機(jī)科學(xué)或計(jì)算機(jī)工程方向的培養(yǎng)方案中都會(huì)有這樣一門課程。實(shí)際上,專業(yè)和課程的認(rèn)證機(jī)構(gòu)都將計(jì)算機(jī)體系結(jié)構(gòu)作為一項(xiàng)核心要求。比如,計(jì)算機(jī)體系結(jié)構(gòu)就是IEEE計(jì)算機(jī)協(xié)會(huì)和ACM聯(lián)合發(fā)布的計(jì)算學(xué)科課程體系的中心內(nèi)容。
介紹計(jì)算機(jī)具體體現(xiàn)與實(shí)現(xiàn)的課程有各種各樣的名字。有人將它們叫作硬件課,有人管它們叫作計(jì)算機(jī)體系結(jié)構(gòu),還有人把它們叫作計(jì)算機(jī)組成(以及它們之間的各種組合)。本書用計(jì)算機(jī)體系結(jié)構(gòu)表示這門研究計(jì)算機(jī)設(shè)計(jì)方法和運(yùn)行方式的課程。當(dāng)然,我會(huì)解釋為什么這門課程有那么多不同的名字,并會(huì)指出可以用不同的方式來看待計(jì)算機(jī)。
與計(jì)算機(jī)科學(xué)的所有領(lǐng)域一樣,計(jì)算機(jī)體系結(jié)構(gòu)也隨著指令集設(shè)計(jì)、指令級(jí)并行(ILP)、Cache緩存技術(shù)、總線系統(tǒng)、猜測(cè)執(zhí)行、多核計(jì)算等技術(shù)的發(fā)展而飛速進(jìn)步。本書將討論所有這些話題。
計(jì)算機(jī)體系結(jié)構(gòu)是計(jì)算機(jī)科學(xué)的基石。例如,計(jì)算機(jī)性能在今天的重要性超過了以往任何時(shí)候,為了做出最佳選擇,即便是那些購買個(gè)人電腦的用戶也必須了解計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)。
盡管絕大多數(shù)學(xué)生永遠(yuǎn)不會(huì)設(shè)計(jì)一臺(tái)新的計(jì)算機(jī),但今天的學(xué)生卻需要比他們的前輩更全面地了解計(jì)算機(jī)。雖然學(xué)生們不必是合格的匯編語言程序員,但他們一定要理解總線、接口、Cache和指令系統(tǒng)是如何決定計(jì)算機(jī)系統(tǒng)的性能的。
而且,理解計(jì)算機(jī)體系結(jié)構(gòu)會(huì)使學(xué)生能夠更好地學(xué)習(xí)計(jì)算機(jī)科學(xué)的其他領(lǐng)域。例如,指令系統(tǒng)的知識(shí)就能使學(xué)生更好地理解編譯器的運(yùn)行機(jī)制。
寫作這本書的動(dòng)機(jī)源于我在提賽德大學(xué)(universityofTeesside)講授計(jì)算機(jī)體系結(jié)構(gòu)中級(jí)課程的經(jīng)歷。我沒有按照傳統(tǒng)方式授課,而是講授了那些能夠最好地體現(xiàn)計(jì)算機(jī)體系結(jié)構(gòu)偉大思想的內(nèi)容。在這門課程里,我講授了一些強(qiáng)調(diào)計(jì)算機(jī)科學(xué)整體概念的主題,對(duì)學(xué)生的操作系統(tǒng)和C語言課程均有不小的幫助。這門課非常成功,特別是在激發(fā)學(xué)生的學(xué)習(xí)動(dòng)力方面。
任何編寫計(jì)算機(jī)體系結(jié)構(gòu)教材的人必須知道這門課會(huì)在3個(gè)不同的系講授:電子工程(EE),電子與計(jì)算機(jī)工程(EcE),計(jì)算機(jī)科學(xué)(cs)。這些系有自己的文化,也會(huì)從各自的角度看待計(jì)算機(jī)體系結(jié)構(gòu)。電子工程系和電子與計(jì)算機(jī)工程系會(huì)關(guān)注電子學(xué)以及計(jì)算機(jī)的每個(gè)部件是如何工作的。面向這兩個(gè)系的教材會(huì)將重點(diǎn)放在門、接口、信號(hào)和計(jì)算機(jī)組成上。而計(jì)算機(jī)科學(xué)系的學(xué)生大都沒有足夠的電子學(xué)知識(shí)背景,因此很難對(duì)那些強(qiáng)調(diào)電路設(shè)計(jì)的教材感興趣。實(shí)際上,計(jì)算機(jī)科學(xué)系更強(qiáng)調(diào)底層的處理器體系結(jié)構(gòu)與高層的計(jì)算機(jī)科學(xué)抽象之間的關(guān)系。
盡管要寫出一本能夠同時(shí)滿足電子工程系、電子與計(jì)算機(jī)工程系和計(jì)算機(jī)科學(xué)系的教材幾乎是不可能的,但本書進(jìn)行了有效的折中,它為電子工程系和電子與計(jì)算機(jī)工程系提供了足夠的門級(jí)和部件級(jí)的知識(shí),而這些內(nèi)容也沒有高深到使計(jì)算機(jī)科學(xué)系的學(xué)生望而卻步的程度。
本科計(jì)算機(jī)體系結(jié)構(gòu)課可在三個(gè)不同層次上講授:介紹性的、中級(jí)的和高級(jí)的。有些學(xué)校會(huì)講授全部三個(gè)層次的內(nèi)容,有些學(xué)校則將這些內(nèi)容壓縮為兩個(gè)層次,還有一些學(xué)校只進(jìn)行介紹。本書面向那些學(xué)習(xí)第一層次和第二層次計(jì)算機(jī)體系結(jié)構(gòu)課的學(xué)生,以及那些希望了解微處理器體系結(jié)構(gòu)當(dāng)前進(jìn)展的職業(yè)工程師。學(xué)習(xí)本書的唯一前提條件是讀者應(yīng)了解高級(jí)語言(如C)的基本原理和基本的代數(shù)知識(shí)。
艾倫·克萊門茨(Alan Clements)國際著名的計(jì)算機(jī)體系結(jié)構(gòu)教育的推動(dòng)者和踐行者。他于1 997年獲得英國拉夫堡大學(xué)(Loughborough University)博士學(xué)位,隨后加入提賽德大學(xué)(University of Teesside)計(jì)算機(jī)科學(xué)系。在20世紀(jì)70~80年代,他編寫了兩本計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域的重要教材:《計(jì)算機(jī)硬件原理》(The Principles of Computer Hardware)和《微處理器系統(tǒng)設(shè)計(jì)》(Microprocessor Systems Design)。
2001年,他擔(dān)任了計(jì)算機(jī)學(xué)會(huì)國際學(xué)生競(jìng)賽(CSIDC)主席,并于同年獲得英國國家教學(xué)獎(jiǎng)(National Teaching Fellowship),這是英國高等教育的zui高獎(jiǎng)項(xiàng)。由于在計(jì)算機(jī)體系結(jié)構(gòu)教育方面的貢獻(xiàn),他于是2002年獲得IEEE CS本科教學(xué)獎(jiǎng),2006年獲得TEEE CS泰勒布斯教育獎(jiǎng)(Taylor LBooth award)。2009年被選為IEEE Fellow。他在IEEE計(jì)算機(jī)學(xué)會(huì)擔(dān)任了多個(gè)職務(wù),并積極參加課程體系設(shè)計(jì),撰寫了關(guān)于未來計(jì)算機(jī)體系結(jié)構(gòu)教育的論文,參加了CS/ACM 2001計(jì)算課程體系的編寫和制定工作。2010烏Alan Clements從全職教學(xué)崗位退休。
目 錄
Computer Organization and Architecture: Themes and Variations
出版者的話
譯者序
前言
本書導(dǎo)讀
作者簡介
第一部分 起始篇
第1章 計(jì)算機(jī)系統(tǒng)體系結(jié)構(gòu) 4
1.1 什么是計(jì)算機(jī)系統(tǒng)體系結(jié)構(gòu) 7
1.2 體系結(jié)構(gòu)和組成 11
1.2.1 計(jì)算機(jī)系統(tǒng)和技術(shù) 14
1.2.2 計(jì)算機(jī)體系結(jié)構(gòu)在計(jì)算機(jī)科學(xué)中的地位 14
1.3 計(jì)算機(jī)的發(fā)展 16
1.3.1 機(jī)械計(jì)算機(jī) 17
1.3.2 機(jī)電式計(jì)算機(jī) 19
1.3.3 早期的電子計(jì)算機(jī) 19
1.3.4 微機(jī)和PC革命 20
1.3.5 摩爾定律和進(jìn)步的歷程 21
1.3.6 存儲(chǔ)技術(shù)發(fā)展 22
1.3.7 普適計(jì)算 23
1.3.8 多媒體計(jì)算機(jī) 23
1.4 存儲(chǔ)程序計(jì)算機(jī) 24
1.4.1 問題描述 24
1.4.2 解決方法 24
1.4.3 構(gòu)造一個(gè)算法 26
1.4.4 計(jì)算機(jī)需要通過什么來解決問題 27
1.4.5 存儲(chǔ)器 29
1.5 存儲(chǔ)程序的概念 31
1.6 計(jì)算機(jī)系統(tǒng)概覽 35
1.6.1 存儲(chǔ)層次 35
1.6.2 總線 37
1.7 現(xiàn)代計(jì)算 39
本章小結(jié) 39
習(xí)題 40
第2章 計(jì)算機(jī)算術(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)制運(yùn)算 49
2.4 有符號(hào)整數(shù) 52
2.4.1 符號(hào)及值表示法 52
2.4.2 二進(jìn)制補(bǔ)碼運(yùn)算 53
2.5 乘除法簡介 55
2.5.1 移位運(yùn)算 55
2.5.2 無符號(hào)二進(jìn)制乘法 56
2.5.3 快速乘法 57
2.5.4 除法 59
2.6 浮點(diǎn)數(shù) 63
2.6.1 IEEE浮點(diǎn)數(shù) 64
2.7 浮點(diǎn)運(yùn)算 68
2.8 浮點(diǎn)運(yùn)算和程序員 70
2.8.1 浮點(diǎn)運(yùn)算中的誤差傳播 71
2.8.2 生成數(shù)學(xué)函數(shù) 72
本章小結(jié) 74
習(xí)題 74
第二部分 指令集體系結(jié)構(gòu)
第3章 體系結(jié)構(gòu)與組成 79
3.1 存儲(chǔ)程序計(jì)算機(jī) 79
3.1.1 擴(kuò)展處理器:常量處理 84
3.1.2 擴(kuò)展處理器:流控制 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 匯編器的實(shí)際考慮因素 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 測(cè)試與比較指令 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的自動(dòng)前索引尋址方式 134
3.7.5 ARM的自動(dòng)后索引尋址方式 136
3.7.6 程序計(jì)數(shù)器相對(duì)尋址 136
3.7.7 ARM的load與store指令編碼 136
3.8 子程序調(diào)用與返回 138
3.8.1 ARM對(duì)子程序的支持 139
3.8.2 條件子程序調(diào)用 141
3.9 ARM代碼實(shí)例 141
3.9.1 計(jì)算絕對(duì)值 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 實(shí)現(xiàn)多段程序 143
3.9.8 簡單位級(jí)邏輯操作 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 塊移動(dòng)指令 156
3.12 整合——將所有內(nèi)容放在一起 160
本章小結(jié) 163
習(xí)題 163
第4章 指令集體系結(jié)構(gòu)——廣度和深度 168
4.1 數(shù)據(jù)存儲(chǔ)和棧 170
4.1.1 存儲(chǔ)和棧 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 邊界測(cè)試 201
4.4.5 位字段數(shù)據(jù) 202
4.4.6 循環(huán) 206
4.5 存儲(chǔ)器間接尋址 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章 計(jì)算機(jī)體系結(jié)構(gòu)與多媒體 229
5.1 高性能計(jì)算應(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 流擴(kuò)展和SIMD技術(shù)的發(fā)展 259
5.4.1 浮點(diǎn)軟件擴(kuò)展 261
5.4.2 Intel的第三層多媒體擴(kuò)展 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 單周期直通計(jì)算機(jī)的控制 292
6.3