第2章指令系統(tǒng)(n)_第1頁
第2章指令系統(tǒng)(n)_第2頁
第2章指令系統(tǒng)(n)_第3頁
第2章指令系統(tǒng)(n)_第4頁
第2章指令系統(tǒng)(n)_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第二章指令系統(tǒng)指令系統(tǒng)(指令集ISA):硬件可識別的操作集合。其中的每一種操作被稱為一條指令。2在機(jī)器上直接運(yùn)行的程序是由指令組成的。一個處理器提供的操作集合,體現(xiàn)出在硬件代價(jià)、對程序員的方便性以及功耗等工程方面考慮之間的一種權(quán)衡和折中。3指令系統(tǒng)是軟件與硬件之間的一個主要分界面,也是他們之間互相溝通的一座橋梁。硬件設(shè)計(jì)人員采用各種手段實(shí)現(xiàn)指令系統(tǒng),而軟件設(shè)計(jì)人員則使用這些指令系統(tǒng)編制系統(tǒng)軟件和應(yīng)用軟件,用這些軟件來填補(bǔ)指令系統(tǒng)與人們習(xí)慣的使用方式之間的語義差距。指令系統(tǒng)設(shè)計(jì)必須由軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員共同來完成。指令系統(tǒng)發(fā)展相當(dāng)緩慢,需要用軟件來填補(bǔ)的東西也就越來越多。第二章指令系統(tǒng)2.1數(shù)據(jù)表示

2.2尋址技術(shù)

2.3指令格式的優(yōu)化設(shè)計(jì)

2.4指令系統(tǒng)的功能設(shè)計(jì)

2.5精簡指令系統(tǒng)2.1數(shù)據(jù)表示2.1.1數(shù)據(jù)表示與數(shù)據(jù)類型2.1.2浮點(diǎn)數(shù)表示2.1.3浮點(diǎn)數(shù)尾數(shù)基值的選擇2.1.4浮點(diǎn)數(shù)格式的設(shè)計(jì)2.1.5自定義數(shù)據(jù)表示6計(jì)算機(jī)系統(tǒng)可以處理的數(shù)據(jù)類型有很多:圖、表、樹、陣列、隊(duì)列、鏈表、向量、字符串、實(shí)數(shù)、整數(shù)、字符…在設(shè)計(jì)計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)時(shí),需要研究在這些數(shù)據(jù)類型中,哪些用硬件實(shí)現(xiàn),哪些用軟件實(shí)現(xiàn),并對于要用硬件實(shí)現(xiàn)的數(shù)據(jù)類型,研究他們的實(shí)現(xiàn)方法。72.1數(shù)據(jù)表示2.1.1數(shù)據(jù)表示與數(shù)據(jù)類型數(shù)據(jù)表示是指計(jì)算機(jī)硬件能夠直接識別,可以被指令系統(tǒng)直接調(diào)用的那些數(shù)據(jù)類型。例如:定點(diǎn)、邏輯、浮點(diǎn)、十進(jìn)制、字符、字符串、堆棧和向量等82.1數(shù)據(jù)表示2.1.1數(shù)據(jù)表示與數(shù)據(jù)類型數(shù)據(jù)表示是指計(jì)算機(jī)硬件能夠直接識別,可以被指令系統(tǒng)直接調(diào)用的那些數(shù)據(jù)類型。例如:定點(diǎn)、邏輯、浮點(diǎn)、十進(jìn)制、字符、字符串、堆棧和向量等數(shù)據(jù)結(jié)構(gòu)是面向系統(tǒng)軟件、應(yīng)用領(lǐng)域需要處理的各種數(shù)據(jù)類型,研究這些數(shù)據(jù)類型的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)之間的關(guān)系,并給出相應(yīng)算法。例如:文件、圖、表、樹、陣列、隊(duì)列、鏈表等9數(shù)據(jù)表示和數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系數(shù)據(jù)表示和數(shù)據(jù)結(jié)構(gòu)都是數(shù)據(jù)類型的子集。確定哪些數(shù)據(jù)類型用數(shù)據(jù)表示實(shí)現(xiàn),是軟件與硬件的取舍問題如何取舍?10確定數(shù)據(jù)表示的原則縮短程序的運(yùn)行時(shí)間減少CPU與主存儲器之間的通信量這種數(shù)據(jù)表示的通用性和利用率訪問不同操作數(shù)大小的頻率(SPEC基準(zhǔn)程序)操作數(shù)大小訪問頻度整型平均浮點(diǎn)平均字節(jié)7%0%半字(2字節(jié))19%0%單字(4字節(jié))74%31%雙字(8字節(jié))0%69%

基準(zhǔn)程序?qū)巫趾碗p字的數(shù)據(jù)訪問具有較高的頻度。一臺32位的機(jī)器應(yīng)該支持8、16、32位整型操作數(shù)以及32位和64位的IEEE754標(biāo)準(zhǔn)的浮點(diǎn)操作數(shù)。12自定義的數(shù)據(jù)表示數(shù)據(jù)存儲單元只存放純數(shù)據(jù),操作數(shù)的類型通過指令中操作碼的編碼來指定。這是大多數(shù)計(jì)算機(jī)的做法。數(shù)據(jù)的類型(定點(diǎn)、浮點(diǎn)、字符、字符串、邏輯數(shù)、向量等)進(jìn)位制(如2進(jìn)制、10進(jìn)制、16進(jìn)制等);數(shù)據(jù)字長(如字、半字、雙字、字節(jié)等);尋址方式(如直接尋址、間接尋址、相對尋址、寄存器尋址等);數(shù)據(jù)的功能,如地址、地址偏移量、數(shù)值、控制字、標(biāo)志等;13操作數(shù)的類型同一種操作通常有很多條指令。在高級語言和應(yīng)用軟件中:數(shù)據(jù)的屬性由數(shù)據(jù)自己定義在機(jī)器語言一級由數(shù)據(jù)自己定義屬性。數(shù)據(jù)上附帶一個由硬件解釋的表示數(shù)據(jù)類型的標(biāo)識符(tag),這個符號指定操作數(shù)的類型和相應(yīng)的操作。由硬件自動實(shí)現(xiàn)一致性檢查和類型轉(zhuǎn)換,簡化指令系統(tǒng),縮小與高級語言的差異,簡化編譯器。14P51R-2計(jì)算機(jī)中帶標(biāo)志符的數(shù)據(jù)表示方式在B5000大型機(jī)中,每個數(shù)據(jù)有一位標(biāo)志符在B6500和B7500大型機(jī)中,每個數(shù)據(jù)有三位標(biāo)志符在R-2巨型機(jī)中采用10位標(biāo)志符15P55B-6700計(jì)算機(jī)的數(shù)據(jù)描述符表示方法數(shù)據(jù)描述符與標(biāo)志符的區(qū)別:標(biāo)志符只作用于一個數(shù)據(jù),而數(shù)據(jù)描述符要作用于一組數(shù)據(jù)。標(biāo)識符與數(shù)值一起存放于一個數(shù)據(jù)單元中,數(shù)據(jù)描述符單獨(dú)存放,占據(jù)一個存儲單元。Burroughs公司生產(chǎn)的B-6700機(jī)中采用的數(shù)據(jù)描述符表示方法。最高三位為101時(shí)表示數(shù)據(jù)描述符最高三位為000時(shí)表示數(shù)據(jù)。給數(shù)據(jù)加上標(biāo)識,由數(shù)據(jù)本身給出操作數(shù)類型。優(yōu)點(diǎn):簡化指令系統(tǒng),可由硬件自動實(shí)現(xiàn)一致性檢查和類型轉(zhuǎn)換,縮小了機(jī)器語言與高級語言的語義差距,簡化編譯器等。缺點(diǎn):由于需要在執(zhí)行過程中動態(tài)檢測標(biāo)志符,動態(tài)開銷比較大,所以采用這種方案的機(jī)器很少見。162.2尋址技術(shù)尋址技術(shù):尋找操作數(shù)及其它信息的地址的技術(shù)。尋址的實(shí)質(zhì)就是找到數(shù)據(jù)和指令2.2尋址技術(shù)2.2.1編址單位2.2.2零地址空間個數(shù)2.2.3尋址方式2.2.4間接尋址和變址尋址192.2.1編址單位——主存儲器的地址表示常用的編址單位:字編址、字節(jié)編址、位編址、塊編址等字:存儲器的傳輸量為N個二進(jìn)制位,一個N位的組則被稱為一個字。N為字長。字編址20字編址物理地址01234…32位字0字1字2字3字4…21字編址:為物理存儲器的每一個字都編一個號,稱為字編址。實(shí)現(xiàn)簡單,地址信息和存儲器容量等沒有任何浪費(fèi)。程序員更加熟悉的是字節(jié)編址:編址單位與信息的基本單位(一個字節(jié))相一致,允許讀寫字符等非數(shù)值計(jì)算型的數(shù)據(jù)項(xiàng)。22常見的編址單位與訪問字長:字節(jié)編址、字訪問。實(shí)現(xiàn)方法:存儲器控制器從處理器接受字節(jié)地址,在底層使用字地址,讀取相應(yīng)存儲單元中的字,并提取出處理器所要求的指定字節(jié)。23如何在存儲器中存放不同寬度的信息?以IBM370為例子進(jìn)行討論。信息有字節(jié)、半字(雙字節(jié))、單字(4字節(jié))和雙字(8字節(jié))等寬度。主存寬度為8個字節(jié)。采用按字節(jié)編址,各類信息都是用該信息的首字節(jié)地址來尋址。允許它們?nèi)我獯鎯芸赡軙霈F(xiàn)一個信息跨存儲字邊界而存儲于兩個存儲單元中一個需要注意的問題:物理地址空間的信息如何存放?24各種信息寬度的存儲字節(jié)、半字(2字節(jié))、單字(4字節(jié))、雙字(8字節(jié))主存寬度:8字節(jié)25為了盡量減少訪問主存的時(shí)間,當(dāng)請求的信息寬度不超過主存寬度時(shí)應(yīng)放在一個存儲字內(nèi),不能跨邊界。當(dāng)出現(xiàn)跨越時(shí),讀出該信息則需要兩個存儲周期。為此,則信息在主存中存放的起始地址必須是該信息所占字節(jié)數(shù)的整數(shù)倍。這時(shí)就稱地址是對齊的。也稱信息存儲的整數(shù)邊界。26各種信息寬度的存儲按整數(shù)邊界存儲,會導(dǎo)致存儲空間浪費(fèi)。所以設(shè)計(jì)時(shí)需要在訪問速度和占用空間之間來進(jìn)行權(quán)衡?,F(xiàn)在計(jì)算機(jī)一般都按照整數(shù)邊界存儲信息。27程序如何對存儲器地址操作:指針程序設(shè)計(jì)語言經(jīng)常提供一些機(jī)制,程序員可以聲明包含一個存儲器地址的指針變量,對指針賦值,或?qū)χ羔標(biāo)傅膬?nèi)容進(jìn)行訪問以獲取數(shù)據(jù)項(xiàng)。C語言的指針操作:

char*cptr;cptr++;//cptr值加1int*iptr;iptr++;//iptr值加4282.2.2零地址空間個數(shù)三個零地址空間:通用寄存器、主存儲器、輸入輸出設(shè)備獨(dú)立編址兩個零地址空間:通用寄存器獨(dú)立編址,主存儲器與輸入輸出設(shè)備統(tǒng)一編址一個零地址空間:最低端是通用寄存器,最高端是輸入輸出設(shè)備,中間為主存儲器隱含編址方式:堆棧計(jì)算機(jī)、Cache存儲器等29并行存儲器的編址技術(shù)高位交叉編址:主要用來擴(kuò)大存儲器容量。低位交叉編址:主要是提高存儲器速度。30高位交叉:4*80011100110001010010000011000100000100000765432100111101110011010110001011010100100101000151413121110981011110110101011010010011100101000110000232221201918171611111111101110111100110111101011001110003130292827262524存儲器接口請求31

低位交叉:4*81110011000101001000001100010000010000000282420161284011101110011010110001011010100100101000012925211713951111101101010110100100111001010001100001030262218141062111111101110111100110111101011001110001131272319151173存儲器接口請求322.2.3尋址方式(AddressingMode)指令系統(tǒng)中如何形成所要訪問的數(shù)據(jù)的地址。尋址方式可以指明指令中的操作數(shù)是一個常數(shù)、一個寄存器操作數(shù)或者一個存儲器操作數(shù)。對于存儲器操作數(shù)來說,由尋址方式確定的存儲器地址為有效地址。采用多種尋址方式可以顯著地減少程序的指令條數(shù),但可能增加計(jì)算機(jī)的實(shí)現(xiàn)復(fù)雜度以及指令的CPI。332.2.3尋址方式(AddressingMode)立即數(shù)尋址方式面向寄存器的尋址方式面向主存的尋址方式面向堆棧的尋址方式

341、立即數(shù)尋址立即數(shù)尋址方式很必要??梢杂糜谒阈g(shù)運(yùn)算、比較指令(主要是分支轉(zhuǎn)移)以及寄存器存取常數(shù)指令。此時(shí),常數(shù)在代碼中出現(xiàn),往往比較小,但立即數(shù)也可能是很大的地址常量。立即數(shù)的大小會影響指令的長度。大量使用立即數(shù)尋址方式會降低程序的通用性。352、寄存器尋址所需操作數(shù)來源于寄存器,運(yùn)算結(jié)果也寫回寄存器。指令格式:

OPCROPCR,ROPCR,R,ROPCR,M優(yōu)點(diǎn):指令字長短,指令執(zhí)行速度快363、主存尋址有效地址如何給出?直接尋址或絕對尋址ADDR4,(1010)Regs[R4]←Regs[R4]+Mem[1010]寄存器間接尋址ADDR4,(R2)Regs[R4]←Regs[R4]+Mem[Regs[R2]]37偏移尋址ADDR3,120(R2)Regs[R3]←Regs[R3]+Mem[120+Regs[R2]]索引尋址ADDR4,(R2+R3)Regs[R4]←Regs[R4]+Mem[Regs[R2]+Regs[R3]]存儲器間接尋址ADDR2,@(R4)Regs[R2]←Regs[R2]+Mem[Mem[Regs[R4]]]383、主存尋址主要包括直接尋址、存儲器間接尋址、變址尋址。直接尋址存在的問題:需要很長的地址碼。設(shè)計(jì)循環(huán)和數(shù)組處理等運(yùn)算,必須修改指令本身。多任務(wù)操作系統(tǒng)要求程序能夠在主存中浮動,直接尋址方式編寫的程序個操作系統(tǒng)作業(yè)調(diào)度帶來極大不便。間接尋址和變址尋址39存儲器間接尋址指令中給出的是操作數(shù)的地址,用指令中給出的地址碼訪問主存,得到操作數(shù)的有效地址。通常劃出主存儲器最低端的一小部分存放間接地址,從而指令中需要表示的地址碼長度就很短。也可以用寄存器來存放間接地址,這樣需要表示的地址碼長度就更短了。需要訪存兩次,增加主存的通信量。40變址尋址需要設(shè)置一個或者多個變址寄存器。變址寄存器的長度是由主存的尋址空間來決定的。也可以將一個或者多個通用寄存器作為變址寄存器來用。指令中給出變址寄存器的編號和地址的偏移量。指令執(zhí)行時(shí)采用硬件加法器將變址寄存器中給出的基地址和指令中給出的地址偏移量相加,從而得到有效地址。例如:ADDR3,120(R2)Regs[R3]←Regs[R3]+Mem[120+Regs[R2]]414、堆棧尋址地址隱含,指令中無需給出地址,程序存儲量小,支持程序的嵌套和遞歸調(diào)用,支持中斷處理。對堆棧訪問最頻繁的是棧頂?shù)膸讉€單元,為提高堆棧的速度,可以將棧頂部分設(shè)計(jì)成為高速寄存器堆。42表示尋址方式的方法隱含在指令的操作碼中。在指令字中設(shè)置專門的尋址字段,直接給出尋址方式。相比而言,設(shè)置尋址字段的方法更加靈活,操作碼短,但需要設(shè)置專門的尋址方式字段,操作碼和尋址方式字段合起來所需要的總位數(shù)可能會比隱含方法的總位數(shù)多。2.3指令格式的優(yōu)化設(shè)計(jì)2.3.1指令的組成2.3.2Huffman編碼2.3.3擴(kuò)展編碼法2.3.4縮短地址碼長度的方法2.3.5指令格式設(shè)計(jì)舉例442.3.1指令的組成指令格式的設(shè)計(jì)確定指令字的編碼方式,包括操作碼字段和地址碼字段的編碼和表示方式。指令格式的優(yōu)化:如何用最短的位數(shù)來表示指令的操作信息和地址信息。452.3.2Huffman編碼法操作碼的三種編碼方法:固定長度Huffman編碼擴(kuò)展編碼46信息熵

pi表示第i種操作碼在程序中出現(xiàn)的概率操作碼優(yōu)化的程度可以用信息熵來衡量。

表示用二進(jìn)制編碼表示n個碼點(diǎn)時(shí),理論上的最短平均編碼長度。47基本思想:當(dāng)各種事件發(fā)生的概率不均等時(shí),可以對發(fā)生概率最高的事件用最短的位數(shù)(時(shí)間)來表示(處理),而對于出現(xiàn)概率較低的事件,則可以用較長的位數(shù)(時(shí)間)來表示(處理),從而使總的平均位數(shù)(時(shí)間)縮短。哈夫曼編碼48構(gòu)造哈夫曼樹的方法將各事件按其使用頻度從小到大依次排列;每次從中選擇兩個頻度值最小的結(jié)點(diǎn),將其合并成一個新的結(jié)點(diǎn),并把新結(jié)點(diǎn)畫在所選結(jié)點(diǎn)的上面,然后用兩條邊把新結(jié)點(diǎn)分別與那兩個結(jié)點(diǎn)相連。新結(jié)點(diǎn)的頻度值是所選兩個結(jié)點(diǎn)的頻度值的和。把新結(jié)點(diǎn)與其他剩余未結(jié)合的結(jié)點(diǎn)一起,再以上面的步驟進(jìn)行處理,反復(fù)進(jìn)行,直到全部結(jié)點(diǎn)都結(jié)合完畢、形成根結(jié)點(diǎn)為止。例:假設(shè)某模型機(jī)有7條指令,這些指令的使用頻度如表所示。

(1)計(jì)算這7條指令的操作碼編碼的最短平均碼長;

(2)畫出哈夫曼樹,寫出這7條指令的哈夫曼編碼,并計(jì)算該編碼的平均碼長和信息冗余量。指令I(lǐng)1概率0.45I20.30I30.15I40.05I50.03I60.01I70.0150(1)51利用Huffman樹進(jìn)行操作碼編碼52Huffman操作碼編碼53(2)解:采用Huffman編碼法所得到的操作碼的平均長度

=0.45×1+0.30×2+0.15×3+0.05×4

+0.03×5+0.01×6+0.01×6=1.97(位)Huffman編碼法的信息冗余量為:54定長操作碼固定長度的操作碼:所有指令的操作碼都是同一的長度(如8位)。許多計(jì)算機(jī)都采用(特別是RISC結(jié)構(gòu)的計(jì)算機(jī))保證操作碼的譯碼速度、減少譯碼的復(fù)雜度。以程序的存儲空間為代價(jià)來換取硬件實(shí)現(xiàn)上的方便。55例:假設(shè)某模型機(jī)有7條指令,這些指令的使用頻度如表所示。

(1)采用固定編碼法為這7條指令編寫操作碼

(2)計(jì)算固定編碼法編寫操作碼的信息冗余量。指令I(lǐng)1概率0.45I20.30I30.15I40.05I50.03I60.01I70.0156(1)需要3位二進(jìn)制位進(jìn)行編碼。(2)采用3位固定長操作碼的信息冗余量為:572.3.3擴(kuò)展編碼法Huffman操作碼的優(yōu)缺點(diǎn):可以減少操作碼的平均位數(shù),但所獲得的編碼是變長度的,不規(guī)整,不利于硬件處理。擴(kuò)展編碼法:位于定長二進(jìn)制編碼和哈夫曼編碼之間的一種編碼方案采用有限幾種固定長度的碼長,仍然采用高概率的用短碼、低概率用長碼的哈夫曼壓縮思想,使操作碼平均長度縮短。58例:假設(shè)某模型機(jī)有7條指令,這些指令的使用頻度如表所示。

(1)采用1-2-3-5擴(kuò)展編碼法為這7條指令編寫操作碼,并計(jì)算操作碼的碼長和信息冗余量。

(2)采用2-4擴(kuò)展編碼法為這7條指令編寫操作碼,并計(jì)算操作碼的碼長和信息冗余量。指令I(lǐng)1概率0.45I20.30I30.15I40.05I50.03I60.01I70.01序號概率1-2-3-5擴(kuò)展編碼I10.450I20.3010I30.15110I40.0511100I50.0311101I60.0111110I70.01111112-4等長擴(kuò)展編碼0001101100110111101111平均長度2.02.2信息冗余量2.5%11.4%7條指令的操作碼擴(kuò)展編碼法長碼的前綴不能是短碼的操作碼序號概率1-2-3-5擴(kuò)展編碼I10.450I20.3010I30.15110I40.0511100I50.0311101I60.0111110I70.01111112-4等長擴(kuò)展編碼0001101100110111101111平均長度2.02.2信息冗余量2.5%11.4%7條指令的操作碼擴(kuò)展編碼法61例:將上例改為1-2-3-5擴(kuò)展編碼法,操作碼最短平均長度為:

H=0.45×1+0.30×2+0.15×3

+(0.05+0.03+0.01+0.01)×5=2.00

信息冗余量為:很接近于哈夫曼編碼長度:1.9762例:將上例改為2-4等長擴(kuò)展編碼法,操作碼最短平均長度為:

H=(0.45+0.30+0.15)×2

+(0.05+0.03+0.01+0.01)×4

=2.202-4等長擴(kuò)展編碼法信息冗余量為:63等長擴(kuò)展碼為了便于分級譯碼,一般都采用等長擴(kuò)展碼。早期的計(jì)算機(jī)經(jīng)常使用。

例如:等長15/15/15……法和等長8/64/512……法選用哪種編碼法取決于指令使用頻度pi的分布。若在頭15種指令中pi的值都比較大,但在后30種指令后急劇減少,則應(yīng)選擇15/15/15法;若pi

的值在頭8種指令中較大,之后的64種指令的pi值也不太低,則應(yīng)選擇8/64/512法。衡量標(biāo)準(zhǔn):看哪種編碼法能使平均碼長最短。64碼長表示法。例如1-2-3-5,2-4碼點(diǎn)表示法:例如15/15/15,8/64/51265原則:長碼的前綴不能是短碼的操作碼662.3.4地址碼的優(yōu)化表示1、地址碼個數(shù)的確定?地址碼個數(shù)通常有3個、2個、1個及0個等4種情況67

例:表達(dá)式Z=X+Y在4種類型指令系統(tǒng)結(jié)構(gòu)上的代碼。假設(shè):X、Y、Z均保存在存儲器單元中,并且不能破壞X和Y的值。堆棧累加器寄存器(RM型)寄存器(RR型)pushXloadXloadR1,XloadR1,XpushYaddYaddR1,YloadR2,YaddstoreZstoreR1,ZaddR3,R1,R2popZstoreR3,Z對于一般商用處理機(jī),采用多寄存器結(jié)構(gòu)的二地址指令是最理想的。如果強(qiáng)調(diào)硬件結(jié)構(gòu)簡單,并且以連續(xù)運(yùn)算(如求累加和等)為主,宜采用一地址結(jié)構(gòu)。對于以向量、矩陣運(yùn)算為主的處理機(jī),最好采用三地址結(jié)構(gòu)。部分RISC處理機(jī)也采用三地址指令。對于解決遞歸問題為主的處理機(jī),宜采用零地址結(jié)構(gòu)。編程容易、節(jié)省程序存儲量。關(guān)于地址碼個數(shù)結(jié)論692.縮短地址碼長度的方法目標(biāo):用一個短地址碼表示一個大地址空間用間址尋址方式縮短地址碼長度方法:在主存儲器的低端開辟一個專門存放間接地址的區(qū)域。例如:主存儲器最低1KB為存放地址碼的區(qū)域,若主存儲器按照字節(jié)編址,主存字長為32位,則指令中指需要8位就可以表示一個32位長的邏輯地址。即使加上尋址方式等信息,一個地址碼的長度最多只有10多位70用變址尋址方式縮短地址碼長度由于程序的局部性,變址尋址方式中使用的地址偏移量比較短,可以在指令中直接給出。例如IBM370系列機(jī)中為12位。較長的基址(例如32位)放在變址寄存器中。采用變址方式地址碼的長度為十多位或者二十位就可以了。71用寄存器間接尋址方式縮短地址碼長度由于寄存器的數(shù)量較少,通常采用很少幾位就可以表示一個寄存器的地址,但是寄存器的字長足以放下一個邏輯地址。例如:16個間址寄存器,每個寄存器的字長為32位,用4位地址碼就能表示32位的邏輯地址,在加上尋址方式,一個地址碼的長度不超過10位。722.3.5指令格式的設(shè)計(jì)舉例指令長度小于一個存儲字時(shí),不要跨越存儲字存放。操作碼的長度也有固定長度和可變長度兩種操作碼長度固定:IBM370系列計(jì)算機(jī)的指令格式操作碼長度可變:PDP-11小型計(jì)算機(jī)的指令格式2.4指令系統(tǒng)的功能設(shè)計(jì)2.4.1指令系統(tǒng)的完整性2.4.2指令系統(tǒng)的性能2.4.3復(fù)雜指令系統(tǒng)742.4.1指令系統(tǒng)的完整性(性能指標(biāo)之一)通用計(jì)算機(jī)系統(tǒng)的5類基本指令:1:數(shù)據(jù)傳送類指令2:運(yùn)算類指令3:程序控制指令4:輸入輸出指令5:處理機(jī)控制和調(diào)試指令75對指令系統(tǒng)的基本要求

完整性、規(guī)整性、正交性、高效率、兼容性

完整性:在一個有限可用的存儲空間內(nèi),對于任何可解的問題,編制計(jì)算程序時(shí),指令系統(tǒng)所提供的指令足夠使用。2.4.2指令系統(tǒng)的性能76操作類型實(shí)例算術(shù)和邏輯運(yùn)算算術(shù)運(yùn)算和邏輯操作:加,減,乘,除,與,或等數(shù)據(jù)傳輸load,store控制分支,跳轉(zhuǎn),過程調(diào)用和返回,自陷等系統(tǒng)操作系統(tǒng)調(diào)用,虛擬存儲器管理等浮點(diǎn)浮點(diǎn)操作:加,減,乘,除,比較等十進(jìn)制十進(jìn)制加,十進(jìn)制乘,十進(jìn)制到字符的轉(zhuǎn)換等字符串字符串移動,字符串比較,字符串搜索等圖形像素操作,壓縮/解壓操作等77規(guī)整性:主要包括對稱性和均勻性。對稱性:所有與指令系統(tǒng)有關(guān)的存儲單元的使用、操作碼的設(shè)置等都是對稱的。例如:對所有通用寄存器都要同等對待。在操作碼的設(shè)置上,如果設(shè)置了A-B的指令,就應(yīng)該也設(shè)置B-A的指令。

78規(guī)整性:主要包括對稱性和均勻性。均勻性:指對于各種不同的操作數(shù)類型、字長、操作種類和數(shù)據(jù)存儲單元,指令的設(shè)置都要同等對待。例如:如果某機(jī)器有5種數(shù)據(jù)表示(定點(diǎn)數(shù)、邏輯數(shù)、浮點(diǎn)數(shù)、十進(jìn)制數(shù)、字符串),4種字長(單字長、雙字長、半字長、字節(jié)),兩種存儲單元,則要設(shè)置5×4×2=40種同一操作的指令。

79正交性:在指令中各個不同含義的字段,如操作類型、數(shù)據(jù)類型、尋址方式字段等,在編碼時(shí)應(yīng)互不相關(guān)、相互獨(dú)立。高效率:指指令的執(zhí)行速度快、使用頻度高。兼容性:主要是要實(shí)現(xiàn)向后兼容,指令系統(tǒng)可以增加新指令,但不能刪除指令或更改指令的功能,從而可以繼承已有的系統(tǒng)軟件和應(yīng)用軟件來使用。802.4.3復(fù)雜指令系統(tǒng)設(shè)計(jì)指令系統(tǒng)時(shí),兩種不同的設(shè)計(jì)策略CISC(ComplexInstructionSetComputer):復(fù)雜指令系統(tǒng)增強(qiáng)指令功能,把越來越多的功能交由硬件來實(shí)現(xiàn),并且指令的數(shù)量也是越來越多。RISC(ReducedInstructionSetComputer):精簡指令系統(tǒng)盡可能地把指令系統(tǒng)簡化,不僅指令的條數(shù)少,而且指令的功能也比較簡單。81CISC(ComplexInstructionSetComputer)CISC處理器通常包括許多指令(典型的有幾百條)每條指令能夠執(zhí)行任意復(fù)雜的計(jì)算。例如Intel的Pentium處理器屬于CISC,它提供數(shù)百條指令,其中還包括處理內(nèi)存中的圖像或者計(jì)算sin或cos函數(shù)的指令。82RISC(ReducedInstructionsSetComputer)RISC處理器有較多的約束。RISC的設(shè)計(jì)是力爭一個最小化的指令集,每條指令只執(zhí)行一個基本的計(jì)算,復(fù)雜的運(yùn)算由基本指令構(gòu)成的子程序來完成。為了達(dá)到最高速度,RISC設(shè)計(jì)限定指令為固定長度,并使得能在一個時(shí)鐘周期內(nèi)執(zhí)行一條指令。例如Motorola的MIPS處理器屬于RISC,只包含32條指令,每條指令僅用一個時(shí)鐘周期來完成。2.5精簡指令系統(tǒng)2.5.1從CISC到RISC2.5.2RISC定義與特點(diǎn)2.5.3減少CPI是RISC思想精華2.5.4RISC關(guān)鍵技術(shù)2.5.5RISC優(yōu)化編譯技術(shù)842.5.1從CISC到RISC70年代,指令系統(tǒng)已經(jīng)非常復(fù)雜85CISC指令系統(tǒng)存在的問題1979年,美國加洲伯克利分校DavidPatterson提出:20%與80%規(guī)律在CISC中,大約20%的指令占據(jù)了80%的處理機(jī)執(zhí)行時(shí)間。而其余80%的指令只在20%的運(yùn)行時(shí)間內(nèi)才會用到。使用頻度高的指令也是最簡單的指令。86執(zhí)行頻度排序80x86指令指令執(zhí)行頻度(占執(zhí)行指令總數(shù)的百分比)1load22%2條件分支20%3比較16%4store12%5加8%6與6%7減5%8寄存器-寄存器間數(shù)據(jù)移動4%9調(diào)用子程序1%10返回1%合計(jì)95%Intel80x86最常用的10條指令87CISC指令系統(tǒng)存在的問題VLSI技術(shù)的發(fā)展引起的問題指令系統(tǒng)龐大,指令條數(shù)很多,許多指令的功能又很復(fù)雜,使得控制器硬件非常復(fù)雜。給VLSI設(shè)計(jì)造成比較大的困難。VLSI工藝要求規(guī)整性,RISC正好適應(yīng)了VLSI工藝的要求。軟硬件的功能分配問題許多指令由于操作繁雜,其CPI值比較大,執(zhí)行速度慢。采用這些復(fù)雜指令有可能使整個程的執(zhí)行時(shí)間反而增加。882.5.3RISC思想的精華減少CPI是RISC思想的精華

P=I·CPI·TP是執(zhí)行這個程序所使用的總的時(shí)間;I是這個程序所需執(zhí)行的總的指令條數(shù);CPI(CyclesPerInstruction)是每條指令執(zhí)行的平均周期數(shù)T是一個周期的時(shí)間長度。89同類問題的程序長度,RISC比CISC長30%~40%CPI方面RISC比CISC少2倍~10倍

RISC的速度要比CISC快3倍左右,關(guān)鍵是RISC的CPI減小了90由于指令功能復(fù)雜,規(guī)整性不好,不利于采用流水技術(shù)來提高性能。解釋流水技術(shù)91采用流水機(jī)制,RISC中大多數(shù)指令在單周期內(nèi)完成讀取指令檢驗(yàn)操作碼讀取操作數(shù)執(zhí)行操作存儲結(jié)果讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼第一級第二級第三級第四級第五級讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼92讀取指令檢驗(yàn)操作碼讀取操作數(shù)執(zhí)行操作存儲結(jié)果讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼第一級第二級第三級第四級第五級讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼93讀取指令檢驗(yàn)操作碼讀取操作數(shù)執(zhí)行操作存儲結(jié)果讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼第一級第二級第三級第四級第五級讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼94讀取指令檢驗(yàn)操作碼讀取操作數(shù)執(zhí)行操作存儲結(jié)果讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼第一級第二級第三級第四級第五級讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼95讀取指令檢驗(yàn)操作碼讀取操作數(shù)執(zhí)行操作存儲結(jié)果讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼第一級第二級第三級第四級第五級讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼96讀取指令檢驗(yàn)操作碼讀取操作數(shù)執(zhí)行操作存儲結(jié)果讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼第一級第二級第三級第四級第五級讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼97讀取指令檢驗(yàn)操作碼讀取操作數(shù)執(zhí)行操作存儲結(jié)果讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼第一級第二級第三級第四級第五級讀取指令檢驗(yàn)操作碼讀取操作數(shù)讀取指令檢驗(yàn)操作碼執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼98設(shè)計(jì)RISC機(jī)器遵循的原則指令條數(shù)少、指令功能簡單。只選取使用頻度很高的指令,在此基礎(chǔ)上補(bǔ)充一些最有用的指令;采用簡單而又統(tǒng)一的指令格式,并減少尋址方式;指令字長都為32位或64位;指令的執(zhí)行在單個機(jī)器周期內(nèi)完成;(采用流水線機(jī)制)只有l(wèi)oad和store指令才能訪問存儲器,其它指令的操作都是在寄存器之間進(jìn)行;即load-store結(jié)構(gòu))大多數(shù)指令都采用硬連邏輯來實(shí)現(xiàn);強(qiáng)調(diào)優(yōu)化編譯器的作用,為高級語言程序生成優(yōu)化的代碼;充分利用流水技術(shù)來提高性能99RISC微處理器1981年,Berkeley分校的Patterson等人的32位微處理器RISCI:31條指令,指令字長都是32位,78個通用寄存器,時(shí)鐘頻率為8MHz;控制部分所占的芯片面積只有約6%。商品化微處理器MC68000和Z8000分別為50%和53%;性能比MC68000和Z8000快3~4倍。1983年的RISCⅡ:指令條數(shù)為39,通用寄存器個數(shù)為138,時(shí)鐘頻率為12MHz。后來發(fā)展成了Sun公司的SPARC系列微處理器。早期的RISC微處理器1001981年,Stanford大學(xué)Hennessy等人的MIPS后來發(fā)展成了MIPSRxxx系列微處理器。IBM的801共同特點(diǎn):采用load-store結(jié)構(gòu)指令字長為32位采用高效的流水技術(shù)101RISC設(shè)計(jì)思想也可以用于CISC中x86處理機(jī)的CPI在不斷縮小,8088的CPI大于20,80286的CPI大約是5.5,80386的CPI進(jìn)一步減小到4左右,80486的CPI已經(jīng)接近2,Pentium處理機(jī)的CPI已經(jīng)與RISC十分接近。目前,超標(biāo)量處理機(jī)、超流水線處理機(jī)的CPI

已經(jīng)達(dá)到0.5,實(shí)際上用IPC(InstructionPerCycle)更確切。102流水線的指令阻塞例如:指令K:addab→c

指令K+1:subtractec→d103例如:指令K:addab→c

指令K+1:subtractec→d存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼104例如:指令K:addab→c

指令K+1:subtractec→d存儲結(jié)果執(zhí)行操作讀取操作數(shù)讀取指令檢驗(yàn)操作碼2.5.4RISC關(guān)鍵技術(shù)--延時(shí)轉(zhuǎn)移技術(shù)為了使指令流水線不斷流,在轉(zhuǎn)移指令之后插入一條沒有數(shù)據(jù)相關(guān)和控制相關(guān)的有效指令,而轉(zhuǎn)移指令被延遲執(zhí)行,這種技術(shù)稱為延遲轉(zhuǎn)移技術(shù)。無條件轉(zhuǎn)移指令的延遲執(zhí)行條件轉(zhuǎn)移指令的延遲執(zhí)行

調(diào)整前的指令序列:

1:MOVER1,R22:CMPR3,R4;(R3)與(R4)比較

3:BEQNEXT;如果(R3)=(R4)則轉(zhuǎn)移

4:ADDR4,R5

………N:NEXT:MOVER4,A調(diào)整后的指令序列:

1:CMPR3,R4;(R3)與(R4)比較

2:BEQNEXT;如果(R3)=(R4)則轉(zhuǎn)移

3:MOVER1,R2;被插入的指令

4:ADDR4,R5

………N:NEXT:MOVER4,ARISC關(guān)鍵技術(shù)—指令取消技術(shù)采用指令延時(shí)技術(shù),經(jīng)常找不到可以用來調(diào)整的指令,可考慮采用另一種方法:指令取消技術(shù)在使用指令取消技術(shù)的處理機(jī)中,所有的轉(zhuǎn)移指令和數(shù)據(jù)變換指令都可以決定下面待執(zhí)行的指令是否應(yīng)該取消。如果指令被取消,其效果相當(dāng)于執(zhí)行了一條空操作指令,不影響程序的運(yùn)行環(huán)境。(1)向后轉(zhuǎn)移(適用于循環(huán)程序)循環(huán)體的第一條指令安放在兩個位置,分別在循環(huán)體的前面和后面。如果轉(zhuǎn)移成功,則執(zhí)行循環(huán)體后面的指令,然后返回到循環(huán)體開始;否則取消循環(huán)體后面的指令(2)向前轉(zhuǎn)移(IFTHEN)實(shí)現(xiàn)方法:如果COMP指令的轉(zhuǎn)移條件不成立,則執(zhí)行接著的TTT指令,“THEN”部分代碼接著執(zhí)行。如果轉(zhuǎn)移條件成立,預(yù)取的下條TTT指令執(zhí)行被取消,程序轉(zhuǎn)向THRU位置,則“THEN”部分的代碼全部不執(zhí)行。例子:RRR

……

“IF”部分的程序代碼

SSS

COMPR1,R2,THRU

TTT

……

“THEN”部分的程序代碼

UUU

THRU:VV

V

效果:轉(zhuǎn)移成功與不成功的概率,通常各50%

主要優(yōu)點(diǎn):不必進(jìn)行指令流調(diào)整RISC關(guān)鍵技術(shù)重疊寄存器窗口技術(shù)——過程之間快速傳遞參數(shù)指令流調(diào)整技術(shù)——消除數(shù)據(jù)相關(guān)以硬件為主固件為輔——增快硬件執(zhí)行速度RISC關(guān)鍵技術(shù)——以硬件為主固件為輔采用微程序?qū)崿F(xiàn)的優(yōu)點(diǎn):便于實(shí)現(xiàn)復(fù)雜指令,便于修改指令系統(tǒng)采用微程序?qū)崿F(xiàn)的缺點(diǎn):執(zhí)行速度低。RISC要求主要指令能在單周期內(nèi)執(zhí)行完成必須主要采用硬聯(lián)邏輯來實(shí)現(xiàn)指令系統(tǒng)。對于必須的復(fù)雜指令,也用微程序技術(shù)實(shí)現(xiàn)。從而以硬件為主固件為輔。1、32個64位通用寄存器(GPRs)R0,R1,…,R31也稱為整數(shù)寄存器R0的值永遠(yuǎn)是02、32個64位浮點(diǎn)數(shù)寄存器(FPRs)F0,F(xiàn)1,…,F(xiàn)31介紹MIPS64的一個子集,簡稱為MIPS。2.6.1MIPS的寄存器2.6MIPS指令系統(tǒng)結(jié)構(gòu)用來存放32個單精度浮點(diǎn)數(shù)(32位),也可以用來存放32個雙精度浮點(diǎn)數(shù)(64位)。存儲單精度浮點(diǎn)數(shù)(32位)時(shí),只用到FPR的一半,其另一半沒用。3、一些特殊寄存器它們可以與通用寄存器交換數(shù)據(jù)。例如浮點(diǎn)狀態(tài)寄存器:用來保存有關(guān)浮點(diǎn)操作結(jié)果的信息。MIPS的數(shù)據(jù)表示整數(shù)字節(jié)(8位)半字(16位)字(32位)雙字(64位)浮點(diǎn)數(shù)單精度浮點(diǎn)數(shù)(32位)雙精度浮點(diǎn)數(shù)(64位)字節(jié)、半字或者字在裝入64位寄存器時(shí),用零擴(kuò)展或者用符號位擴(kuò)展來填充該寄存器的剩余部分。裝入以后,對它們將按照64位整數(shù)的方式進(jìn)行運(yùn)算。2.6.2MIPS的數(shù)據(jù)表示2.6.3MIPS的數(shù)據(jù)尋址方式1、立即數(shù)尋址與偏移量尋址;立即數(shù)字段和偏移量字段都是16位的。2、寄存器間接尋址是通過把0作為偏移量來實(shí)現(xiàn)的;3、16位絕對尋址是通過把R0(其值永遠(yuǎn)為0)作為基址寄存器來完成的;4、MIPS的存儲器是按字節(jié)尋址的,地址為64位;5、所有存儲器訪問都必須是邊界對齊的。2.6.4MIPS的指令格式尋址方式編碼到操作碼中所有的指令都是32位的操作碼占6位3種指令格式

3種格式中,同名字段的位置固定不變。I類指令包括所有的load和store指令,立即數(shù)指令,分支指令,寄存器跳轉(zhuǎn)指令,寄存器鏈接跳轉(zhuǎn)指令。立即數(shù)字段為16位,用于提供立即數(shù)或偏移量。load指令訪存有效地址:Regs[rs]+immediate

從存儲器取來的數(shù)據(jù)放入寄存器rtstore指令訪存有效地址:Regs[rs]+immediate

要存入存儲器的數(shù)據(jù)放在寄存器rt中立即數(shù)指令

Regs[rt]←Regs[rs]opimmediate分支指令轉(zhuǎn)移目標(biāo)地址:Regs[rs]+immediate,rt無用寄存器跳轉(zhuǎn)、寄存器跳轉(zhuǎn)并鏈接轉(zhuǎn)移目標(biāo)地址為Regs[rs]R類指令包括ALU指令,專用寄存器讀/寫指令,move指令等。ALU指令

Regs[rd]←Regs[rs]functRegs[rt]funct為具體的運(yùn)算操作編碼J類指令包括跳轉(zhuǎn)指令,跳轉(zhuǎn)并鏈接指令,自陷指令,異常返回指令。在這類指令中,指令字的低26位是偏移量,它與PC值相加形成跳轉(zhuǎn)的地址。2.6.5MIPS的操作1、MIPS指令可以分為四大類load和storeALU操作分支與跳轉(zhuǎn)浮點(diǎn)操作2、符號的意義x←ny:從y傳送n位到xx,y←z:把z傳送到x和y下標(biāo):表示字段中具體的位;對于指令和數(shù)據(jù),按從最高位到最低位(即從左到右)的順序依次進(jìn)行編號,最高位為第0位,次高位為第1位,依此類推。下標(biāo)可以是一個數(shù)字,也可以是一個范圍。例如:Regs[R4]0:寄存器R4的符號位

Regs[R4]56-63:R4的最低字節(jié)Mem:表示主存;按字節(jié)尋址,可以傳輸任意個字節(jié)。上標(biāo):用于表示對字段進(jìn)行復(fù)制的次數(shù)。例如:0

32:一個32位長的全0字段符號##:用于兩個字段的拼接,并且可以出現(xiàn)在數(shù)據(jù)傳送的任何一邊。舉例:R8、R10:64位的寄存器,則Regs[R8]32-63←32

(Mem[Regs[R6]]0)24

##Mem[Regs[R6]]表示的意義是:以R6的內(nèi)容作為地址訪問內(nèi)存,得到的字節(jié)按符號位擴(kuò)展為32位后存入R8的低32位,R8的高32位(即Regs[R8]0-31)不變。

3、load和store指令指令舉例指令名稱含義LDR2,20(R3)裝入雙字Regs[R2]←64Mem[20+Regs[R3]]LWR2,40(R3)裝入字Regs[R2]←64(Mem[40+Regs[R3]]0)32##Mem[40+Regs[R3]]LBR2,30(R3)裝入字節(jié)Regs[R2]←64(Mem[30+Regs[R3]]0)56##Mem[30+Regs[R3]]LBUR2,40(R3)裝入無符號字節(jié)Regs[R2]←64056##Mem[40+Regs[R3]]LHR2,30(R3)裝入半字Regs[R2]←64(Mem[30+Regs[R3]]0)48##Mem[30+Regs[R3]]##Mem[31+Regs[R3]]L.SF2,60(R4)裝入半字Regs[F2]←64Mem[60+Regs[R4]]##032L.DF2,40(R3)裝入雙精度浮點(diǎn)數(shù)Regs[F2]←64Mem[40+Regs[R3]]SDR4,300(R5)保存雙字Mem[300+Regs[R5]]←64Regs[R4]SWR4,300(R5)保存字Mem[300+Regs[R5]]←32Regs[R4]S.SF2,40(R2)保存單精度浮點(diǎn)數(shù)Mem[40+Regs[R2]]←32Regs[F2]0··31

SHR5,502(R4)保存半字

Mem[502+Regs[R4]]←16Regs[R5]48··.63

4、ALU指令寄存器-寄存器型(RR型)指令或立即數(shù)型算術(shù)和邏輯操作:加、減、與、或、異或和移位等指令舉例指令名稱含義DADDU R1,R2,R3無符號加Regs[R1]←Regs[R2]+Regs[R3]DADDIU R4,R5,#6加無符號立即數(shù)Regs[R4]←Regs[R5]+6LUI R1,#4把立即數(shù)裝入到一個字的高16位Regs[R1]←032##4##016DSLL R1,R2,#5邏輯左移Regs[R1]←Regs[R2]<<5DSLTR1,R2,R3置小于If(Regs[R2]<Regs[R3])Regs[R1]←1elseRegs[R1]←0R0的值永遠(yuǎn)是0,它可以用來合成一些常用的操作。例如:DADDIUR1,R0,#100

給寄存器R1裝入常數(shù)100DADDR1,R0,R2

把寄存器R2中的數(shù)據(jù)傳送到寄存器R12.6.6MIPS的控制指令1、由一組跳轉(zhuǎn)和一組分支指令來實(shí)現(xiàn)控制流的改變2、典型的MIPS控制指令指令舉例指令名稱含義Jname跳轉(zhuǎn)PC36··63←name<<2JALname跳轉(zhuǎn)并鏈接Regs[R31]←PC+4;PC36··63←name<<2;((PC+4)-227)≤name<((PC+4)+227)JALRR3寄存器跳轉(zhuǎn)并鏈接Regs[R31]←PC+4;PC←Regs[R3]JRR5寄存器跳轉(zhuǎn)PC←Regs[R5]BEQZR4,name等于零時(shí)分支if(Regs[R4]==0)PC←name;((PC+4)-217)≤name<((PC+4)+217)BNER3,R4,name不相等時(shí)分支if(Regs[R3]!=Regs[R4])PC←name((PC+4)-217)≤name<((PC+4)+217)MOVZR1,R2,R3等于零時(shí)移動if(Regs[R3]==0)Regs[R1]←Regs[R2]3、跳轉(zhuǎn)指令根據(jù)跳轉(zhuǎn)指令確定目標(biāo)地址的方式不同以及跳轉(zhuǎn)時(shí)是否鏈接,可以把跳轉(zhuǎn)指令分成4種。確定目標(biāo)地址的方式把指令中的26位偏移量左移2位(因?yàn)橹噶钭珠L都是4個字節(jié))后,替換程序計(jì)數(shù)器的低28位;間接跳轉(zhuǎn):由指令中指定的一個寄存器來給出轉(zhuǎn)移目標(biāo)地址。跳轉(zhuǎn)的兩種類型簡單跳轉(zhuǎn):把目標(biāo)地址送入程序計(jì)數(shù)器。跳轉(zhuǎn)并鏈接:把目標(biāo)地址送入程序計(jì)數(shù)器,把返回地址(即順序下一條指令的地址)放入寄存器R31。4、分支指令(條件轉(zhuǎn)移)分支條件由指令確定例如:測試某個寄存器的值是否為零提供一組比較指令,用于比較兩個寄存器的值例如:“置小于”指令有的分支指令可以直接判斷寄存器內(nèi)容是否為負(fù),或者比較兩個寄存器是否相等。分支的目標(biāo)地址由16位帶符號偏移量左移兩位后和PC相加的結(jié)果來決定一條浮點(diǎn)條件分支指令:通過測試浮點(diǎn)狀態(tài)寄存器來決定是否進(jìn)行分支。132有關(guān)控制類指令的說明:控制指令是用來改變控制流的。跳轉(zhuǎn):當(dāng)指令是無條件改變控制流時(shí),稱之為跳轉(zhuǎn)指令。分支:當(dāng)控制指令是有條件改變控制流時(shí),則稱之為分支指令。能夠改變控制流的指令分支跳轉(zhuǎn)過程調(diào)用過程返回控制指令的使用頻度(load-store型指令系統(tǒng)結(jié)構(gòu)的機(jī)器,基準(zhǔn)程序?yàn)镾PECCPU2000)指令類型使用頻度整型平均浮點(diǎn)平均

調(diào)用/返回19%8%跳轉(zhuǎn)6%10%分支75%82%改變控制流的大部分指令是分支指令(條件轉(zhuǎn)移)。

分支條件的方法及其優(yōu)缺點(diǎn)

名稱檢測分支條件的方法優(yōu)點(diǎn)缺點(diǎn)條件碼(CC)檢測由ALU操作設(shè)置的一些特殊的位(即CC)可以自由設(shè)置分支條件條件碼是增設(shè)的狀態(tài)。而且它限制了指令的執(zhí)行順序,因?yàn)橐WC條件碼能順利地傳送給分支指令。條件寄存器比較指令把比較結(jié)果放入任何一個寄存器,檢測時(shí)就檢測該寄存器。簡單占用了一個寄存器比較與分支比較操作是分支指令的一部分,通常這種比較是受到一定限制的。用一條指令(而不是兩條)就能實(shí)現(xiàn)分支當(dāng)采用流水方式時(shí),該指令的操作可能太多,在一拍內(nèi)做不完。轉(zhuǎn)移目標(biāo)地址的表示最常用的方法

在指令中提供一個偏移量,由該偏移量和程序計(jì)數(shù)器(PC)的值相加而得出目標(biāo)地址。(PC相對尋址)優(yōu)點(diǎn)有效地減少表示該目標(biāo)地址所需要的位數(shù)位置無關(guān)(代碼可被裝載到主存的任意位置執(zhí)行)關(guān)鍵:確定偏移量字段的長度模擬結(jié)果表明:采用4~8位的偏移量字段(以指

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論