版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)體系結(jié)構(gòu)/sundae_meng第2章指令集結(jié)構(gòu)設(shè)計(jì)
2.1指令集結(jié)構(gòu)分類
2.2尋址方式
2.3指令格式
2.4操作數(shù)的類型、表示和大小
2.5指令集功能設(shè)計(jì)
2.6編譯技術(shù)與計(jì)算機(jī)體系結(jié)構(gòu)
2.7DLX指令集結(jié)構(gòu)/sundae_meng指令集設(shè)計(jì)instructionsetsoftwarehardware指令集結(jié)構(gòu):我們必須說明那些東西?InstructionFetchInstructionDecodeOperandFetchExecuteResultStoreNextInstruction指令格式或編碼方式。即如何編碼?操作數(shù)和操作結(jié)果的存放位置存放位置?多少個(gè)顯式操作數(shù)?存儲器操作數(shù)如何定位?哪些操作數(shù)可以或不可以放到存儲器中?數(shù)據(jù)類型和大小支持哪些操作下一條指令地址jumps,conditions,branchesfetch-decode-executeisimplicit!2.1ISA的基本分類累加器型(Accumulator)(1register): 1address addA
acc?acc+mem[A] 1+xaddress addxA acc?acc+mem[A+x]堆棧型(Stack): 0address add
tos?tos+next通用寄存器型(GeneralPurposeRegister): 2address addAB
EA[A]?EA[A]+EA[B] 3address addABC
EA[A]?EA[B]+EA[C]Load/Store: 3address addRaRbRc
Ra?Rb+Rc
loadRaRb
Ra?mem[Rb]
storeRaRb
mem[Rb]?Ra比較指令條數(shù)Codesequencefor(C=A+B)forfourclassesofinstructionsets:StackAccumulatorRegister(load-store)PushALoadALoadR1,APushBAddBLoadR2,BAddStoreCRegister(register-memory)LoadR1,AAddR1,BStoreC,R1AddR3,R1,R2PopCStoreC,R3°1975以后至今
幾乎所有的機(jī)器都用通用寄存器結(jié)構(gòu)°原因?寄存器比存儲器快?對編譯器而言寄存器更容易使用-例如(A*B)–(C*D)–(E*F)其中的乘法操作可以以任意序計(jì)算,但堆棧型
結(jié)構(gòu)不行?寄存器可以存放變量-減少訪存量,提高程序效率
-代碼緊湊通用寄存器型占主導(dǎo)地位通用寄存器的分類分類原則:ALU指令到底是兩地址指令還是三地址指令A(yù)LU指令中有多少個(gè)操作數(shù)可以用存儲器尋址,即有多少個(gè)存儲器操作數(shù)NumberofmemoryaddressespertypicalALUinstructionMaximumnumberofoperandsallowedforatypicalALUinstructionExamples02IBMRT-PC
3SPARC,MIPS,HPPrecisionArchitecture12PDP-10,Motorola68000,IBM360
3PartofIBM360(RSinstructions)22PDP-11,National32x32,partofIBM360(SSinstructions)
3
33VAX(alsohastwooperandformats)常見的三種通用寄存器型指令集結(jié)構(gòu)的優(yōu)缺點(diǎn)TypeAdvantagesDisadvantagesRegister–register(0,3)Simple,fixed-lengthinstructionen-coding.Simplecodegenerationmodel.Instructionstakesimilarnumbersofclockstoexecute.Higherinstructioncountthanarchitectureswithmemoryreferencesininstructions.Someinstructionsareshortandbitencodingmaybewasteful.Register–memory(1,2)Datacanbeaccessedwithoutloadingfirst.Instructionformattendstobeeasytoencodeandyieldsgooddensity.Operandsarenotequivalentsinceasourceoperandinabinaryoperationisdestroyed.Encodingaregisternumberandamemoryaddress
ineachinstructionmayrestrictthenumber
ofregisters.CPIvariesbyoperandlocation.Memory–memory(3,3)Mostcompact.Doesn’twasteregistersfortemporaries.Largevariationininstructionsize,espe-ciallyforthree-operandinstructions.Also,largevariationinworkperinstruction.Memoryaccessescreatememorybottleneck.2.2尋址技術(shù)1980年以來幾乎所有機(jī)器的存儲器都是按字節(jié)編址的ISA設(shè)計(jì)要關(guān)注兩個(gè)問題:8bits-字節(jié),16bits-半字,32bits-字,64bits-雙字如何讀32位字,兩種方案每次一個(gè)字節(jié),四次完成每次一個(gè)字,一次完成問題:(1)如何將字節(jié)地址映射到字地址(2)一個(gè)字是否可以存放在任何字節(jié)邊界上即尾端(Endian)和對齊問題尾端問題littleendian,bigendian,在一個(gè)字內(nèi)部的字節(jié)順序問題,如地址xxx00指定了一個(gè)字(int),存儲器中從xxx00處連續(xù)存放ffff0000,則有兩種方式:Littleendian方式下xxx00位置是字的最低字節(jié),整數(shù)值為0000ffff,Intel80x86,DECVax,DECAlpha(WindowsNT)Bigendian方式下xxx00位置是字的最高字節(jié),整數(shù)值為ffff0000,IBM360/370,Motorola68k,MIPS,Sparc,HPPA對齊問題對一個(gè)s字節(jié)的對象訪問,地址為A,如果Amods=0那么它就是邊界對齊的。邊界對齊的原因是存儲器本身讀寫的要求,存儲器本身讀寫通常就是邊界對齊的,對于不是邊界對齊的訪問可能要導(dǎo)致存儲器的兩次訪問,然后再拼接出所需要的數(shù)。AddressingmodeExampleMeaningRegisterAddR4,R3R4?R4+R3ImmediateAddR4,#3R4?R4+3DisplacementAddR4,100(R1)R4?R4+Mem[100+R1]RegisterindirectAddR4,(R1)R4?R4+Mem[R1]Indexed/BaseAddR3,(R1+R2)R3?R3+Mem[R1+R2]DirectorabsoluteAddR1,(1001)R1?R1+Mem[1001]MemoryindirectAddR1,@(R3)R1?R1+Mem[Mem[R3]]Post-incrementAddR1,(R2)+R1?R1+Mem[R2];R2?R2+dPre-decrementAddR1,–(R2)R2?R2–d;R1?R1+Mem[R2]Scaled
AddR1,100(R2)[R3]R1?
R1+Mem[100+R2+R3*d]尋址方式各種尋址方式的使用情況?(忽略寄存器直接尋址)3programsmeasuredonmachinewithalladdressmodes(VAX)Displacement: 42%avg,32%to55%75%Immediate: 33%avg,17%to43%85%Registerdeferred(indirect):13%avg,3%to24%Scaled: 7%avg,0%to16%Memoryindirect: 3%avg,1%to6%
Misc: 2%avg,0%to3%75%displacement&immediate85%displacement,immediate®isterindirect偏移量字段大小的使用情況°Avg.of5SPECint92programsv.avg.5SPECfp92programs°1%的偏移地址長度>16-bits°偏移字段12-16bits可支持75%-99%的基于偏移尋址方式的數(shù)據(jù)訪問AddressBits立即數(shù)大小?用8位可滿足50%to60%需求?用16位可滿足75%to80%需求尋址方式小結(jié)重要的尋址方式:偏移尋址方式,立即數(shù)尋址方式,寄存器尋址方式
偏移字段的大小應(yīng)該在12to16bits
立即數(shù)字段的大小應(yīng)該在8to16bits2.3指令格式Variable:Fixed:Hybrid:……指令格式選擇策略?如果代碼長度最重要,那么使用變長指令格式
如果性能至關(guān)重要,使用固定長度指令
有些嵌入式機(jī)器附加可選模式,由每一應(yīng)用自己選擇性能還是代碼量
有些機(jī)器使用邊執(zhí)行邊解壓的方式指令格式如果每條指令存在多個(gè)存儲器操作數(shù),或有多種尋址方式
=>每一操作數(shù)都要說明其尋址方式
對于Load-store型機(jī)器,每條指令有一個(gè)存儲器地址,并且只有1到2種尋址方式
=>可以將尋址方式反映在操作碼中MIPS尋址方式/指令格式oprsrtrdimmedregisterRegister(direct)oprsrtregisterBase+index+MemoryimmedoprsrtImmediateimmedoprsrtPCPC-relative+Memory所有指令都是32位寬
RegisterIndirect?2.4操作數(shù)的類型、表示和大小操作數(shù)類型和操作數(shù)表示也是軟硬件的主要界面之一。操作數(shù)類型:是面向應(yīng)用、面向軟件系統(tǒng)所處理的各種數(shù)據(jù)結(jié)構(gòu)。整型、浮點(diǎn)型、字符、字符串、向量類型等、十進(jìn)制類型由操作碼確定或數(shù)據(jù)附加硬件解釋的標(biāo)記,一般采用由操作碼確定操作數(shù)的表示:硬件結(jié)構(gòu)能夠識別,指令系統(tǒng)可以直接調(diào)用的結(jié)構(gòu)整型:原碼、反碼、補(bǔ)碼浮點(diǎn):IEEE754標(biāo)準(zhǔn)十進(jìn)制:BCD碼,二進(jìn)制十進(jìn)制表示操作數(shù)的大小基準(zhǔn)測試的結(jié)論:(1)對單字、雙字的數(shù)據(jù)訪問具有較高的頻率(2)定義操作數(shù)字段長度為64位,更具有一般性2.5指令集結(jié)構(gòu)的功能設(shè)計(jì)CISC計(jì)算機(jī)指令集結(jié)構(gòu)的功能設(shè)計(jì)RISC計(jì)算機(jī)指令結(jié)構(gòu)的功能設(shè)計(jì)控制類指令典型操作類型(ISA到底應(yīng)該支持哪些操作)數(shù)據(jù)傳送類Load(frommemory)Store(tomemory)memory-to-memorymoveregister-to-registermoveinput(fromI/Odevice)output(toI/Odevice)push,pop(to/fromstack)算術(shù)運(yùn)算類integer(binary+decimal)orFPAdd,Subtract,Multiply,Divide邏輯運(yùn)算not,and,or,set,clear移位shiftleft/right,rotateleft/right控制類(Jump/Branch)unconditional,conditional子程序調(diào)用類call,return異常處理類trap,return同步操作類test&set字符串類search,translate圖形處理(MMX)parallelsubwordops(416bitadd)ISA對操作類型的選擇需考慮的因素:速度、價(jià)格和靈活性基本要求:指令系統(tǒng)的完整性、規(guī)整性、高效率和兼容性完整性設(shè)計(jì):具備基本指令種類兼容性:系列機(jī)高效率:指令執(zhí)行速度快、使用頻度高規(guī)整性讓所有運(yùn)算部件都能對稱、均勻的在所有數(shù)據(jù)存儲單元之間進(jìn)行操作。對所有數(shù)據(jù)存儲單元都能同等對待,無論是操作數(shù)或運(yùn)算結(jié)果都可以無約束地存放到任意數(shù)據(jù)存儲單元中當(dāng)前對這一問題的處理有兩種截然不同的方向CISC和RISCCISC計(jì)算機(jī)ISA的功能設(shè)計(jì)目標(biāo):強(qiáng)化指令功能,減少指令的指令條數(shù),以提高系統(tǒng)性能基本優(yōu)化方法 1.面向目標(biāo)程序的優(yōu)化 面向目標(biāo)程序的優(yōu)化是提高計(jì)算機(jī)系統(tǒng)性能的最直接方法,其指標(biāo)主要縮短程序的長度縮短程序的執(zhí)行時(shí)間優(yōu)化方法對大量的目標(biāo)程序機(jī)器執(zhí)行情況進(jìn)行統(tǒng)計(jì)分析,找出使用頻度高,執(zhí)行時(shí)間長的指令或指令串對于那些使用頻度高的指令,用硬件加快其執(zhí)行,對于那些使用頻度高的指令串,用一條新的指令來代替它優(yōu)化目標(biāo)程序的主要途徑1)增強(qiáng)運(yùn)算型指令的功能如sin(x),Cos(x),SQRT(X),甚至多項(xiàng)式計(jì)算如用一條三地址指令完成P(X)=C(0)+C(1)X+C(2)X2+C(3)X3+…..2)增強(qiáng)數(shù)據(jù)傳送類指令的功能主要是指數(shù)據(jù)塊傳送指令R-R,R-M,M-M之間的數(shù)據(jù)塊傳送可有效的支持向量和矩陣運(yùn)算,如IBM370R-Stack之間設(shè)置數(shù)據(jù)塊傳送指令,能夠在程序調(diào)用和程序中斷時(shí),快速保存和恢復(fù)程序現(xiàn)場,如VAX-113)增強(qiáng)程序控制指令的功能在CISC中,一般均設(shè)置了多種程序控制指令,正常僅需要轉(zhuǎn)移指令和子程序控制指令2.面向高級語言和編譯程序改進(jìn)指令系統(tǒng)
主要時(shí)縮小HL-ML之間的差距1)增強(qiáng)面向HL和Compiler支持的指令功能在用高級語言編寫的源程序中,對各種語句的使用頻度和執(zhí)行時(shí)間進(jìn)行統(tǒng)計(jì)分析,對使用頻度高、執(zhí)行時(shí)間長的語句,增強(qiáng)有關(guān)指令的功能,或增加相關(guān)的專門指令,從而達(dá)到縮短目標(biāo)程序長度,減少目標(biāo)程序執(zhí)行時(shí)間的目的,同時(shí)也縮短了編譯時(shí)間例如FORTRAN語言和COBOL語言中各種主要語句的使用頻度語言一元賦值其他賦值IFGOTOI/ODOCALL其他FORTRAN31.015.011.510.56.54,56.015.0COBOL42.17.519.119.18.460.170.173.4觀察結(jié)果:(1)一元賦值在其中比例最大,增強(qiáng)數(shù)據(jù)傳送類指令功能,縮短這類指令的執(zhí)行時(shí)間是對高級語言非常有力的支持,(2)其他賦值語句中,增1操作比例較大,許多機(jī)器都有專門的增1指令(3)條件轉(zhuǎn)移和無條件轉(zhuǎn)移占22%,38.2%,因此增強(qiáng)轉(zhuǎn)移指令的功能,增加轉(zhuǎn)移指令的種類是必要的2)高級語言計(jì)算機(jī)系統(tǒng)
縮小HL和ML的差別時(shí),走到極端,就是把HL和ML合二為一,即所謂的高級語言計(jì)算機(jī)。在這種機(jī)器中,高級語言不需要經(jīng)過編譯,直接由機(jī)器硬件來執(zhí)行。如LISP機(jī),PROLOG機(jī)3)支持操作系統(tǒng)的優(yōu)化實(shí)現(xiàn)-特權(quán)指令任何一種計(jì)算機(jī)系統(tǒng)必須有操作系統(tǒng)的支撐才能工作,而OS又必須用指令系統(tǒng)來實(shí)現(xiàn),指令系統(tǒng)對OS的支持主要有處理器工作狀態(tài)和訪問方式的轉(zhuǎn)換進(jìn)程的管理和切換存儲管理和信息保護(hù)進(jìn)程同步和互斥,信號燈的管理等RISC計(jì)算機(jī)指令集結(jié)構(gòu)的功能設(shè)計(jì)采用RISC體系結(jié)構(gòu)的微處理器SUNMicrosystem:SPARC,SuperSPARC,UltaSPARCSGI:R4000,R5000,R10000,IBM:PowerPCIntel:80860,80960DEC:AlphaMotorola88100HPHP300/930系列,950系列從CISC到RISC1975IBM公司率先組織力量,研究指令系統(tǒng)的合理性問題,JohnCoche(1987年圖靈獎(jiǎng)獲得者)1979年IBM801,1986年推出IBMRTPC1979DavidPattern研究了CISC指令系統(tǒng)主要存在以下幾方面的問題:見p471981:Patterson等人研制成功了32位RISCI微處理器。31種指令,三種數(shù)據(jù)類型,只有變址和相對尋址兩種尋址方式,字長32位1983:RISCIIRISC的定義和特點(diǎn)RISC是一種計(jì)算機(jī)體系結(jié)構(gòu)的設(shè)計(jì)思想,它不是一種產(chǎn)品。RISC是近代計(jì)算機(jī)體系結(jié)構(gòu)發(fā)展史中的一個(gè)里程碑,直到現(xiàn)在,RISC還沒有一個(gè)確切的定義CMU的一篇論文選擇論述RISC的特點(diǎn)大多數(shù)指令在單周期內(nèi)完成采用Load/Store結(jié)構(gòu)硬布線控制邏輯減少指令和尋址方式的種類固定的指令格式注重代碼的優(yōu)化從目前的發(fā)展看,RISC體系結(jié)構(gòu)還應(yīng)具有如下特點(diǎn):面向寄存器結(jié)構(gòu)十分重視流水線的執(zhí)行效率-盡量減少斷流重視優(yōu)化編譯技術(shù)90年代,IEEE的MichaelSlater對RISC的定義做了如下描述:RISC為使流水線高效執(zhí)行,應(yīng)具有如下特征:簡單而統(tǒng)一格式的指令譯碼大部分指令可以單周期執(zhí)行完成只有Load/Store指令訪存簡單尋址方式采用Load延遲技術(shù)RISC為使優(yōu)化編譯便于產(chǎn)生優(yōu)化代碼,應(yīng)具有如下特征:三地址指令格式較多的寄存器對稱的指令格式減少指令平均執(zhí)行周期數(shù)是RISC思想的精華問題RISC的指令系統(tǒng)精簡了,CISC中的一條指令可能由一串指令才能完成,那么為什么RISC執(zhí)行程序的速度比CISC還要快?
ExecuteTime=CPIXICXTICCPITCISC12~1533ns~5nsRISC1.3~1.41.1~1.410ns~2nsIC:實(shí)際統(tǒng)計(jì)結(jié)果,RISC的IC只比CISC長30%~40%CPI:CISCCPI一般在4~6之間,RISC一般CPI=1,Load/Store為2T:RISC采用硬布線邏輯,指令要完成的功能比較簡單,RISC為什么會減少CPI硬件方面:硬布線控制邏輯,減少指令和尋址方式的種類,使用固定格式,采用Load/Store,指令執(zhí)行過程中設(shè)置多級流水線。軟件方面:十分強(qiáng)調(diào)優(yōu)化編譯的作用RISC的關(guān)鍵技術(shù)延時(shí)轉(zhuǎn)移技術(shù)指令取消技術(shù)重疊寄存器窗口技術(shù)指令流調(diào)整技術(shù)硬件為主固件為輔Top1080x86Instructions操作類型小結(jié)以下指令類型使用頻度最高,指令系統(tǒng)應(yīng)該支持這些類型的指令load,store,add,subtract,moveregister-register,and,shift,compareequal,comparenotequal,branch,
jump,call,return;控制指令Jump無條件轉(zhuǎn)移,branch條件轉(zhuǎn)移四種控制流的改變條件分支Conditionalbranches使用頻率最高,目標(biāo)地址的指定,條件碼的實(shí)現(xiàn)跳轉(zhuǎn)Jumps過程調(diào)用Procedurecalls過程返回Procedurereturns如p49圖2.5所示四種控制指令的使用頻度P49表2.9表示分支條件的主要技術(shù)及其優(yōu)缺點(diǎn)轉(zhuǎn)移目標(biāo)地址與當(dāng)前指令的距離分支比較類型比較比較相等和不相等最多分支轉(zhuǎn)移的方向統(tǒng)計(jì)Program%ofbackwardbranches%takenbranches%ofallcontrolinstructionsthatactuallybranchGCC26%54%63%Spice31%51%63%TeX17%54%70%Average25%53%65%2.6編譯技術(shù)與計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)使用匯編程序編程已不是主流現(xiàn)在使用匯編的人很少因此編譯器更需要ISA編譯器的主要目標(biāo)是正確性其次是目標(biāo)代碼的速度其他目標(biāo)編譯的速度編譯調(diào)試語言間的互操作性易于實(shí)現(xiàn)現(xiàn)代編譯器的典型結(jié)構(gòu)優(yōu)化類型(1/2)高級優(yōu)化-在源代碼級例如:僅一次調(diào)用的過程,采用in-line方式,避免CALL局部優(yōu)化消去公共子表達(dá)式:用臨時(shí)變量保存第一次計(jì)算的公共子表達(dá)式的值常數(shù)傳遞,將所有被賦值為常數(shù)的變量,用該常數(shù)值代替降低堆棧的深度,對表達(dá)式重新組織,盡量減少表達(dá)式求值所用的資源全局優(yōu)化-對循環(huán)和分支進(jìn)行優(yōu)化轉(zhuǎn)換代碼移動(dòng)-將在每次循環(huán)中計(jì)算相同值的代碼移到循環(huán)外面簡化或消去數(shù)組下標(biāo)的計(jì)算優(yōu)化類型(2/2)與機(jī)器相關(guān)的優(yōu)化降低計(jì)算負(fù)載如乘法用移位和加法來完成指令調(diào)度:重新組織指令序列,盡可能減少斷流現(xiàn)象分支偏移的優(yōu)化重新安排代碼,使分支偏移盡可能小StanfordUcodeCompiler優(yōu)化的效果ISA設(shè)計(jì)針對Compiler需了解的問題如何分配變量如何尋址變量需要多少寄存器優(yōu)化技術(shù)對指令使用頻度有何影響使用哪些控制結(jié)構(gòu)這些控制結(jié)構(gòu)使用頻度高級語言分配數(shù)據(jù)的區(qū)域堆棧當(dāng)前活動(dòng)記錄的局部變量全局?jǐn)?shù)據(jù)區(qū)常量和全局靜態(tài)賽結(jié)構(gòu),其中數(shù)組和其他聯(lián)合類型的數(shù)據(jù)結(jié)構(gòu)占很大比例堆用于動(dòng)態(tài)數(shù)據(jù),通常用指針訪問,一般都不是標(biāo)量寄存器分配問題堆棧對象的分配相對簡單全局變量的分配由于存在別名問題比較困難堆對象和指針對象就更困難原因:一般用指針來訪問,由于指針計(jì)算問題,使得幾乎無法分配寄存器分配是優(yōu)化的主要手段,因此在這方面的努力是非常重要的一些研究的結(jié)論減少分支語句非常困難大量的優(yōu)化使得存儲器訪問操作減少可以減少一些ALU操作,但通常也比較少。結(jié)果是控制類指令在統(tǒng)計(jì)上占較大比例
控制類指令很難加速編譯技術(shù)與計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)小結(jié)?有利于編譯器的ISA°規(guī)整性:沒有特殊的寄存器,例外情況盡可能少,所有操作數(shù)模式可用于任何數(shù)據(jù)類型和指令類型,要求操作、數(shù)據(jù)類型和尋址方式必須正交,有利于簡化代碼生成過程?!阃暾?支持基本的操作和滿足目標(biāo)應(yīng)用系統(tǒng)的需求°幫助編譯器設(shè)計(jì)者了解各種代碼序列的執(zhí)行效率和代價(jià),有助于編譯器的優(yōu)化°對于在編譯時(shí)就已經(jīng)知道的量,提供能夠?qū)⑵渥優(yōu)槌?shù)的指令?寄存器分配是關(guān)鍵問題°寄存器數(shù)目多有利于編譯器的設(shè)計(jì)與實(shí)現(xiàn)提供至少16個(gè)通用寄存器,和獨(dú)立的浮點(diǎn)寄存器
保證所有的尋址方式可用于各種數(shù)據(jù)傳送指令
最小指令集一些統(tǒng)計(jì)比較結(jié)果一些結(jié)論Load-Store型ISA,move類指令比例大于M-M型ISALoad-Store型ISA,Branch類指令比例小于M-M型ISALoad-Store型ISA,平均CPI和T較小ISA的評價(jià)-ISA小結(jié)執(zhí)行的指令條數(shù)CPI和時(shí)鐘周期涉及控制和數(shù)據(jù)通路指令譯碼的難易程度有效地址計(jì)算的復(fù)雜程度存儲模式控制結(jié)構(gòu)的實(shí)現(xiàn)方式編碼和對齊問題是否有冗余,是否完備ISA的度量動(dòng)態(tài)度量性能分析的主要依據(jù)靜態(tài)度量一般只要代碼可以裝入存儲器,我們不太關(guān)心要關(guān)心的只是在虛擬存儲系統(tǒng)中,頁式管理的性能一些統(tǒng)計(jì)特性操作類型尋址模式有效地址定位指令和數(shù)據(jù)存取分支成功和失敗指令格式是否有利于預(yù)取操作2.7DLX目標(biāo):支持大概率事件不常用的操作由軟件來完成提供基本原語,而不是解決方案簡單的Load-Store型流水線可高效實(shí)現(xiàn)ISA容易編碼支持編譯器的優(yōu)化實(shí)現(xiàn)顯式地說明一些事情,便于優(yōu)化有較多的寄存器,便于編譯器使用DLX的結(jié)構(gòu)32個(gè)GPR,R0總是0LoadR0是沒有用的32個(gè)FPR–用于單精度或雙精度數(shù)運(yùn)算對于單精度數(shù)運(yùn)算:F0,F1,...,F31對于雙精度數(shù)運(yùn)算:F0,F2,...,F30附加一些狀態(tài)寄存器存儲器模型bigendianbyteaddressable-halfword,word,anddouble所有的訪問必須對齊裝載字節(jié)或半字時(shí),放在寄存器的低位部分,高位部分或者擴(kuò)展為符號位或者添0指令都是32位的,并且對齊存放DLX結(jié)構(gòu)(續(xù))浮點(diǎn)格式為IEEE754
單雙精度數(shù)的轉(zhuǎn)換是顯式的ALU操作總是R-R型的立即數(shù)16位尋址方式寄存器尋址,立即值尋址,偏移尋址和寄存器尋址控制類指令-jumps和branches跳轉(zhuǎn)并鏈接時(shí),返回地址在R31中目標(biāo)地址是相對與PC的偏移(最大225)或寄存器四種類型的指令-move,alu,control,fl.pt.LB,LBU,SB-loadbyte,loadbyteunsigned,storebyteLH,LHU,SH-sameasabovebutwithhalfwordsLW,SW-loadorstorewordLF,SF-load/storesingleprecisionfloatfrom/toFPR’sLD,SD-load/storedoubleprecisionfloatfrom/toFPRpairMOVI2S-movefromGPRtoaspecialregisterMOVS2I-movefromspecialregistertoaGPRMOVFP2I-move32-bitsfromanFPRtoaGPRMOVI2FP-move32-bitsfromaGPRtoanFPRDLXmove類指令舉例
LHR1,40(R3)-loadhalfword(signed)R1<-32(M[40+R3]0)16##M[40+R3]##M[41+R3]
LBUR1,40(R3)-loadbyteunsignedR1<-32024##M[40+R3]SF40(R3),F0-storefloatM[40+R3]<-32F0LDF0,40(R3)-loaddoubleF0##F1<-64M[40+R3]-(canthinkofitas2wordsbuttheyrepresenta64bitformattedvalue)SD40(R3),F0-storedoubleM[40+R3]<-32F0;M[44+R3]<-32F1-(theotherrepresentation)(big-endian)DLXALU指令I(lǐng)ntegerArithmetic(add,sub)X(signed,unsigned)X(register,immediate)e.g.ADD,ADDI,ADDU,ADDUIMULT,MUTU,DIV,DIVU-operandsinFPR’s,result=32bits
Logical(and,or,xor)X(register,immediate)e.g.AND,ANDI,OR,ORI,XOR,XORI
LHIloadsupperhalfofregisterwithimmediatevaluenoteafull32-bitimmediateconstantwilltake2instructionsDLXALU指令(續(xù))Shifts(left,right)X(logical,arithmetic)X(immediate,variable=reg)e.g.SLL,SLLI,SRAIetc.Setconditionalwellaregisteranyway(LT,GT,LE,GE,EQ,NE)X(register,immediate)e.g.SLT,SGEIputs1or0inthedestinationregisterbranchesthentestforZornonZThingstonoticecheckwhetherlogicalleftshiftscauseCCtochangelackofCCandFPstatusbitsspecifiedlackofrotatesintheshiftoptionslackofaNOToraNEGinstructionDLX的控制類指令
InstructionsBEQZ,BNEZ-GPR=0ornot,16bitoffsetfromPC+4BFPT,BFPF-branchonFPcomparebitTorFto16bitoffsetfromPC+4J-jumptoPC+26bitoffsetJR-jumpindirecttolocationspecifiedintheregisterJAL-savePC+4inR31anddoaJJALR-savePC+4inR31anddoaJRTRAP-gotoOSviaavectoredaddress(detailslater)RFE-returntousercode(detailslater)
ExamplesBEQZR4,name::=ifR4=0thenjumptonamewherenameisPC+4+/-somethinglessthan2**15DLX的浮點(diǎn)操作OPS(ADD,SUB,MULT,DIV)x(Double,Float)e.g.ADDD,ADDF,MULTF,DIVD
ConvertalwaysCVTx2y-convertxformattoyformatxorymaybeInteger,Double,Floate.g.CVTF2D,CVTI2D
Comparesformatsmustmatch(LT,GT,LE,GE,EQ,NE)X(D,F)e.g.LTD,GEFDLX的指令格式-I-typeLoadsandStoresALUopsonimmediatesrd<--rs1opimmediateConditionalbranchesrs1istheregistercheckedrdunusedimmediatespecifiestheoffset?JRandJALR:rs1istargetregisterrdandimmediateareunusedbut=0DLX指令格式?allnon-immediateALUoperations?rd<--rs1funcrs2?read/writespecialregisters?moves其他統(tǒng)計(jì)情況Page70–Page73圖2.14–2.16本章小結(jié)附件MIPSIOperationOverviewMIPSIOperationOverviewArithmeticLogical:Add,AddU,Sub,SubU,And,Or,Xor,Nor,SLT,SLTUAddI,AddIU,SLTI,SLTIU,AndI,OrI,XorI,LUISLL,SRL,SRA,SLLV,SRLV,SRAVMemoryAccess:LB,LBU,LH,LHU,LW,LWL,LWRSB,SH,SW,SWL,SWRMultiply/DivideStartmultiply,divideMULTrs,rtMULTUrs,rtDIVrs,rtDIVUrs,rtMoveresultfrommultiply,divideMFHIrdMFLOrdMovetoHIorLOMTHIrdMTLOrdWhynotThirdfieldfordestination?
(Hint:howmanyclockcyclesformultiplyordividevs.add?)RegistersHILODataTypesBit:0,1BitString:sequenceofbitsofaparticularlength4bitsisanibble8bitsisabyte16bitsisahalf-word32bitsisaword64bitsisadouble-wordCharacter:ASCII7bitcodeUNICODE16bitcodeDecimal:digits0-9encodedas0000bthru1001btwodecimaldigitspackedper8bitbyteIntegers:2'sComplementFloatingPoint:SinglePrecisionDoublePrecisionExtendedPrecisionMxREHowmany+/-#'s?Whereisdecimalpt?Howare+/-exponentsrepresented?exponentbasemantissaOperandSizeUsage
Supportforthesedatasizesandtypes:
8-bit,16-bit,32-bitintegersand
32-bitand64-bitIEEE754floatingpointnumbersMIPSarithmeticinstructionsInstruction Example Meaning Commentsadd add$1,$2,$3 $1=$2+$3 3operands;exceptionpossiblesubtract sub$1,$2,$3 $1=$2–$3 3operands;exceptionpossibleaddimmediate addi$1,$2,100 $1=$2+100 +constant;exceptionpossibleaddunsigned addu$1,$2,$3 $1=$2+$3 3operands;noexceptionssubtractunsigned subu$1,$2,$3 $1=$2–$3 3operands;noexceptionsaddimm.unsign. addiu$1,$2,100 $1=$2+100 +constant;noexceptionsmultiply mult$2,$3 Hi,Lo=$2x$3 64-bitsignedproductmultiplyunsigned multu$2,$3 Hi,Lo=$2x$3 64-bitunsignedproductdivide div$2,$3 Lo=$2÷$3, Lo=quotient,Hi=remainder Hi=$2mod$3divideunsigned divu$2,$3 Lo=$2÷$3, Unsignedquotient&remainder Hi=$2mod$3MovefromHi mfhi$1 $1=Hi UsedtogetcopyofHiMovefromLo mflo$1 $1=Lo UsedtogetcopyofLoWhichaddforaddressarithmetic?Whichaddforintegers?MIPSlogicalinstructionsInstruction Example Meaning Comment
and and$1,$2,$3 $1=$2&$3 3reg.operands;LogicalANDor or$1,$2,$3 $1=$2|$3 3reg.operands;LogicalORxor xor$1,$2,$3 $1=$2?$3 3reg.operands;LogicalXORnor nor$1,$2,$3 $1=~($2|$3) 3reg.operands;LogicalNORandimmediate andi$1,$2,10 $1=$2&10 LogicalANDreg,constantorimmediate ori$1,$2,10 $1=$2|10 LogicalORreg,constantxorimmediate xori$1,$2,10 $1=~$2&~10 LogicalXORreg,constantshiftleftlogical sll$1,$2,10 $1=$2<<10 Shiftleftbyconstantshiftrightlogical srl$1,$2,10 $1=$2>>10 Shiftrightbyconstantshiftrightarithm. sra$1,$2,10 $1=$2>>10 Shiftright(signextend)shiftleftlogical sllv$1,$2,$3 $1=$2<<$3 Shiftleftbyvariableshiftrightlogical srlv$1,$2,$3 $1=$2>>$3 Shiftrightbyvariableshiftrightarithm. srav$1,$2,$3 $1=$2>>$3 Shiftrightarith.byvariable
MIPSdatatransferinstructionsInstruction Comment
SW500(R4),R3 StorewordSH502(R2),R3 StorehalfSB41(R3),R2 StorebyteLWR1,30(R2) LoadwordLHR1,40(R3) LoadhalfwordLHUR1,40(R3) LoadhalfwordunsignedLBR1,40(R3) LoadbyteLBUR1,40(R3) LoadbyteunsignedLUIR1,40 LoadUpperImmediate(16bitsshiftedleftby16)WhyneedLUI?0000…0000LUIR5R5WhendoesMIPSsignextend?Whenvalueissignextended,copyupperbittofullvalue:
Examplesofsignextending8bitsto16bits:
000010100000000000001010
100011001111111110001100Whenisanimmediatevaluesignextended?Arithmeticinstructions(add,sub,etc.)signextendimmediatesevenfortheunsignedversionsoftheinstructions!LogicalinstructionsdonotsignextendLoad/Storehalforbytedosignextend,butunsignedversionsdonot.MethodsofTestingConditionConditionCodes Processorstatusbitsaresetasaside-effectofarithmeticinstructions(possiblyonMoves)orexplicitlybycompareortestinstructions. ex: addr1,r2,r3 bzlabelConditionRegister Ex: cmpr1,r2,r3 bgtr1,labelCompareandBranch Ex: bgtr1,r2,labelConditionalBranchDistance?25%ofintegerbranchesare2to4instructions
ConditionalBranchAddressingPC-relativesincemostbranchesarerelativelyclosetothecurrentPCAtleast8bitssuggested(128instructions)CompareEqual/NotEqualmostimportantforintegerprograms(86%)MIPSCompareandBranchCompareandBranch
BEQrs,rt,offsetifR[rs]==R[rt]thenPC-relativebranch BNErs,rt,offset <> ComparetozeroandBranchBLEZrs,offset ifR[rs]<=0thenPC-relativebranch BGTZrs,offset > BLT < BGEZ >= BLTZALrs,offsetifR[rs]<0thenbranchandlink(intoR31)BGEZAL >=!RemainingsetofcompareandbranchopstaketwoinstructionsAlmostallcomparisonsareagainstzero!
MIPSjump,branch,compareinstructionsInstruction Example Meaning
branchonequal beq$1,$2,100 if($1==$2)gotoPC+4+100
Equaltest;PCrelativebranchbranchonnoteq. bne$1,$2,100 if($1!=$2)gotoPC+4+100
Notequaltest;PCrelativesetonlessthan slt$1,$2,$3 if($2<$3)$1=1;else$1=0 Comparelessthan;2’scomp.setlessthanimm. slti$1,$2,100 if($2<100)$1=1;else$1=0 Compare<constant;2’scomp.setlessthanuns. sltu$1,$2,$3 if($2<$3)$1=1;else$1=0 Comparelessthan;naturalnumberssetl.t.imm.uns. sltiu$1,$2,100 if($2<100)$1=1;else$1=0 Compare<constant;naturalnumbersjump j10000 goto10000
Jumptotargetaddressjumpregister jr$31 goto$31
Forswitch,procedurereturnjumpandlink jal10000 $31=PC+4;goto10000
ForprocedurecallSignedvs.UnsignedComparisonR1=0…000000000000000001R2=0…000000000000000010R3=1…111111111111111111Afterexecutingtheseinstructions: sltr4,r2,r1;if(r2<r1)r4=1;elser4=0 sltr5,r3,r1;if(r3<r1)r5=1;elser5=0 sltur6,r2,r1;if(r2<r1)r6=1;elser6=0 sltur7,r3,r1;if(r3<r1)r7=1;elser7=0Whatarevaluesofregistersr4-r7?Why?r4=;r5=;r6=;r7=;twotwotwoCalls:WhyAreStacksSoGreat?StackingofSubroutineCalls&ReturnsandEnvironments:A:CALLBCALLCC:RETRETB:AABABCABASomemachinesprovideamemorystackaspartofthearchitecture(e.g.,VAX)Sometimesstacksareimplementedviasoftwareconvention
(e.g.,MIPS)MemoryStacksUsefulforstackedenvironments/subroutinecall&returnevenifoperandstacknotpartofarchitectureStacksthatGrowUpvs.StacksthatGrowDown:abc0Littleinf.Big0Littleinf.BigMemoryAddressesSPNextEmpty?LastFull?Howisemptystackrepresented?Little-->Big/LastFullPOP:ReadfromMem(SP)DecrementSPPUSH:IncrementSPWritetoMem(SP)growsupgrowsdownLittle-->Big/NextEmptyPOP:DecrementSPReadfromMem(SP)PUSH:WritetoMem(SP)IncrementSPCall-ReturnLinkage:StackFramesFPARGSCalleeSaveRegistersLocalVariablesSPReferenceargsandlocalvariablesatfixed(positive)offsetfromFPGrowsandshrinksduringexpressionevaluation(oldFP,RA)Manyvariationsonstackspossible(up/down,lastpushed/next)Compilersnormallykeepscalarvariablesinregisters,notmemory!HighMemLowMem0 zeroconstant01 at reservedforassembler2 v0 expressionevaluation&3 v1 functionresults4 a0
arguments5 a16 a27 a3
8 t0
temporary:callersaves... (calleecanclobber)15 t7MIPS:SoftwareconventionsforRegisters16 s0
calleesaves...(calleemustsave)23 s724 t8
temporary(cont’d)25 t926 k0 reservedforOSkernel27 k128 gp Pointertoglobalarea29 sp Stackpointer30 fp framepointer31 ra ReturnAddress(HW)MIPS/GCCCallingConventionsFPSPfact: addiu $sp,$sp,-32 sw $ra,20($sp) sw $fp,16($sp) addiu $fp,$sp,32... sw $a0,0($fp)... lw $31,20($sp) lw $fp,16($sp) addiu $sp,$sp,32 jr $31raoldFPraoldFPraFPSPraFPSPlowaddressFirstfourargumentspassedinregisters.DetailsoftheMIPSinstructionsetRegisterzeroalwayshasthevaluezero(evenifyoutrytowriteit)Branch/jumpandlinkputthereturnaddr.PC+4or8intothelinkregister(R31)(dependsonlogicalvsphysicalarchitecture)Allinstructionschangeall32bitsofthedestinationregister(includinglui,lb,lh)andallreadall32bitsofsources(add,sub,and,or,…)Immediatearithmeticandlogicalinstructionsareextendedasfollows:logicalimmediatesopsarezeroextendedto32bitsarithmeticimmediatesopsaresignextendedto32bits(includingaddu)Thedataloadedbytheinstructionslbandlhareextendedasfollows:lbu,lhuarezeroextendedlb,lharesignextendedOverflowcanoccurinthesearithmeticandlogicalinstructions:add,sub,addiitcannotoccurinaddu,subu,addiu,and,or,xor,nor,shifts,mult,multu,div,divuDelayedBranchesInthe“Raw”MIPS,theinstructionafterthebranchisexecutedevenwhenthebranchistaken?ThisishiddenbytheassemblerfortheMIPS“virtualmachine”allowsthecompilertobetterutilizetheinstructionpipeline(???)
li r3,#7 sub r4,r4,1 bz r4,LL addi r5,r3,1 subi r6,r6,2LL: slt r1,r3,r5Branch&PipelinesexecuteBranchDelaySlotBranchTargetBytheendofBranchinstruction,theCPUknowswhetherornotthebranchwilltakeplace.However,itwillhavefetchedthenextinstructionbythen,regardlessofwhetherornotabranchwillbetaken.Whynotexecuteit?ifetchexecuteifetchexecuteifetchexecuteLL: slt r1,r3,r5li r3,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年室內(nèi)設(shè)計(jì)師設(shè)計(jì)理念及材料運(yùn)用高級筆試練習(xí)題
- 2026年金融風(fēng)險(xiǎn)控制測試題市場風(fēng)險(xiǎn)管理核心策略
- 2026年職場心理與情緒管理測驗(yàn)題庫
- 2026年金融風(fēng)險(xiǎn)管理專業(yè)試題及答案
- 2026年GMP實(shí)驗(yàn)室數(shù)據(jù)安全與信息追蹤指南題庫
- 2026年計(jì)算機(jī)編程基礎(chǔ)進(jìn)階練習(xí)題目
- 健全食品安全自查制度
- 2026年生物醫(yī)學(xué)實(shí)驗(yàn)技術(shù)員考試模擬卷
- 2026年鋼琴考級曲目與樂理知識模擬題庫
- 2026年金融市場投資分析試題庫與答案解析
- 事業(yè)單位市場監(jiān)督管理局面試真題及答案
- 巷道工程清包工合同范本
- 廣西鹿寨萬強(qiáng)化肥有限責(zé)任公司技改擴(kuò)能10萬噸-年復(fù)混肥建設(shè)項(xiàng)目環(huán)評報(bào)告
- 三級醫(yī)院營養(yǎng)科建設(shè)方案
- (2025年標(biāo)準(zhǔn))彩禮收條協(xié)議書
- 賓得全站儀R-422NM使用說明書
- ASTM-D1238中文翻譯(熔融流動(dòng)率、熔融指數(shù)、體積流動(dòng)速率)
- 2025年國家公務(wù)員考試《申論》真題及答案解析(副省級)
- 貴州省遵義市2024屆高三第三次質(zhì)量監(jiān)測數(shù)學(xué)試卷(含答案)
- 江蘇省勞動(dòng)合同模式
- 速凍食品安全風(fēng)險(xiǎn)管控清單
評論
0/150
提交評論