注冊 | 登錄讀書好,好讀書,讀好書!
讀書網-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網絡計算機輔助設計與工程計算計算機輔助綜合MIPS處理器設計透視

MIPS處理器設計透視

MIPS處理器設計透視

定 價:¥55.00

作 者: (英)Dominic Sweetman著;趙俊良等譯;趙俊良譯
出版社: 北京航空航天大學出版社
叢編項: AKAE嵌入式研究中心推薦教材
標 簽: 微處理器/CPU

ISBN: 9787810774307 出版時間: 2005-06-01 包裝: 膠版紙
開本: 23cm 頁數: 427 字數:  

內容簡介

  本書涵蓋了有關MIPS處理器的發(fā)展歷史、運行原理和編程等諸多內容。首先介紹了MIPS的發(fā)展歷史;然后分別對MIPS處理器的體系結構、協處理器、Cache、中斷、內存管理、浮點運算、MIPS指令集、匯編語言編程、C語言編程、代碼的可移植性等細節(jié)進行了詳細深入的分析;最后列舉了一些MIPS代碼的例子。本書不僅內容充實,而且語言通俗易懂,是MIPS體系結構領域中全面性和易讀性結合的很好的一本書,適合學習MIPS體系結構的初學者;同時對于MIPS程序員和高級用戶也極有參考價值。本書既可用作計算機類、微電子類本科生及研究生教科書和參考書,也可作為從事MIPS軟件開發(fā)、計算機體系結構研究和開發(fā)人員的參考資料。本書前言這是一本關于MIPS的書。MIPS是20世紀80年代中期誕生的RISCCPU設計之一,也是銷量最好的RISCCPU之一。從SONY、任天堂的游戲主機,到Cisco的路由器,再到SGI的超級計算機,到處都能看到MIPSCPU的應用。目前,RISC體系結構正面臨著普及與強大的x86體系結構CPU的強烈沖擊,到20世紀末,MIPS也許會是那些原始RISCCPU設計中惟一正常盈利的體系結構。RISC是一個有用的名詞,而并非只是市場宣傳用語,它體現了20世紀80年代中期為提高流水線效率所設計的一組計算機體系結構之間的共同特性。CISC則麻煩得多,因為它實際上泛指所有非RISC的東西。本書將采用一個狹義的CISC定義,用它來指使用微代碼控制的結構,如68000、x86等。本書是為程序員編寫的,這個目標決定了本書內容的取舍。如果一個程序員遇到問題或感興趣,那么這些內容將包含在本書內。這意味著我們不必討論那些困擾了兩代硬件設計工程師的MIPS接口問題。在操作系統(tǒng)中可能隱藏著許多我們在這里討論的細節(jié)。有許多優(yōu)秀的程序員認為C語言已經足夠地接近底層了,結構方面的調節(jié)不需要關心。但有時確實需要深入具體細節(jié)——對比特邊界是如何工作的這一問題,人類是天生就滿懷好奇的。根據這個原則,我們在描述一個軟件人員可能不熟悉的東西時,傾向于非正式的方式——特別是關于CPU內部工作原理的內容。但討論到程序員們以往見過的東西,如寄存器、指令以及數據如何存儲在內有等問題時,我們將采用更簡潔和技術化的說法。這里假設本書的讀者已經熟悉并適應了C語言。在本書中,大多數的引用材料使用C語言作為簡要操作的一種描述方法,特別是在指令集細節(jié)和匯編語言相關的章節(jié)。在本書中有些部分是要求讀者要了解CISC(即680x0或x86)匯編語言的,因為站在CISC的角度上,MIPS體系結構的獨創(chuàng)性與特殊性會更好地體現出來。當然如果不熟悉CISC匯編,這也并沒有太大關系。通常需要對CPU的細節(jié)了解到本書所述程序的是操作系統(tǒng)開發(fā)人員或在嵌入式領域工作的人。嵌入式系統(tǒng)廣義來說,是指任何把計算機操作得不像計算機的用法。這些系統(tǒng)的共同特征是,操作系統(tǒng)并未將CPU工作的細節(jié)隱藏起來,它對于程序員來說是可見的。MIPSCPU可以應用在很寬的領域內,例如從游戲程序領域到工業(yè)控制領域。但這并不是說本書只是一本參考手冊,要把一個CPU體系結構留在你的大腦里,就必須真正地理解它。我希望本書能引起希望全面理解現代CPU體系結構的學生(在?;蚣磳⑷胄5膶W生)的編程興趣。如果從頭到尾地將此書讀上一遍,你大概會期望從綜述到細節(jié)的逐步深入過程,本書正是如此。不過同時,你還會看到一些按歷史發(fā)展的內容表述,通常我們第一次介紹某個概念時,會討論關于它的第一個版本。Hennessy和Patterson稱此為“進化學習(learningthroughevolution)”,我們認為這是一種優(yōu)秀的表達方法(當然,對他們來說足夠優(yōu)秀的方法對我也是一樣的)。因此,在第1章中以一些歷史和背景作為開始,把MIPS放在當時的環(huán)境中,來討論當初MIPS的發(fā)明者們在頭腦中最初形成的相關技術和觀念。在第2章中,繼續(xù)跟隨他們的思路討論MIPS機器語言的特點。為了簡化指令,前兩章省去了處理器控制方面的細節(jié),我們把這內容留到第3章。處理器機制難看但實用,它允許MIPSCPU處理它們的高速緩存(cache)、異常和啟動(exceptionsandstartup)與存儲器管理(memorymanagement)。以上三個主題將分別由第4章到第6章來討論。MIPS指令集中和浮點數處理相關的部分被刻意地分離開來。這種分離使得我們可以設計不同程序支持浮點的MIPS處理器,從完全不支持、部分支持到完全支持。所以也把浮點功能放在第7章單獨介紹。到此為止,是按照一個合乎邏輯的順序來使讀者獲取MIPS方面的知識。但在剩余的章節(jié)中將作一些調整,將使它們更像一本參考手冊或是一本基于例子的教程。第8章將全面介紹整個MIPS指令系統(tǒng)。目的是詳盡地介紹MIPS指令集,但是要比標準MIPS手冊要簡潔得多。本書只用了十來頁篇幅介紹指令集,而在其他書中則需要一百多頁來講述。第9章講述的是匯編語言編程,其組織結構更像一本編程手冊。本章的風格與本書其余章節(jié)不同,它的出現是由于一直沒有一份合適的MIPS匯編語言手冊。任何在匯編級別的編程者,將會看到本書其余部分都有相關內容。第10章面向的讀者是熟悉C編程而關心其中MIPS體系結構有影響的部分的,如包括MIPS編譯器下的存儲器管理和參數傳遞的執(zhí)行。第11章是一個幫助提示的列表,來幫助讀者在MIPS和其他CPU間移植軟件。第12章收集了一些軟件的片斷,并加入了注釋,這些都是根據本書的相關主題精選出來的。理解實際軟件也許會很困難,但是如果讀者從事MIPS軟件項目開發(fā),不管把它看作為一個風格指南,還是看作一個參考列表,此章將會非常有用。附錄A(關于指令時序)、附錄B(關于匯編語言語法)和附錄C(關于目標代碼)中包含了很高的技術含量,盡管有許多東西可能不會涉及到,但這些是不能被完全忽略的。在附錄D中能看到一些關于MIPS體系結構的一些消息,能了解到MIPS16、MDMX和MIPSV擴展的指令系統(tǒng)。在本書的末尾還能看到相關的術語說明——可以查詢專用名詞、陌生名詞和縮寫。風格和限制(styleandlimits)因為每本書都體現了作者的勞動,所以我最好說說本書的優(yōu)點。因為讀者當中有一些學生,所以我想是否要把MIPS的用法和普通用法區(qū)分開。但我決定不這么做,除非這樣做沒有任何代價。我也盡量把書寫得具體些,而不那么抽象。我并不關心像TLB之類的術語在更大的范圍內有什么含義,但會解釋它們在MIPS上下文中的意思。人類有很強的總結能力,我想這一點對于學習者來說不會造成太大的打擊。本書至少醞釀了七年,所以并不是一朝一夕寫成的。我在1986年開始從事MIPS體系結構方面的工作。在1988年之前,我給一些客戶做關于MIPS體系結構方面的培訓課程,其中演示的幻燈片就成了本書的一些框架。在1993年,我將它們收集在一起并給IDT公司做了一個軟件手冊作為MIPS文檔包的一部分來出版,但它僅針對IDTR3051系列,略去了許多有趣的細節(jié)。在1995到1996年間,本書加入了64位的CPU的內容,并且覆蓋了所有看上去相關的內容。MIPS的傳奇還在繼續(xù),不然,本書只能寫給歷史學家,MorganKaufmann也將不愿意出版它了。因為撰寫和審核本書的過程相當的長,所以我不得不定義了一些合理的止步點。有些宣布得太晚的MIPS技術發(fā)展,書中沒有涉及,但在出版前更新了附錄D來盡量多地反映當今MIPS方面的發(fā)展。感謝(acknowledgments)本書中的所有主題都是根據我所從事計算機方面的經驗來寫的。MikeCole使我對計算機產生了濃厚的興趣,所以從那時起我就試著效仿他的技巧來篩選一些好的想法。許多人在Whitechapel工作站教過我一些關于計算機結構和硬件設計方面的東西——可能BobNewman和RickFilipkiewicz是讓我受益最多的人。我也必須感謝Whitechapel的銷售員DaveGravell讓我最初接觸了MIPS。我對在Algorithmics的工程師同事們(ChrisDearman,RickFilipkiewicz,GeraldOnions,NigelStephens和ChrisShaw)必須致以雙倍的感謝,在同他們無數次的探討、爭論和設計中使本書能夠跟上時代的競爭。在MorganKaufmann,我也不止耗盡了一個編輯的精力:BruceSpatz在最初鼓勵我開始寫此書,JenniferMann接管了此事,DenisePenrose幫著出版。還要感謝很多的評論家對于本書的章節(jié)花費了大量的時間:IDT(IntegratedDeviceTechnology,Inc.)公司的PhilBourekas,LSILogicCorporation的ThomasDaniel,SGI公司的MikeMurphy和CarnegieMellon大學的DavidNagle。Algorithmics的NigelStephens寫了最初版本的第9章的一部分和附錄B、附錄C中關于匯編語言語法和目標代碼部分。在這些部分如果有錯誤,那全都是我的失誤,與他無關。作者

作者簡介

  Dominic Sweetman屬于最后一代希望從底層到上層理解計算機系統(tǒng)的程序員。他豐富的職業(yè)生涯開始于編寫底層代碼,從操作系統(tǒng)的開發(fā)到網絡再到分布式系統(tǒng)。他是一位在硬件系統(tǒng)、CPU、網絡的操作系統(tǒng)方面經驗豐富的設計者和開發(fā)者,是Whitechael Workstations的發(fā)起人之一,于1988年創(chuàng)立了Algoritmics公司,并擔任主管。Dominic和他的妻子、兩個孩子及三只貓生活在倫敦北部。

圖書目錄

第1章 RISC和MIPS
1.1 流水線2
1.1.1 什么使流水線效率降低?3
1.1.2 流水線和緩存4
1.2 MIPS的五級流水線4
1.3 RISC 和CISC6
1.4 迄今為止一些重要的MIPS芯片7
1.4.1 R2000到R30007
1.4.2 R6000: 一次偏軌7
1.4.3 R4000革命8
1.4.4 R5000和R100009
1.5 MIPS和CISC體系結構的比較11
1.5.1 MIPS指令集的一些規(guī)定11
1.5.2 編址及內存訪問12
1.5.3 MIPS不支持的特征13
1.5.4 可能沒有預料到的特征14
1.5.5 程序員可見的流水線效果14
第2章 MIPS體系結構
2.1 MIPS匯編語言18
2.2 寄存器的特點19
2.3 整數乘法單元和寄存器22
2.4 加載和存儲:尋址方式23
2.5 存儲器和寄存器中的數據類型24
2.5.1 整數數據類型24
2.5.2 未對齊的加載和存儲 25
2.5.3 存儲器中的浮點數據 25
2.6 匯編語言的合成指令 26
2.7 MIPS I發(fā)展到 MIPS IV : 64位(和其他)的擴展 27
2.7.1 邁向64位 28
2.7.2 誰需要64位?29
2.7.3 關于64位與無模式轉換:寄存器中的數據30
2.7.4 MIPS III的一些其他改進31
2.8 基本地址空間 32
2.8.1 簡單系統(tǒng)的尋址34
2.8.2 核心與用戶權限34
2.8.3 64位CPU的存儲映射34
2.9 流水線冒險36
第3章 協處理器0: MIPS處理器控制
3.1 CPU控制指令41
3.2 起作用的寄存器及起作用的時機42
3.3 標準CPU控制寄存器編碼43
3.3.1 處理器ID(PRId)寄存器43
3.3.2 狀態(tài)寄存器(SR)44
3.3.3 原因寄存器(Cause)49
3.3.4 異常返回地址(EPC)51
3.3.5 無效虛地址寄存器(BadVaddr)51
3.4 R4000以后的CPU專有的控制寄存器51
3.4.1 Count/Compare寄存器: R4000時鐘51
3.4.2 Config寄存器: R4x00配置52
3.4.3 LoadLinked Address (LLAddr)寄存器54
3.4.4 調試觀測點(WatchLo/WatchHi)寄存器54
第4章 MIPS的緩存
4.1 緩存和緩存的管理56
4.2 緩存怎樣工作56
4.3 早期MIPS CPU中的寫透緩存58
4.4 近期MIPS CPU中的回寫緩存59
4.5 緩存設計的其他選擇59
4.6 緩存管理60
4.7 二級和三級緩存62
4.8 MIPS CPU緩存的構造63
4.9 對R3000風格的緩存編程64
4.9.1 使用緩存隔離和交換65
4.9.2 初始化和判斷大小66
4.9.3 緩存無效66
4.9.4 測試和探察67
4.10 對R4000風格的緩存編程67
4.10.1 CacheERR、ERR和ErrorEPC寄存器:緩存錯誤處理68
4.10.2 緩存指令70
4.10.3 計算緩存的大小和配置方式71
4.10.4 初始化程序72
4.10.5 在緩存中無效或者寫回一個內存區(qū)域73
4.11 緩存效率73
4.12 修改軟件來影響緩存的效率75
4.13 寫緩沖區(qū)和需要關心它的時候77
4.14 關于MIPS緩存的其他話題79
4.14.1 多處理器的緩存特征79
4.14.2 緩存別名79
第5章 異常、中斷和初始化
5.1 精確異常81
5.2 異常發(fā)生時刻83
5.3 異常向量: 異常處理開始的地方83
5.4 異常處理基礎86
5.5 從異常返回87
5.6 嵌套異常87
5.7 一個異常處理例程88
5.8 中斷88
5.8.1 MIPS處理器的中斷資源89
5.8.2 實現中斷優(yōu)先級91
5.8.3 原子性和對SR的原子改變92
5.8.4 中斷使能下的關鍵區(qū): MIPS中的信號量機制93
5.9 啟動94
5.9.1 識別CPU型號96
5.9.2 啟動序列97
5.9.3 啟動一個應用程序97
5.10 模擬指令98
第6章 內存管理與TLB
6.1 大型計算機上的內存管理101
6.1.1 基本進程空間布局和保護101
6.1.2 把進程空間映射到真正的物理內存103
6.1.3 最佳頁映射103
6.1.4 我們真正想要的104
6.1.5 MIPS設計的起源106
6.2 MIPS TLB的特點106
6.3 MMU的寄存器109
6.3.1 EntryHi、EntryLo和PageMask寄存器110
6.3.2 Index寄存器112
6.3.3 Random寄存器113
6.3.4 Wired寄存器114
6.3.5 Context寄存器及XContext寄存器114
6.4 MMU的控制指令115
6.5 對TLB編程116
6.5.1 如何產生重裝入116
6.5.2 使用ASID117
6.5.3 Random寄存器與被綁定入口117
6.6 建立內存譯碼機制118
6.7 TLB的異常處理代碼119
6.7.1 32位R3000系列CPU的TLB異常處理函數120
6.7.2 R4x00系列CPU的TLB異常處理函數122
6.7.3 XTLB的失效處理函數124
6.8 跟蹤已修改的頁(模擬dirty位)124
6.9 內存地址譯碼和64位指針125
6.10 使用MIPS的TLB126
6.11 在非Unix系統(tǒng)中的內存管理127
第7章 浮點支持
7.1 浮點的基本描述128
7.2 IEEE754標準及其背景129
7.3 怎樣保存IEEE浮點數130
7.3.1 IEEE尾數的標準化131
7.3.2 對使用特殊值時的保留指數值131
7.3.3 MIPS浮點數據格式132
7.4 IEEE754的MIPS實現134
7.5 浮點寄存器135
7.6 浮點異常/中斷136
7.7 浮點控制: 控制/狀態(tài)寄存器137
7.8 浮點實現/校正寄存器139
7.9 浮點指令指南140
7.9.1 裝入/存儲140
7.9.2 寄存器間的傳送141
7.9.3 三個操作數算術操作142
7.9.4 乘加操作143
7.9.5 一元(可變符號)操作143
7.9.6 轉換操作143
7.9.7 條件分支和測試指令144
7.10 指令時序安排的要求146
7.11 指令時序對速度需求147
7.12 按需初始化和使能147
7.13 浮點模擬148
第8章 MIPS指令集完全指南
8.1 一個簡單的例子149
8.2 匯編助記符及其含義150
8.2.1 U和NonU(非U)助記符152
8.2.2 除法助記符153
8.2.3 指令的詳細清單153
8.3 浮點處理指令175
8.4 特殊指令及其用途179
8.4.1 向左加載/向右加載(load left/load right): 地址非對齊的存取操作179
8.4.2 關聯加載/條件存儲(loadlinked/storeconditional)183
8.4.3 條件拷貝(conditional move)指令184
8.4.4 可能跳轉的指令(branchlikely)185
8.4.5 整數乘累加指令(interget multiplyaccumulate)和乘加指令(multiplyadd)186
8.4.6 浮點乘加指令(floatingpoint multiplyadd)187
8.4.7 多浮點條件標志位187
8.4.8 緩存數據預取188
8.4.9 存取同步屏障:Sync指令189
8.5 指令的機器編碼190
8.5.1 指令編碼中的域190
8.5.2 指令編碼表的注意事項202
8.5.3 編碼方式和處理器實現的簡單剖析203
8.6 指令集的功能分組203
8.6.1 空操作204
8.6.2 寄存器間的數據拷貝指令204
8.6.3 立即數加載指令204
8.6.4 算術/邏輯操作指令205
8.6.5 整數乘法、除法以及求余指令207
8.6.6 整數乘累加指令208
8.6.7 存取指令209
8.6.8 跳轉、分支和子程序調用指令211
8.6.9 斷點及異常指令212
8.6.10 0#協處理器(CP0)處理指令212
8.6.11 浮點操作指令213
8.6.12 ATMizerII系統(tǒng)的專用浮點指令215
第9章 匯編程序設計
9.1 一個簡單的例子216
9.2 語法簡介220
9.3 指令使用規(guī)則221
9.3.1 帶1~3個寄存器的計算型指令221
9.3.2 帶立即數的運算指令222
9.3.3 關于32/64位指令223
9.4 尋址模式223
9.5 匯編偽指令226
9.5.1 段的選擇226
9.5.2 包含堆棧的程序布局228
9.5.3 數據的定義與對齊229
9.5.4 符號綁定屬性231
9.5.5 函數偽指令233
9.5.6 匯編器控制偽操作(.set)235
9.5.7 編譯/調試支持237
9.5.8 SGI匯編語言中增加的偽操作237
第10章 MIPS上的C語言編程
10.1 堆棧、子程序鏈接以及參數傳遞239
10.2 堆棧參數結構240
10.3 使用寄存器傳遞參數241
10.4 C庫范例242
10.5 一個特殊的例子傳遞數據結構243
10.6 傳遞不定數量的參數244
10.7 函數的返回值245
10.8 擴展寄存器——使用標準SGI n32和n64245
10.9 堆棧分布、堆棧幀以及輔助調試器248
10.9.1 leaf函數250
10.9.2 nonleaf函數251
10.9.3 適用于復雜堆棧要求的堆棧幀指針254
10.10 數目可變的參數列表257
10.11 不同線程間的共享函數和共享庫問題258
10.11.1 單一地址空間的代碼共享259
10.11.2 MIPS ABI中的共享庫代碼259
10.12 編譯器的優(yōu)化261
10.12.1 普通優(yōu)化262
10.12.2 優(yōu)化不友好的代碼并且如何避免264
10.12.3 優(yōu)化約束265
10.13 通過C進行器件訪問的提示265
10.13.1 使用“volatile”制約破壞性的優(yōu)化266
10.13.2 C中的非對齊數據267
第11章 可移植性和C代碼
11.1 MIPS的移植: 常見問題清單270
11.2 一個理想的程序移植過程272
11.2.1 程序移植的3個選擇272
11.2.2 解決系統(tǒng)相關的問題273
11.2.3 分離不可移植代碼274
11.2.4 何時使用匯編274
11.3 可移植C程序和語言標準275
11.4 C庫函數和POSIX276
11.5 數據表示和對齊277
11.6 尾端: 字、字節(jié)和位的順序279
11.6.1 尾端和程序員281
11.6.2 尾端:  描述和腦力問題282
11.6.3 尾端: 硬件問題284
11.6.4 互相對立尾端陣營之間的連接286
11.6.5 可配置尾端的連接287
11.6.6 處理MIPS CPU的兩種尾端的軟件288
11.6.7 可移植性與尾端無關代碼290
11.6.8 尾端和外部數據291
11.6.9 尾端問題“預知”和“治愈”的假象292
11.7 高速緩存會引起什么樣的錯誤?怎樣才能阻止它?292
11.7.1 高速緩存的管理和DMA數據294
11.7.2 高速緩存的管理和指令數據的寫入295
11.7.3 高速緩存的管理和非高速緩存(或寫透)的數據295
11.8 MIPS的不同實現295
第12章 軟件舉例
12.1 MIPS的啟動298
12.2 MIPS緩存管理309
12.2.1 緩存操作:緩存指令出現前的32位MIPS310
12.2.2 Cache操作: 遵從MIPS III和Cache指令320
12.3 MIPS異常處理337
12.3.1 xcption: 為程序員做些什么?337
12.3.2 xcption: C語言接口代碼338
12.3.3 xcption: 低層模塊(lowlevel module)339
12.4 MIPS中斷355
12.5 MIPS的優(yōu)化357
附錄A指令時序與優(yōu)化
A.1 避免冒險: 確保代碼正確363
A.2 避免互鎖提高性能364
A.3 乘法單元冒險: hi和lo的早期修正365
A.4 避免CP0冒險: 要使用多少nop?365
A.5 CP0指令/指令調度(instruction scheduling)367
A.6 CP0標志位(flags)和指令369
附錄B匯編語言語法
附錄C目標代碼
C.1 工具377
C.2 區(qū)和段(section & segment)378
C.3 ECOFF(RISC/OS)379
C.3.1 文件頭379
C.3.2 可選的a.out頭381
C.3.3 調入器(loader)舉例382
C.3.4 進一步閱讀383
C.4 ELF(MIPS ABI)383
C.4.1 文件頭383
C.4.2 程序頭385
C.4.3 調入器舉例385
C.4.4 進一步閱讀387
C.5 目標代碼工具387
附錄DMIPS的發(fā)展
D.1 MIPS16388
D.1.1 MIPS16中的特殊編碼和指令389
D.1.2 MIPS16的評價389
D.2 MIPS V/MDMX390
D.2.1 編譯器可以使用多媒體指令嗎?391
D.2.2 MDMX的應用392
D.2.3 MIPS V的應用393
D.2.4 MDMX/MIPS V可能的成功393
MIPS術語說明394

本目錄推薦

掃描二維碼
Copyright ? 讀書網 ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號