




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第二章 指令系統原理與實例1第二章 指令系統原理與實例指令集系統結構,即計算機對程序員和編譯器開發者可見的部分 主要介紹現有的各種指令集系統結構設計方案,主要包括四個方面: (1)介紹一種指令系統分類的方法,并對各種指令系統設計方案的優缺點進行定性評價 (2)介紹并分析幾種指令系統評價方法 (3)討論有關計算機語言、編譯器以及這兩者與指令系統結構關系的相關問題 (4)在“綜合”小節中介紹典型的RISC系統結構MIPS指令系統是如何體現這些思想的。討論了多種不同指令集系統結構的評價方法2第二章 指令系統原理與實例2.1 簡介2.2 指令集系統結構的分類2.3 存儲器尋址2.4 操作數的大小和類別
2、2.5 指令系統的操作2.6 控制流指令2.7 指令系統的編碼2.8 相關問題:編譯器的角色 2.9 MIPS系統結構2.10 謬誤和易犯的錯誤2.11 結論32.1 簡介回顧第一章提到的三個應用領域:桌面計算注重程序的定點和浮點運算性能,而不太考慮程序的大小以及處理器的功耗。服務器主要應用于數據庫、文件服務器、Web應用以及一些多用戶分時應用。盡管所有服務器的處理器都支持浮點指令,但浮點運算性能的重要性遠不及定點和字符串方面的處理性能。嵌入式應用注重成本和功耗,所以代碼量的大小是至關重要的,因為存儲器越小就意味著成本更低。為了降低芯片的成本,一些指令(比如浮點指令)則稱為可定制的選項。4因此
3、,指令系統在這三個應用領域的情況和相似實際上,本章的MIPS系統結構在桌面、服務器及嵌入式應用中均有廣泛應用52.2指令集系統結構的分類指令集系統結構最根本的區別在于處理器內部的存儲類型,所以本節主要討論這方面的內容。主要的設計方案包括使用堆棧、累加器或者一組寄存器。操作數可以顯式指定或者隱含指定: (1)堆棧系統結構中操作數隱含地位于棧頂 (2)累加器系統結構中的一個隱含操作數就是累加器。 (3)通用寄存器系統結構只能明確地指定操作數,不是寄存器就是存儲器地址。6通用寄存器系統結構按照寄存器訪問方式劃分:(1)register-memory系統結構,任何一條指令都可以訪問存儲器。(2)loa
4、d-store系統結構,只能通過load和store指令來訪問內存。(3)memory-momery系統結構,所有操作數都在存儲器中,現代處理器已不使用。 早期的計算機使用堆棧型或累加器型指令系統結構,但1980年代后計算機都基本采用load-store系統結構。主要原因來自于General-purpose寄存器(GPR)的出現。7不同的系統結構的方塊圖(四類指令系統結構中操作數的位置) 棧頂寄存器(TOS)8輸入輸出堆棧結構累加器結構通用寄存器結構通用寄存器(GPR)出現的原因: 寄存器同其他的處理器內部存儲結構一樣,但比存儲器快。編譯器使用寄存器很方便,比使用其他的內部存儲形式效率更高。例
5、如:(A*B) (C*D) (E*F) 在寄存器系統結構的計算機上,可以按任意順序來執行三個乘法,但是在堆棧計算機上則只有一種計算順序,因為操作數隱含在堆棧中,且必須多次載入。 寄存器用來存放變量,減少了數據流量,加速程序運行(因為寄存器比存儲器要快),改善代碼密度(指明一個寄存器比指明一個存儲器地址所需的位數要少)。 寄存器多少才夠用呢?取決于編譯器如何利用寄存器,其用途一般為進行表達式計算、傳遞參數、存放變量。9通用寄存器系統結構由兩個特性來劃分:指令是否有兩個或者三個操作數。 在三個操作數格式中,指令包含一個結果(目的操作數)和兩個源操作數。在兩個操作數的格式中,有一個既是結果操作數也是
6、源操作數。ALU指令中可以有多少個操作數作為存儲器地址。 典型的ALU指令中所支持的存儲器操作數的數量可能從0個到3個不等。10存儲器地址個數最多操作數個數系統結構類型舉例03Load-storeAlpha, ARM, MIPS, PowerPC, SPARC, superH, TM3212Reg-MemIBM360/370, Inter80 x86, Motorola 6800, T1 TMS320C54x22Mem-MemVAX(也有3個操作數的格式)33Mem-MemVAX(也有2個操作數的格式)11圖 每條經典ALU指令中的操作數總數和存儲器操作數的組合情況類型優點缺點Reg-Reg(
7、0,3)簡單、定長的指令編碼;簡單的代碼生成模式;每條指令運行的時鐘周期相近指令數比可以直接訪問存儲器的系統結構多;指令多和指令密度低使程序變得很大Reg-Mem(1,2)數據不需要專門的載入指令就可以直接訪問;指令格式更加易于編碼,代碼密度高 由于源操作數在二元操作中被破壞了,所以操作數不是等價的;在一條指令里面對存儲器地址和寄存器號進行編碼會限制寄存器的數量;操作數位置不同使得每條指令執行所需的時鐘周期不同Mem-Mem(2,2)或(3,3)最緊湊。不浪費寄存器來做臨時交換空間 指令長短不相同,特別是三操作數指令;同樣,每條指令的操作各不相同;存儲器訪問帶來了寄存器瓶頸 三種常見通用寄存器
8、計算機的優缺點122.3存儲器尋址存儲器地址表示 我們討論的所有指令系統都是字節尋址的,都提供了字節(8位)、半字(16位)和字(32位)尋址,大多數的計算機還提供了雙字(64位)尋址。內存中的字節內存中的字13小端模式&大端模式小端模式把地址為“XX000”的字節放在整個字的最低有效位置上,字節內各位編碼為大端模式把地址為“XX000”的字節放在整個字的最高有效位置上,字節內各位編碼為 765432100123456714對齊:假設一個大小為s個字節的數據地址是A,如果A mod s=0,訪問該地址就是對齊的。字節地址的低三位數據寬度012345671字節(字節)對齊對齊對齊對齊對齊對齊對齊
9、對齊2字節(半字)對齊對齊對齊對齊2字節(半字)未對齊未對齊未對齊未對齊4字節(字)對齊對齊4字節(字)未對齊未對齊4字節(字)未對齊未對齊4字節(字)未對齊未對齊8字節(雙字)對齊8字節(雙字)未對齊8字節(雙字)未對齊8字節(雙字)未對齊8字節(雙字)未對齊8字節(雙字)未對齊8字節(雙字)未對齊8字節(雙字)未對齊15為什么要有對齊限制? 由于存儲器都是字或者雙字整數倍對齊的,不對齊會導致硬件實現的復雜性。一次不對齊的存儲器訪問會導致多次對齊存儲器訪問。因此,即使是在沒有對齊限制的計算機里面,對齊訪問的程序也會運行得比較快。16尋址方式 尋址方式是指各種系統結構如何指定它們所要訪問的對象
10、的地址。尋址方式指定常量和存儲器位置。選擇適合的尋址方式能明顯減少指令數量。但也增加了實現的復雜度和實現這些尋址方式的計算機的平均CPI。對于系統結構設計者,如何選擇各種尋址方式很重要。17尋址方式指令舉例含義何時使用寄存器尋址Add R4,R3RegsR4RegsR4+RegsR3數值在寄存器中立即數尋址Add R4,#3RegsR4RegsR4+3數值是常量位移量尋址Add R4,100(R1)RegsR4RegsR4 +Mem100+RegsR1存取局部變量(+模擬寄存器間接、直接尋址)寄存器間接尋址Add R4,(R1)RegsR4RegsR4+MemRegsR1使用指針或者計算出的地
11、址進行尋址間接尋址Add R3,R1+R2RegsR3RegsR3 +MemRegsR1+RegsR2有時用在數組尋址中索引尋址Add R1,(1001)RegsR1RegsR1 +Mem1001R1是數組的基址,R2是索引值用來存取靜態數據;地址常量可能需要很大存儲器間接尋址Add R1,(R3)RegsR1RegsR1 +MemMemRegsR3如果P3是指針p的地址,那么就得到*p自動遞增尋址Add R1,(R2)+RegsR1RegsR1+MemRegsR2RegsR2RegsR2+d用在循環中遞增變量,R2是數組的起始地址,每次增加d自動遞減尋址Add R1,-(R2)RegsR2R
12、egsR2-dRegsR1RegsR1+MemRegsR2和自動遞增類似,自動遞增/遞減用來實現類似堆棧的push/pop功能比例尋址Add R1,100(R2)R3RegsR1RegsR1+Mem100+RegsR2+RegsR3*d用來對數組尋址。一些計算機可以用任意的索引(間接)尋址方式18 尋址方式下圖給出了VAX系統結構(有豐富的尋址方式,支持上圖所有的方式) 上用三個程序所測試出的尋址方式的結果。19寄存器尋址未被統計。位移量尋址方式 位移量尋址方式的主要問題是位移的范圍。根據不同的位移量大小,可以決定到底使用多長的位移量。 選擇位移量的長度是很重要的,因為它直接影響到指令的長度。
13、20Alpha上運行SPEC CPU2000的CINT2000和CFP2000測試程序數據訪問測試結果的平均值。 立即數尋址方式 立即數尋址可以用于算術運算、比較指令(主要是分支轉移指令)以及寄存器存取常數的指令。其中最后一種情況在把常數寫進代碼中時出現,這些常數往往比較小,也有可能是很大的地址常數。對于立即數的使用,決定它們到底是需要支持所有操作還是只支持一部分操作是很重要的。21 大約1/4的數據傳輸和定點ALU操作有一個立即數操作數。列出了一個指令系統中常見定點操作使用立即數的頻率。 立即數尋址方式 另一個問題是指令立即數的取值范圍。立即數的數值大小會影響指令的長度。小立即數是最常用的。
14、有時也使用大立即數,特別是在尋址計算中。 22Alpha上運行SPECCPU2000的CINT2000和CFP2000測試程序結果的平均值2.4操作數的大小與類型操作數的類型如何指定:第一種,操作數類型可以通過操作碼的編碼來指定,這也是最常用的方法;第二種,數據上面附帶一個硬件解釋的表示數據類型的符號,這個符號指定操作數的類型以及相應的操作(現在這種方法已很難見到)。常見的操作數類型:字符(1B)、半字( 2B )、字( 4B )、單精度浮點數( 4B )、雙精度浮點數( 8B )。定點幾乎都用二進制補碼表示,字符幾乎都是ASCII編碼格式。23總結:存儲器尋址一個新的系統結構最少應支持以下尋
15、址方式:位移量尋址 位移量的大小至少要有12位-16位;立即數尋址 立即數的大小至少不少于8位到16位;寄存器間接尋址這三類尋址占了測試所用到的尋址方式的75%-99%24基準測試程序中數據訪問的大小分布10%5%26%29%70%59%1%0%0%10%20%30%40%50%60%70%80%雙字(64位)浮點平均值定點平均值字(32位)半字(16位)字節(8位)25在決定哪些類型比較重要且需要有效支持時,數據類型的訪問頻率能提供很大的依據。操作數的大小與類型2.5指令系統的操作大多數指令集系統結構都支持的操作可以按下圖進行分類:操作類型舉例算術和邏輯運算定點算術和邏輯操作:加、減、與、或
16、、乘、除數據傳輸Load-store指令(在存儲器尋址的計算機上是傳送指令)控制轉移、跳轉、過程調用和返回、陷阱系統操作系統調用、虛擬存儲器管理指令浮點浮點操作:加、乘、除、比較十進制十進制加、十進制乘、十進制到字符的轉換字符串字符串傳送、字符串比較、字符串匹配圖像像素、頂點操作、壓縮/解壓縮操作共同的規律:指令系統中使用最多的是一些簡單指令。一般所有的計算機都提供前三類指令。根據系統結構不同指令系統對系統功能的支持有很大的差別,但是所有的計算機都必須提供對基本系統功能的支持。26這10類指令在流行的Intel 80X86計算機上運行的一系列定點程序的所有指令中占96%。因此,它們是最常用的指
17、令,執行起來應該盡量快。排名80 x86指令定點平均值1載入22%2條件轉移20%3比較16%4存儲12%5加8%6與6%7減5%8Reg-Reg傳輸4%9調用1%10返回1%總計96%80X86中執行最多的前10類指令:2.5指令系統的操作272.6控制流指令控制流指令分類 條件轉移,跳轉,過程調用,過程返回控制流指令出現的相對頻率82%10%8%75%6%19%0%20%40%60%80%100%條件轉移跳轉調用/返回定點平均值浮點平均值28在load-store計算機上運行基準測試程序過程中這幾種指令的使用頻率。控制流指令的尋址方式 控制流指令需要指明轉移的目標地址。 最常見的方式是使用
18、基于程序計數器(PC)的位移量來指定目標地址,這種類型的控制流指令稱為PC相對尋址指令。PC相對尋址指令的優點 目標通常都和當前的指令離得不遠,而且使用相對偏移地址可以縮減指令的長度。 使用程序的運行與載入位置無關,稱為位置無關,可以減少程序在鏈接時的工作量,對在執行時才鏈接的程序有好處。29 編譯時不知道目標位置,為了實現返回和間接跳轉,需要使用寄存器間接跳轉,需要給出包含目標地址的寄存器名稱。寄存器間接跳轉還用于其他四個重要地方: 分支選擇語句case或者switch 面向對象語言中的虛擬函數或者方法 高階函數或者函數指針 動態共享庫以上四種情況,編譯時都不知道目標地址,因此通常在寄存器間
19、接跳轉之間,才把地址從存儲器載入到寄存器中。30另一個問題就是跳轉的目標地址離跳轉指令有多遠。了解跳轉距離的分布有助于選擇轉移所使用的位移量,進一步影響指令長度和編碼。分支距離 用轉移指令與目標之間的指令數來表示轉移距離。在定點程序中最常見的轉移間隔可用48位來編碼,這告訴我們較短的位移量字段對轉移通常是足夠的。31名稱舉例如何測試條件優點缺點條件碼(CC)80 x86,ARM,PowerPC,SPARC,SuperH由ALU操作設定的某些特定位,可能是由程序控制的有時條件可自由設置CC是附加狀態。條件碼強制改變指令順序,因為它把信息從一條指令傳送給一個轉移條件寄存器Alpha,MIPS用比較
20、結果測試任意寄存器簡單占用一個寄存器比較并轉移PA-RISC,VAX比較是轉移的一部分,通常比較只限于子集內部一個轉移是一條而不是兩條指令對流水線執行來說,一條指令要做的事情可能太多了大多數改變程序流程的指令是轉移,如何指明轉移條件就顯得十分重要。條件轉移的可選方案32條件轉移的特點就是大量的比較僅僅是簡單的測試,而且大部分是測試某個值是否為0。不同類型條件轉移中的頻率條件轉移中使用的不同比較情形的頻率分布小于等于轉移占主要地位。(跟編譯器有主要關系)33過程調用的方式 過程調用和返回包括控制轉移,可能還包括狀態的保存,至少要保存返回地址。 有兩種基本、傳統的方法用來保存寄存器:調用者保存和被
21、調用者保存。調用者保存:調用其他過程時,必須保存在調用過程之后還要使用的寄存器,被調用者則無須維護這些寄存器。被調用者保存:被調用的過程必須保存它要使用的寄存器,調用者則不受這種限制。342.6控制流指令有時候,由于兩個不同的過程都用到全局變量的訪問模式,因此必須使用調用者保存方法: 假設進程P1調用進程 P2,且這兩個進程對同一個全局變量x進行操作。如果P1在調用 P2之間已經將x載入到寄存器中,那么必須在調用 P2之前把x存在一個P2可以訪問的地方。編譯器很難發現被調用的進程使用了哪些變量,因為每個部分是分別編譯的。另外還有一種情況,被調用的進程P2可能本身并不訪問x,而是調用了另外一個進
22、程來訪問變量x。因為這種情況很復雜,在大多數編譯器中,由調用的進程保存本次調用中可能用到的所有變量。 在兩種方法都可以使用的情況下,有的程序適用于調用者保存,有的程序適用于被調用者保存。因此,大多數實際使用的編譯器會結合這兩種方法。這種方法需要應用程序二進制接口(ABI)來指定變量采用哪種保存方式。352.7 指令系統的編碼對指令進行編碼時,寄存器和尋址方式的數量對指令的大小有明顯的影響,因為在一條指令中,寄存器字段和地址字段都可能出現很多次。實際上,大多數指令用于尋址方式和寄存器編碼上的位數比用在操作碼上的位數還要多。對指令進行編碼時,應該在下面的幾個因素之間找到一個最佳平衡點:1、盡可能多
23、的寄存器和尋址方式。2、平均指令長度中用來存放寄存器和尋址方式的字段盡量少,從而使程序盡量小。3、指令的長度應該易于用流水線處理。36三種常見編碼方式操作和操作數個數地址標識符1地址字段1地址標識符n地址字段n操作地址字段1地址字段2地址字段3操作地址標識符地址字段操作地址標識符1地址標識符2地址字段操作地址標識符地址字段1地址字段2(a)變長編碼(如VAX和Intel 80 x86)(b)定長編碼(如Alpha,ARM,MIPS,PowerPC,SPARK,SuperH)(c)混合編碼(如IBM360/370,MIPS16,Thumb, TI TMS320C54x)支持多個操作數,代碼長度通
24、常最小。代碼長度通常最大。以減輕多種結構的指令帶來的工作負擔,但仍提供多種指令長度以減少代碼長度。37適合尋址方式和操作比較多的情形適合尋址方式和操作比較少的情形變長編碼的例子X86指令:Add EAX, 1000(EBX)Add是有兩個操作數的32位加法指令,其中操作碼1個字節;地址標識符占1個字節,用于確定源或目標寄存器(EAX)和尋址方式及第二個操作數的基址寄存器(EBA);地址字段4個字節指令長度為1+1+4=6字節X86指令長度從1字節到7字節不等。它的程序通常比使用定長編碼的RISC程序要小。38RISC中的精簡代碼 混合編碼方式,包括16位和32位指令。較短的指令支持較少的操作,
25、較小且相近的地址和較少的寄存器,同時還放棄了典型RISC的三地址指令格式而采用兩地址格式。(ARM Thumb,MIPS 16)IBM CodePack:將標準指令壓縮,添加新硬件來譯碼。指令Cache只保存32位指令,壓縮的指令留在存儲器、ROM和磁盤中。編譯器無須修改就可以處理不同的指令系統,而且指令的譯碼也很容易。SuperH:為配合較短的指令格式和較少的操作,這種指令系統只有16個寄存器而不是32個,但其它方面均與典型的RISC系統類似。392.8 編譯器的角色編譯器對計算機的性能影響很大,如果想要設計或高效率地實現一個指令系統,就要理解編譯技術。系統的選擇的選擇除了會影響機器產生代碼
26、的質量外,還將影響為該機器構建一個高效編譯器的復雜度。4041編譯器的首要功能是正確性,其次是編譯后的運行速度編譯器把高級的、抽象的表示方式逐步轉換成低級的表示方式編譯器通常包括2-4遍掃描編譯器的結構近代編譯器一般包括24遍掃描,而性能更高的編譯器包括更多次的掃描。這種結構最大限度地提高了在相同輸入前提下以不同的優化級別編譯的程序可以產生相同輸出的可能性。 當編譯的目標是更高的編譯速度同時較低的代碼質量能被接受時,優化掃描可以被跳過。一遍掃描簡單來說就是編譯器讀取并且翻譯整個程序的一個步驟。供貨掃描被設計成一個可選項。由于優化掃描是獨立的,因此不同的語言可以使用相同的優化與代碼生成步驟。對于
27、一個新的語言,只需要一個新的前端程序就可以了。42編譯器優化方式的分類高層優化,一般在源碼上進行,同時把輸出傳遞給以后的優化掃描步驟。局部優化,僅在一系列代碼片段之內將代碼優化。全局優化,將局部優化擴展為跨越分支,并且引入一組針對優化循環的轉換。寄存器分配,將寄存器和操作數聯系起來。處理器相關的優化,充分利用特定的系統結構。43由于寄存器分配在加速代碼和使其他優化發揮作用這兩方面扮演核心角色,因而是最重要的優化方案之一。寄存器分配 分配算法基于圖著色的算法,其基本思想是:構造一個圖,用它來代表分配寄存器的各個可能候選方案,然后用此圖來分配寄存器。即如何用有限的顏色使圖中相鄰的節點分別著以不同的
28、顏色。這種方法要強調是要100%地完成活動變量的分配。圖著色是一個NP完全問題,有些啟發式算法在實際中效果不錯。在全局分配中如果能夠有16個(最好更多)通用寄存器用于整形變量,同時另有其他的寄存器用于浮點數,在這種情況下,圖著色將會正常工作。44下圖列出了優化轉換用于源程序的頻率。優化名稱 說明在優化轉換中所占比例高級語言層接近或者在源代碼級,與機器無關過程集成用過程體替代過程調用未被測試局部在一系列代碼中公共子表達式消去用一份副本替代一個計算的兩個實例18%常量傳遞把所有分配了一個常量的變量的實例用該常量替換22%堆棧高度縮減重新安排表達式樹使表達式計算所需要的資源最少未被測試全局跨越分支全
29、局公共子表達式消去與局部的方法相同,但是這里會跨越分支13%副本傳遞用X(如A=X)替換已經賦值以X的變量A的所有實例11%代碼移動把循環中每次迭代計算同一變量的代碼從循環中移動16%歸納變量消去在循環中簡化或者消去數組地址的計算2%處理器相關依賴處理器結構長度縮減有很多例子,如用一個常數的加法和移位來代替乘法未被測試流水線調度重新對指令進行排序以改進流水線的性能未被測試分支偏移優化選擇到達目標的最短分支位移路徑未被測試45在12個小型FORTRANT和Pascal程序中一些普通優化的靜態頻率。下圖所示為兩個程序采用不同的優化方法對指令執行時間產生的影響。11%100%12%21%100%76
30、%76%84%0級:未優化1級:局部優化、代碼調度和局部寄存器分配2級:全局優化、循環轉換和全局寄存器分配3級:過程集成SPEC2000中的Iucas和mcf兩個指令條數的變化46編譯技術對系統結構設計者的決策所產生的影響兩個重要問題:變量是如何分配和尋址的?需要多少個寄存器才能有效地分配變量?首先需了解語言在何處分配數據:堆棧,被用來分配局部變量。在過程調用或過程返回時堆棧會相應增大或縮小。堆棧用于記錄,而不是計算表達式。數值一般不會被壓入堆棧。全局數據區,用來分配靜態聲明的對象,如全局變量和常量。這些對象大部分是數組或其他聚合數據結構。堆,用來分配那些不適于放在堆棧中的動態對象。堆中的對象
31、要用指針來訪問。47編譯技術對系統結構設計者的決策所產生的影響 為堆棧分配對象進行寄存器分配要比對全局變量更加有效,而寄存器分配對于堆分配對象來說基本上是不可能的,因為后者是使用指針進行訪問的。 全局變量以及某些堆變量也不可能進行分配,因為它們具有“別名”,即有多種不同方式可以訪問這個變量的地直,這使得將它放入寄存器是非法的。48系統結構設計者對編譯器設計者的技術支持遵循原則:確保經常出現的事件要盡量快且正確,而不經常出現的事件則一定正確。一些有助于編譯器設計者的系統特性:規則性:操作、數據類型和尋址方式要正交。若每一種操作可采用任一種尋址方式,稱為正交,有助于簡化代碼的生成。提供原語,而不是
32、解決方案,只適合某一種語言結構的特性通常沒有太大用處。在取舍時考慮簡化的折中:例,一個變量應該被訪問多少次后放入寄存器比較好。但出現Cache和流水線后,折中變得復雜。對于編譯時作為常量的數值量,提供能將其確定為常量的指令。492.9 MIPS系統結構一種簡單64位load-store系統結構設計上重視流水線效率,包括固定長度指令編碼。使編譯器更容易產生高效的目標代碼。MIPS的寄存器32個64位通用寄存器(GPR):R0,R1,R3132個浮點寄存器(FPR):F0,F1, ,F31,即可以作為32個32位單精度寄存器來使用(存儲單精度浮點數時,另一半未使用),也可以作為32個64位雙精度寄
33、存器來使用。MIPS提供單精度和雙精度操作(32位和64位),還提供一個64位寄存器上的兩個單精度的操作。R0的值永遠是0。50MIPS的數據類型定點數據類型有8位字節、16位半字、32位字和64位雙字,浮點數有32位單精度和64位雙精度浮點數。MIPS的操作是面向64位定點以及32位或64位浮點數的。字節、半字或者字在調入64位寄存器中時,用零或者符號來填充64位寄存器的剩余部分。51MIPS的數據傳輸和尋址方式MIPS數據尋址方式只有立即數和位移量方式兩種,這兩種方式都是16位的。寄存器間接尋址是通過把0放入16位位移字段中完成的。16位絕對尋址字段是通過 R0作為基址寄存器完成的。MIP
34、S的存儲器是用64位地址字節尋址的。有一個供軟件選擇的模式位來決定是高位字節先傳格式還是低位字節先傳格式。但必須是load-store方式。存儲器訪問可以是一個字節、半字或字。但訪問地址必須對齊。52MIPS的指令格式由于MIPS只有兩種尋址方式,所以它們可以編碼到操作碼中。為了使機器更容易進行流水線操作和譯碼,所有指令都是32位的,其中6位是基本操作碼。MIPS指令格式I型指令65516Opcodersrt立即數操作 編碼:加載/存儲字節、半字、字、雙字。 所有立即數(rt rs op 立即數操作) 條件分支指令(rs表示寄存器) 跳轉寄存器、跳轉并鏈接寄存器(rs表示目標,立即數為0)R型
35、指令655556Opcodersrtrdshamtfunct 寄存器-寄存器ALU操作:rdrs funct rt 函數編碼數據通路操作:Add,Sub, 讀/寫專用寄存器和數據移動J型指令626Opcode加到PC的偏移量 跳轉,跳轉并鏈接 陷阱和從異常中返回532.9 MIPS系統結構指令舉例指令名稱含義LD R1,30(R2)載入雙字RegsR164Mem30+RegsR2LD R1,1000(R0)載入雙字RegsR164Mem1000+0LW R1,60(R2)載入字RegsR164(Mem60+RegsR20)32#Mem60+RegsR2LB R1,40(R3)載入字節RegsR
36、164(Mem40+RegsR30)56#Mem40+RegsR3LBU R1,40(R3)載入無符號字節RegsR164056#Mem40+RegsR3LH R1,40(R3)載入半字RegsR164(Mem40+RegsR30)48# Mem40+RegsR3#Mem41+RegsR3L.S F0,50(R3)載入單精度浮點數RegsF064Mem50+RegsR3#032L.D F0,50(R2)載入雙精度浮點數RegsF064Mem50+RegsR2SD R3,500(R4)存儲雙字Mem500+RegsR464RegsR3SW R3,500(R4)存儲字Mem500+RegsR332
37、RegsR332.63S.S F0,40(R3)存儲單精度浮點數Mem40+RegsR332RegsF00.31S.D F0,40(R2)存儲雙精度浮點數Mem40+RegsR364RegsF0SH R3,502(R2)存儲半字Mem502+RegsR216RegsR3148.63SB R2,41(R3)存儲字節Mem41+RegsR332RegsF056.63MIPS操作大致可以分為四類:載入和存儲、ALU操作、分支與跳轉以及浮點操作。54MIPS操作當被傳送的數據長度不確切時,在符號上附加一個下標,表示傳送n位。下標用于標識字段中特定的位。位從以0開始的最高位開始標注。變量Mem用來表示主
38、存儲器(內存),按字節編址,可以傳輸任意字節的數據。上標用來表示對字段進行復制。符號#用來鏈接兩個字段并且可以出現在數據傳送的任何一邊。55MIPS操作 所有的ALU指令都是寄存器-寄存器指令。下圖給出了一些算術和邏輯指令的例子,包括算術和邏輯操作:加、減、與、或、異或和移位。所有這些指令都支持立即尋址方式,它帶一個16位的符號擴展立即數。指令舉例指令名稱含義DAADU R1,R2,R3無符號加RegsR1RegsR2+RegsR3DAADIU R1,R2,#3加無符號立即數RegsR1RegsR2+3LUI R1,#42載入立即數到高位RegsR1032#42#016DSLL R1,R2,#
39、5 邏輯左移立即數RegsR1RegsR25DSLT R1,R2,R3置小于If(RegsR1RegsR2)RegsR11 else RegsR1056MIPS比較指令 MIPS也有比較指令,比較兩個寄存器的值。如果第一個寄存器的值小于第二個的值,則比較指令將置目標寄存器為1(代表真),否則將置為0(代表假)。由于這些操作都設置寄存器,因此它們稱為置等于、置不等于和置小于,等待。同時這些比較指令也具有立即數的形式。控制由一組跳轉與一組分支來處理。57MIPS控制流指令指令舉例指令名稱含義J name跳轉PC36.63nameJAL name跳轉并鏈接RegsR31PC+8;PC36.63nam
40、e;(PC+4)-227)name(PC+4)+227)JALR R2寄存器跳轉并鏈接RegsR31PC+8;PCRegsR2JR R3寄存器跳轉PCRegsR3;BEQZ R4,name等于零時分支If(RegsR4=0) PCname;(PC+4)-227)name(PC+4)+227)BNE R3,R4,name不等于零時分支If(RegsR3!=(RegsR4) PCname;(PC+4)-217)name(PC+4)+217)MOVZ R1,R2,R3等于零時轉換If(RegsR3=0) RegsR1RegsR2所有的控制指令,除了以寄存器中的地址為目標地址進行的跳轉以外,都是PC相
41、對的。分支轉移的距離通過超過了地址字段所能提供的距離:由于MIPS指令提32位長,所以把字節分支地址乘以4得到較長的地址。16位帶符號數左移2位與PC相加26位帶符號數左移2位覆蓋PC58MIPS的浮點操作浮點指令對浮點數寄存器進行操作,并指出將被使用的操作數是單精度(SP)還是雙精度(DP)。MOV.S和MOV.D分別把一個單精度浮點數寄存器的值復制到另一個同類型的寄存器中。MFC1,MTC1,DMFC1和DMTC1在一個單精度或雙精度浮點數寄存器和一個定點寄存器之間傳送數據。浮點操作包括加、減、乘、除。后綴S表示單精度浮點數,而后綴D表示雙精度浮點數。 為提高圖形處理性能,MIPS64提供
42、了在一個64位浮點數寄存器兩半部分中分別進行兩個32位浮點數的操作。592.9 MIPS系統結構MIPS指令系統的使用 為了說明哪些指令更常用,后圖給出了5個SPECint2000程序的指令類別和指令調用頻率。60612.9 MIPS系統結構MIPS指令系統的使用下圖給出了5個SPECfp2000程序的指令類別和指令調用頻率。62632.10 謬誤和易犯的錯誤易犯的錯誤:設計一種“高級”指令系統特性就意味著要支持一種高級語言結構。 試圖將高級語言的特征并入指令系統中使得設計者們設計出一些靈活性很強、強有力的指令。但是,這些指令經常會做些需求以外的工作,或者不能準確地符合一些語言的要求。曾經有很
43、多的努力花在20世紀70年代稱為“語義缺口”的問題上。雖然出發點是想補充指令系統使得硬件的功能達到語言的水平,但是,這些增加的功能卻又導致了被Wulf1984稱為語義沖突的問題: 由于給指令賦予了過多內容,因此機器的設計者僅能夠在有限的環境中使用指令。 對于經常發生的情況來說,這種指令的功能通常過于強大,這就導致了許多不必要的工作以及指令速度的降低。642.10謬誤和易犯的錯誤謬誤:存在一種典型的程序。 很多人都傾向于相信存在一個典型的程序,可以用它來設計一個理想的指令系統。我們可以參考綜合基準測試程序,其中的數據清楚地表明程序在使用指令系統方面存在顯著的差別。例如,如下圖所示的在四個SPEC
44、2000的程序中數據傳輸大小的情況:很難說這四個程序中哪一個是典型的。對于專門支持一類應用的指令系統,這種差異可能會更大,例如十進制指令在其他應用中就不會被使用。652.10謬誤和易犯的錯誤謬誤:存在一種典型的程序。662.10謬誤和易犯的錯誤易犯的錯誤:可以不考慮編譯器而改進指令系統以縮減代碼大小。下表顯示的MIPS指令系統下四個編譯器產生的相對代碼大小。盡管設計師努力使代碼減少了30%40%,不同的編譯器策略卻更大程度地影響著代碼的大小。就像性能優化技術一樣,在試圖改進硬件以節約空間之間首先應該考慮編譯器如何產生較少的代碼。編譯器Apogee softwareVersion 4.1Green hillsMulti2000 V 2.0AlgorithmicsSde 4.0bIdt/c 7.2.1系統結構MIPS IVMIPS IVMIPS 32MIPS 32處理器NEC VR5432NEC VR5000IDT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外貿快遞銷毀方案范本
- 浙江移動充電樁施工方案
- 2024年項目管理盲點的識別與應對試題及答案
- 項目管理流程優化的試題及答案
- 2025年證券從業資格考試概覽試題及答案
- 文物鑒定估價方案范本
- 證券投資的風險管理與控制考題及答案
- 2024年秘書證考試學習經驗分享試題及答案
- 2024年項目管理專業考題及答案
- 2025年家庭理財規劃知識試題及答案
- 中國輸電線路在線監測系統行業發展狀況及前景規模調查報告2025-2030年
- 第18課《井岡翠竹》課件-2024-2025學年統編版語文七年級下冊
- 2025年河南林業職業學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 消防安全監督與檢查要點
- 【MOOC】《思想道德與法治》(東南大學)章節中國大學慕課答案
- 骨盆骨折圍手術期護理
- 2024年醫院職工獎懲辦法實施細則范例(3篇)
- 人教版小學數學三年級下冊《奧數競賽試卷》
- 2024年吉林省吉林市中考化學真題含解析
- 地鐵運營管理
- 現場巡檢與安全檢查管理制度
評論
0/150
提交評論