本書涵蓋了有關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中關于匯編語言語法和目標代碼部分。在這些部分如果有錯誤,那全都是我的失誤,與他無關。作者