




已閱讀5頁,還剩125頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1 2 第二章指令系統(tǒng) 指令系統(tǒng)是硬件和軟件之間的接口 它會表明一臺計(jì)算機(jī)具有哪些硬件功能 是硬件邏輯設(shè)計(jì)的基礎(chǔ) 指令系統(tǒng)也需要為編譯器提供明確的編譯目標(biāo) 使編譯結(jié)果具有規(guī)律性和完整性 指令系統(tǒng)是計(jì)算機(jī)系統(tǒng)軟硬件功能分配的界面 也是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)設(shè)計(jì)的核心 其功能對計(jì)算機(jī)系統(tǒng)的性能有直接的影響 3 本章內(nèi)容 2 1數(shù)據(jù)表示2 2尋址技術(shù)2 3指令格式的設(shè)計(jì)與優(yōu)化2 4CISC與RISC 4 2 1數(shù)據(jù)表示 計(jì)算機(jī)系統(tǒng)中所處理的數(shù)據(jù)類型各種各樣如 文件 圖 表 樹 隊(duì)列 鏈表 棧 向量 串 實(shí)數(shù) 整數(shù) 布爾數(shù)和字符等 計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)要解決的問題是如何在硬件和軟件之間合理分配這些數(shù)據(jù)類型 即 系統(tǒng)所有的這些數(shù)據(jù)類型 哪些由硬件實(shí)現(xiàn) 哪些用軟件來實(shí)現(xiàn) 5 數(shù)據(jù)表示指的是能由硬件直接識別的數(shù)據(jù)類型 也就是由指令系統(tǒng)處理的數(shù)據(jù)類型 例如 PentiumII的數(shù)據(jù)表示包括 8位 16位和32位帶符號和無符號整數(shù) 二 十進(jìn)制數(shù) 32位和64位浮點(diǎn)數(shù) 串?dāng)?shù)據(jù) 例如 UltraSPARCII的數(shù)據(jù)表示有 8位 16位 32位和64位帶符號和無符號整數(shù) 32位 64位和128位浮點(diǎn)數(shù) UltraSPARCII沒有提供硬件指令支持二 十進(jìn)制數(shù)和串?dāng)?shù)據(jù)表示 但是它的浮點(diǎn)運(yùn)算精度可以更高 6 數(shù)據(jù)表示是數(shù)據(jù)類型中最常用的 相對比較簡單的 易于硬件實(shí)現(xiàn)的那些數(shù)據(jù)類型 相對較復(fù)雜的數(shù)據(jù)類型 如表 樹 隊(duì)列 鏈表等則是由軟件來處理 它們是數(shù)據(jù)結(jié)構(gòu)研究的對象 由于基本的數(shù)據(jù)表示在前導(dǎo)課程已有詳細(xì)闡述 本節(jié)主要更深入地討論浮點(diǎn)數(shù)表示涉及到的一些問題 以及自定義數(shù)據(jù)表示 7 2 1 1浮點(diǎn)數(shù)表示 現(xiàn)代大部分計(jì)算機(jī)都引入了浮點(diǎn)數(shù)據(jù)表示 典型的長度有32位和64位 浮點(diǎn)數(shù)表示的關(guān)鍵問題是 在數(shù)據(jù)字長確定的情況下 能設(shè)計(jì)出一種具有最佳表示范圍 表示精度和表示效率的浮點(diǎn)數(shù)表示方式 一 浮點(diǎn)數(shù)的表示范圍計(jì)算機(jī)中 典型的浮點(diǎn)數(shù)機(jī)器字格式如圖2 1所示 8 上圖中 浮點(diǎn)數(shù)機(jī)器字代碼由兩部分組成 階碼部分e和尾數(shù)部分m 階碼部分包含了階符和階碼值兩部分 尾數(shù)部分包括數(shù)符和尾數(shù)值 浮點(diǎn)數(shù)的值可表示為 其中 9 浮點(diǎn)數(shù)表示需要確定以下6個(gè)參數(shù) 尾數(shù)的基rm尾數(shù)表示可以采用用二進(jìn)制 四進(jìn)制 八進(jìn)制 十六進(jìn)制和十進(jìn)制等 即尾數(shù)的基rm可分別取值為2 4 8 16 10等 尾數(shù)的值m尾數(shù)m可以采用原碼或補(bǔ)碼表示 數(shù)值可以采用小數(shù)或整數(shù)表示 10 尾數(shù)長度n尾數(shù)占用的二進(jìn)制位數(shù)稱為尾數(shù)長度 不包括符號位 尾數(shù)的基為rm 尾數(shù)長度為n可表示的rm進(jìn)制數(shù)的位數(shù)為當(dāng)尾數(shù)采用二進(jìn)制即rm 2時(shí) 尾數(shù)長度就是n 當(dāng)尾數(shù)采用十六進(jìn)制 則需要4位二進(jìn)制數(shù)表示1位十六進(jìn)制數(shù) 這時(shí)十六進(jìn)制尾數(shù)的實(shí)際位數(shù)為 n 4 階碼的基re 階碼一般采用二進(jìn)制表示 即階碼的基re 2 階碼的值e 一般采用移碼或補(bǔ)碼表示 值采用整數(shù)表示 階碼長度q由于階碼采用二進(jìn)制 因此 階碼長度q的值就是階碼部分的二進(jìn)制數(shù)位數(shù) 注意q不包括階碼符號位 11 由于機(jī)器字長的限制 任何一種浮點(diǎn)數(shù)的表示范圍和可表示的浮點(diǎn)數(shù)個(gè)數(shù)是有限的 浮點(diǎn)數(shù)只能表示出數(shù)軸上分散于正 負(fù)兩個(gè)區(qū)間上的部分離散值 如圖2 2所示 12 在尾數(shù)采用原碼 純小數(shù) 階碼采用移碼 整數(shù)的浮點(diǎn)數(shù)表示方式中 規(guī)格化浮點(diǎn)數(shù)的表示范圍N正和N負(fù)為 13 例2 1浮點(diǎn)數(shù)長度32位 數(shù)符1位和階符1位 階碼長度q 6 尾數(shù)長度n 24 尾數(shù)和階碼采用二進(jìn)制 即rm re 2 尾數(shù)采用原碼 純小數(shù) 階碼采用移碼 整數(shù) 其規(guī)格化浮點(diǎn)數(shù)表示范圍為 即 14 例2 2浮點(diǎn)數(shù)長度32位 數(shù)符1位和階符1位 階碼長度q 6 尾數(shù)長度n 24 尾數(shù)采用十六進(jìn)制和階碼采用二進(jìn)制 即rm 16 re 2 尾數(shù)采用原碼 純小數(shù) 階碼采用移碼 整數(shù) 給出其規(guī)格化浮點(diǎn)數(shù)表示范圍 解 由于尾數(shù)采用十六進(jìn)制 24位二進(jìn)制表示6位十六進(jìn)制數(shù) 故浮點(diǎn)數(shù)表示范圍為 即 15 上述兩個(gè)例子表明 當(dāng)浮點(diǎn)數(shù)階碼尾數(shù)的二進(jìn)制位數(shù) 碼制 小數(shù)點(diǎn)位置都相同時(shí) 則浮點(diǎn)數(shù)表示范圍由基值rm決定 基值rm越大表示范圍越大 但是 基值rm越大 浮點(diǎn)數(shù)在數(shù)軸上的分布越稀 二 規(guī)格化浮點(diǎn)數(shù)的表數(shù)個(gè)數(shù)由于字長限制 浮點(diǎn)數(shù)表示方式所能表示的浮點(diǎn)數(shù)個(gè)數(shù)是有限的 不連續(xù)的 可表示的規(guī)格化浮點(diǎn)數(shù)的個(gè)數(shù)為 可表示的階碼的個(gè)數(shù)與可表示的尾數(shù)的個(gè)數(shù)的乘積 如果階碼的基re 2 則q位長的階碼可表示的階碼的個(gè)數(shù)為2q個(gè) 16 尾數(shù)的基為rm n位長的尾數(shù)可表示的rm進(jìn)制數(shù)的位數(shù)為 每個(gè)rm進(jìn)制數(shù)的數(shù)位均可以有共有rm個(gè)取值 所以 尾數(shù)的總個(gè)數(shù)為 但應(yīng)去掉小數(shù)點(diǎn)后第1個(gè)進(jìn)制數(shù)位是0的那些非規(guī)格數(shù) 顯然 非規(guī)格化尾數(shù)的個(gè)數(shù)占了全部尾數(shù)總個(gè)數(shù)的的比例 因此 可表示的浮點(diǎn)數(shù)規(guī)格化尾數(shù)的總個(gè)數(shù)就為 由此推出可表示的規(guī)格化浮點(diǎn)數(shù)的個(gè)數(shù)為 可以推出 rm越大 在與rm 2的浮點(diǎn)數(shù)相重疊的范圍內(nèi) 所表示數(shù)的個(gè)數(shù)要少得多 即數(shù)的密度分布會更稀 17 三 規(guī)格化浮點(diǎn)數(shù)的表示精度浮點(diǎn)數(shù)表示方式所能表示的浮點(diǎn)數(shù)個(gè)數(shù)是不連續(xù)的 有限的 只能表示出實(shí)數(shù)中很少的一部分 是實(shí)數(shù)的一個(gè)子集 稱為浮點(diǎn)數(shù)集 浮點(diǎn)數(shù)集的表示誤差指的是浮點(diǎn)數(shù)集中兩個(gè)最接近的浮點(diǎn)數(shù)之間的誤差 在浮點(diǎn)運(yùn)算中 會出現(xiàn)運(yùn)算中間結(jié)果或最后結(jié)果的尾數(shù)不在浮點(diǎn)集中的情況 不是溢出 這時(shí)必須用最接近這個(gè)結(jié)果的浮點(diǎn)數(shù)表示 例如 浮點(diǎn)加法運(yùn)算過程中 對階操作需要對一個(gè)浮點(diǎn)數(shù)進(jìn)行右規(guī)時(shí) 就要對尾數(shù)的最低位進(jìn)行舍入 通常采用四舍五入來確定最低位的值 這時(shí)就產(chǎn)生了誤差 18 表示誤差也稱為表示精度 規(guī)格化浮點(diǎn)數(shù)的表示精度直接與尾數(shù)基rm的取值和rm進(jìn)制的尾數(shù)位數(shù)有關(guān) 規(guī)格化浮點(diǎn)數(shù)運(yùn)算中 如果需要對尾數(shù)的最低位進(jìn)行處理 通常采用四舍五入的規(guī)則 因此 可以認(rèn)為表數(shù)誤差是尾數(shù)的最后一位的值的一半 由此可以得出規(guī)格化浮點(diǎn)數(shù)的表數(shù)精度為 2 3 19 根據(jù)式 2 3 可以得出例2 1和例2 2中兩種不同尾數(shù)基值浮點(diǎn)數(shù)的表示精度分別為 比較以上的兩個(gè)浮點(diǎn)數(shù)的表示精度 可以看出尾數(shù)基值rm 16時(shí) 其表示精度與rm 2相比將損失23倍 顯然 如果浮點(diǎn)數(shù)尾數(shù)的二進(jìn)制位數(shù)長度相同時(shí) 尾數(shù)基值rm為2具有最高的表示精度 20 四 浮點(diǎn)數(shù)機(jī)器字的格式設(shè)計(jì)定義一種浮點(diǎn)數(shù)機(jī)器字的格式需要確定浮點(diǎn)數(shù)表示的6個(gè)參數(shù) 具體原則如下 確定尾數(shù)m的數(shù)制和碼制 目前多數(shù)機(jī)器尾數(shù)m采用小數(shù) 原碼表示 確定階碼e的數(shù)制和碼制 目前一般機(jī)器階碼e都采用整數(shù) 移碼表示 確定尾數(shù)的基rm 目前多數(shù)機(jī)器尾數(shù)基值rm取2 確定階碼的基re 在一般通用計(jì)算機(jī)中 都取re 2 21 在浮點(diǎn)數(shù)表示方式中 尾數(shù)長度n主要影響表示精度 階碼長度q主要影響示數(shù)范圍 可根據(jù)要求的示數(shù)范圍和表數(shù)精度確定n和q的值 按照目前多數(shù)實(shí)際機(jī)器的情況 假設(shè) 浮點(diǎn)數(shù)尾數(shù)m用原碼 小數(shù)表示 階碼e用移碼 整數(shù)表示 尾數(shù)基值rm 2 階碼基值re 2 要求浮點(diǎn)數(shù)表示范圍不小于N N為可表示的最大正數(shù) 表示精度不低于 確定q和n的值的方法如下 22 根據(jù)浮點(diǎn)數(shù)表示范圍的要求 可得下式 解這個(gè)不等式 得到階碼長度q為 2 4 23 根據(jù)浮點(diǎn)數(shù)表示精度要求 可得下式 故得出尾數(shù)長度n為 2 5 由 2 4 和 2 5 兩個(gè)不等式得出的階碼長度q和尾數(shù)長度n 再加上一個(gè)尾數(shù)符號位mf和一個(gè)階碼符號位ef 就組成了一種滿足以上假設(shè)浮點(diǎn)數(shù)表示范圍和表數(shù)精度的浮點(diǎn)數(shù)機(jī)器字格式 一般為了使浮點(diǎn)數(shù)機(jī)器字字長滿足整數(shù)邊界的要求 還需要適當(dāng)調(diào)整q和n的值 24 例2 3設(shè)浮點(diǎn)數(shù)尾數(shù)m用原碼 小數(shù)表示 階碼e用移碼 整數(shù)表示 尾數(shù)基值rm 2 階碼基值re 2 要求規(guī)格化浮點(diǎn)數(shù)的表示范圍N為 要求浮點(diǎn)數(shù)表數(shù)精度不低于 試設(shè)計(jì)一種浮點(diǎn)數(shù)的格式 根據(jù)浮點(diǎn)數(shù)表示范圍的要求 用式 2 4 計(jì)算階碼的長度q 25 考慮到要滿足整數(shù)邊界 可取階碼長度q 7位 根據(jù)浮點(diǎn)數(shù)表數(shù)精度要求 用式 2 5 計(jì)算尾數(shù)長度n 考慮到要滿足整數(shù)邊界 可取尾數(shù)長度n 54位 26 此例中 階碼長度q 7位 尾數(shù)長度n 54位 再加上1位尾數(shù)符號位和1位階碼符號位 則浮點(diǎn)數(shù)機(jī)器字字長為2 q n 63位 距離機(jī)器字字長的整數(shù)邊界要求還差1位 如果將這1位加到尾數(shù)長度上 則設(shè)計(jì)的64位浮點(diǎn)數(shù)機(jī)器字格式如下圖所示 27 在數(shù)據(jù)表示上 高級語言與機(jī)器語言一直存在語義差距 高級語言中 在引用數(shù)據(jù)之前必須用類型說明語句定義數(shù)據(jù)類型 其運(yùn)算符不反映數(shù)據(jù)類型 是通用的 如在C語言程序中 有以下語句 inti jfloatx yi i jx x yi j是整型數(shù)據(jù) x y是實(shí)型數(shù)據(jù) 運(yùn)算符 可用于整型也可用于實(shí)型數(shù)據(jù)相加 2 1 2自定義數(shù)據(jù)表示 28 然而 一般的機(jī)器語言程序則完全不同 指令中是由操作碼定義操作數(shù)據(jù)的類型 如浮點(diǎn)數(shù)加法機(jī)器指令 以上指令中 操作碼是浮點(diǎn)加 指定對操作數(shù)X和Y進(jìn)行浮點(diǎn)加法運(yùn)算 無論X和Y是否是浮點(diǎn)數(shù) 都是按浮點(diǎn)數(shù)對待 因此 編譯時(shí)需要把高級語言程序中的數(shù)據(jù)類型說明語句和運(yùn)算符轉(zhuǎn)換成機(jī)器語言中不同類型指令的操作碼 并要驗(yàn)證指令中操作數(shù)的類型是否與運(yùn)算符所要求的一致 若不一致 還需用進(jìn)行處理 從而增加了編譯程序的復(fù)雜性 29 為了在數(shù)據(jù)表示上縮小高級語言與機(jī)器語言的語義差距 有人提出在機(jī)器語言級實(shí)現(xiàn)自定義數(shù)據(jù)表示 即由數(shù)據(jù)本身定義自己的類型 同時(shí)也簡化了指令系統(tǒng)和編譯器 自定義數(shù)據(jù)表示主要有帶標(biāo)志符的數(shù)據(jù)表示和數(shù)據(jù)描述符數(shù)據(jù)表示 一 帶標(biāo)志符的數(shù)據(jù)表示帶標(biāo)志符的數(shù)據(jù)表示是指在數(shù)據(jù)中采用若干位來表示數(shù)據(jù)的類型 30 例如 早期的B7500大型機(jī)中 每個(gè)數(shù)據(jù)用三位標(biāo)志符來區(qū)分8種數(shù)據(jù)類型 如下圖所示 標(biāo)志符雖然主要用于指明數(shù)據(jù)類型 也可用于指明所用信息類型 例如 R 2計(jì)算機(jī)中 采用帶標(biāo)志符的數(shù)據(jù)表示的數(shù)據(jù)字格式如下圖所示 31 上圖中 共有10位標(biāo)志 2位功能位用于區(qū)別數(shù)據(jù)是操作數(shù) 指令 地址還是控制字 2位陷阱位用于軟件定義4種捕捉方式 為程序員對程序進(jìn)行跟蹤控制提供方便 1位讀寫位用于指定數(shù)據(jù)是只讀的還是可讀可寫的 4位類型位可在功能位定義的基礎(chǔ)上進(jìn)一步定義數(shù)據(jù)的類型 1位標(biāo)志位是奇偶校驗(yàn)位 32 標(biāo)志符數(shù)據(jù)表示縮小了高級語言和機(jī)器語言語義差距 但是數(shù)據(jù)字因增設(shè)標(biāo)志符 會增加程序所占的主存空間 而且按標(biāo)志符確定數(shù)據(jù)屬性及判斷操作數(shù)之間是否相容等操作 會增加硬件復(fù)雜性 降低單條指令的執(zhí)行速度 二 數(shù)據(jù)描述符數(shù)據(jù)表示對于一組具有相同類型而且是連續(xù)存放的數(shù)據(jù) 如向量 矩陣和多維數(shù)組 沒有必要讓每個(gè)數(shù)據(jù)都帶有相同的標(biāo)志符 因此 可以采用數(shù)據(jù)描述符 33 數(shù)據(jù)描述符與標(biāo)志符的主要區(qū)別是 標(biāo)志符只作用于一個(gè)數(shù)據(jù) 而描述符要作用于一組數(shù)據(jù) 因此 標(biāo)志符通常與數(shù)值一起存放在同一個(gè)數(shù)據(jù)單元中 而描述符一般單獨(dú)占用一個(gè)存儲單元 描述符在描述一組數(shù)據(jù)的屬性中 還包括整個(gè)數(shù)據(jù)塊的訪問地址 長度及其他特征或信息 34 a 數(shù)據(jù)描述符 圖2 6B6700機(jī)中數(shù)據(jù)描述符表示 b 數(shù)據(jù) B6700計(jì)算機(jī)的描述符如下圖所示 前三位為 000 表示該字為數(shù)據(jù) 前三位為 101 表示該字為數(shù)據(jù)描述符 如果該字是數(shù)據(jù)描述符 則進(jìn)一步用8位標(biāo)志位描述數(shù)據(jù)特性 如果描述的是整塊數(shù)據(jù)時(shí) 地址 字段用于指明首元素的地址 長度 字段用于指明塊內(nèi)的元素個(gè)數(shù) 35 可以將描述符按樹型連接以描述多維數(shù)組表示 例如 有一個(gè)3 4二維陣列A 下圖表示了用數(shù)據(jù)描述符描述A陣列的情況 具體使用了兩級描述符 一級描述符一個(gè) 二級描述符是連續(xù)存放的三個(gè)描述符 描述符的前三位都為101 36 37 一級描述符的 長度 位為3 指向有3個(gè)元素的二級描述符的首址 每個(gè)二級描述符的 長度 位都為4 分別指向?qū)?yīng)的有4個(gè)元素的數(shù)據(jù) 圖中 二維陣列A是一條指令的一個(gè)操作數(shù) 指令中的一個(gè)地址X指向描述A陣列的一級描述符 OP表示操作碼 38 從指令系統(tǒng)層來看 程序所處理的數(shù)據(jù)通常存放在主存儲器 寄存器 堆棧 I O接口中 尋址技術(shù)就是指如何從這些存儲部件中獲得數(shù)據(jù)的技術(shù) 尋址技術(shù)主要討論存儲部件的編址方式 尋址方式和定位方式 在 計(jì)算機(jī)組成原理 課程中對指令的各種尋址方式有詳細(xì)的介紹 在本節(jié)我們更注重于分析和比較它們的特點(diǎn) 2 2尋址技術(shù) 39 要訪問存放在主存儲器 寄存器 堆棧 I O接口中的數(shù)據(jù) 必須對這些存儲部件的空間進(jìn)行編址 編址方式主要涉及編址單位和編址空間 一 編址單位存儲空間常用的編址單位有 字編址 字節(jié)編址和位編址 多數(shù)機(jī)器按字節(jié)編址 但是通常主存儲器的字長是4個(gè)字節(jié)以上 而且多數(shù)機(jī)器允許按字節(jié) 單字 雙字訪問存儲器 因此編址單位與訪問存儲器的信息寬度不一致 從而產(chǎn)生數(shù)據(jù)如何在存儲器中存放的問題 2 2 1編址方式 40 例如 某臺機(jī)器 按字節(jié)編址 數(shù)據(jù)有字節(jié) 8位 半字 雙字節(jié) 單字 4字節(jié) 和雙字 8字節(jié) 不同寬度 主存數(shù)據(jù)寬度64位 即一個(gè)存儲周期可訪問8個(gè)字節(jié) 采用按字節(jié)編址 大于字節(jié)寬度的數(shù)據(jù)是用該數(shù)據(jù)的首字節(jié)地址來尋址的 一種存放數(shù)據(jù)的方法是 在主存中允許數(shù)據(jù)從任意字節(jié)地址單元存放 如圖2 8 a 所示 這種方法很容易出現(xiàn)一個(gè)數(shù)據(jù)跨主存寬度邊界存儲的情況 對于跨界存放的數(shù)據(jù) 即使數(shù)據(jù)寬度小于或等于主存寬度 也需要兩個(gè)存儲周期才能訪問到 導(dǎo)致訪問速度顯著下降 41 a 數(shù)據(jù)按任意字節(jié)地址存放 圖2 8數(shù)據(jù)在主存中的存放方式 42 另一種數(shù)據(jù)存放方法是 要求數(shù)據(jù)在主存中存放的地址必須是該數(shù)據(jù)寬度 字節(jié)數(shù) 的整數(shù)倍 即雙字地址的最低3個(gè)二進(jìn)制位必須為000 單字地址最低2位必須為00 半字地址最低1位必須為0 如圖2 8 b 所示 這種存放方法也稱為按整數(shù)邊界存儲方式 它可以使訪問任意寬度的數(shù)據(jù)都只用一個(gè)存儲周期 雖然浪費(fèi)了一些存儲空間 但是速度比上一種方法有顯著提高 43 b 數(shù)據(jù)按整數(shù)邊界存放 圖2 8數(shù)據(jù)在主存中的存放方式 44 二 編址空間的組織計(jì)算機(jī)中需要編址的存儲部件主要有 通用寄存器 主存儲器和I O接口 它們的編址空間可以有以下3種組織方式 1 三個(gè)地址空間由于通用寄存器 主存儲器和I O接口的工作速度和容量等性能差別較大 很多機(jī)器中對這3個(gè)地址空間進(jìn)行獨(dú)立編址 也就是說 每個(gè)地址空間都從0開始編地址碼 CPU中的通用寄存器數(shù)量有限 訪問速度很快 其容量比主存儲器小得多 所需要的地址碼長度短 一般只有單一的直接尋址方式 45 主存儲器的容量大 所需要的地址碼長度很長 采用的尋址方式最復(fù)雜 一般有間接尋址和變址尋址等多種尋址方式 以避免在指令中直接表示主存單元的地址碼 I O接口中的寄存器的數(shù)量一般比通用寄存器多 其地址碼長度介于寄存器和主存之間 因此多采用直接尋址方式 也有機(jī)器采用寄存器間址方式 三個(gè)地址空間獨(dú)立編址 由于每個(gè)地址空間都從0開始編碼 因此三個(gè)空間會有重疊 但是指令的操作碼和尋址方式會明確指出所訪問的是哪個(gè)地址空間 訪問I O地址空間則需要設(shè)置專用的I O指令 如Intel80 x86系列就采用三個(gè)地址空間獨(dú)立編址 46 2 二個(gè)地址空間CPU的通用寄存器獨(dú)立編址 I O接口寄存器和主存儲器統(tǒng)一編址 統(tǒng)一編址空間的高端地址一般用于I O接口寄存器地址 二個(gè)地址空間方式中 訪問主存的指令就能訪問I O寄存器 可以減少指令條數(shù) 但其問題是主存的地址空間會減小 如VAX 11系列機(jī)就采用二個(gè)地址空間的組織方式 3 一個(gè)地址空間所有數(shù)據(jù)存儲單位統(tǒng)一編址 地址空間的低端地址是CPU的通用寄存器地址 高端地址是I O接口寄存器地址 在單片機(jī)中 片內(nèi)存儲器容量不大 一般采用一個(gè)地址空間 以減少指令種數(shù) 47 計(jì)算機(jī)中的一些專用寄存器或寄存器堆 如預(yù)取指令和數(shù)據(jù)的緩沖器 是不需要編址的 Cache存儲器映射的是相聯(lián)的主存內(nèi)容 因此不需要編址 在堆棧型計(jì)算機(jī)中 數(shù)據(jù)的存取完全按照先進(jìn)后出的方式進(jìn)行 其存儲部件是不需要編址的 48 一條指令包括操作碼和地址碼 指令的功能就是根據(jù)操作碼對地址碼提供的操作數(shù)完成指定的操作 指令中以什么方式提供操作數(shù)或操作數(shù)地址 稱為尋址方式 CPU根據(jù)指令約定的尋址方式對地址字段的有關(guān)信息作出解釋 以找到操作數(shù) 每種機(jī)器的指令系統(tǒng)都有一套自己的尋址方式 不同計(jì)算機(jī)的尋址方式的分類和名稱并不統(tǒng)一 但大多數(shù)可以歸結(jié)為以下幾種類型 2 2 2尋址方式 49 1 立即尋址 2 寄存器尋址 3 主存尋址 直接尋址方式 間接尋址方式 變址類尋址方式 4 堆棧尋址 一臺機(jī)器的指令系統(tǒng)可以采用多種尋址方式 那么在指令中如何區(qū)分它們呢 常見的方法有兩種 一種方法是由操作碼決定其尋址方式 即由操作碼含義隱含約定采用何種尋址方式 另一種方法是在指令中設(shè)置尋址方式字段 由字段不同的編碼組合來指定操作數(shù)的尋址方式 50 2 2 3程序在主存中的定位方法 在多數(shù)計(jì)算機(jī)中 編譯器在對一個(gè)源程序或源程序段進(jìn)行編譯時(shí) 是不能確定程序在主存中的實(shí)際位置 因此 編譯后的目標(biāo)程序通常是從零地址開始分配地址空間 這種地址稱為邏輯地址 邏輯地址的集合稱為邏輯地址空間 計(jì)算機(jī)中的主存儲器 是一維線性編址的 這種地址稱為主存物理地址 其地址的集合稱為主存物理空間 對于多道程序 各目標(biāo)程序的邏輯地址空間與物理地址空間是不一致的 當(dāng)程序裝入主存時(shí) 就需要進(jìn)行邏輯地址空間到物理地址空間的轉(zhuǎn)換 即對程序進(jìn)行重定位 51 靜態(tài)重定位方法 要求對程序中那些需要修改地址的指令和數(shù)據(jù)加上某種標(biāo)識 在程序運(yùn)行之前 由專門的裝入程序一次將目標(biāo)程序的帶標(biāo)識指令和數(shù)據(jù)的邏輯地址變換成物理地址 程序一旦裝入主存其物理地址不再改變 如圖2 9所示 當(dāng)目標(biāo)程序A裝入主存從a地址開始的物理空間中時(shí) 為了正確運(yùn)行程序 指令的地址碼應(yīng)必須根據(jù)不同的尋址方式作相應(yīng)的變換 如用直接尋址 間接尋址和變址尋址訪存時(shí)都應(yīng)將指令中的邏輯地址加一個(gè)a值 而對立即數(shù)和相對地址 則不加a值 52 圖2 9靜態(tài)定位方式 53 靜態(tài)定位方式在程序運(yùn)行時(shí)位置不能再改變 主存利用率低 如果程序需要的容量超過分配給它的物理空間 就必須采用覆蓋結(jié)構(gòu) 此外 多個(gè)用戶不能共享存放在主存中的同一個(gè)程序 而程序的動態(tài)定位方式則可以避免這些問題 程序動態(tài)定位方式 程序在裝入主存時(shí)不修改指令的地址碼 而是在程序執(zhí)行時(shí) 通過硬件支持的基址尋址方式將操作數(shù)的邏輯地址轉(zhuǎn)換為主存的物理地址 54 如圖2 10所示 將目標(biāo)程序A在主存中的起始地址a存入對應(yīng)的基址寄存器中 程序執(zhí)行時(shí) 由地址加法器將指令操作數(shù)的邏輯地址加上基址寄存器中程序的起始地址 就形成了操作數(shù)的物理地址 實(shí)際上 并不是所有指令的地址碼都需要修改 如立即尋址和相對尋址是不需要修改的 為此需要在指令中標(biāo)識本指令的主存地址碼是否需要加上基址 55 圖2 10動態(tài)定位方式 56 動態(tài)定位方式允許為一個(gè)程序分配不連續(xù)的主存空間 并且也允許多個(gè)程序共享存放在主存中的同一個(gè)程序段 有效地提高了主存的利用率 它還可以支持虛擬存儲器 從而大大擴(kuò)展了邏輯地址空間 但實(shí)現(xiàn)動態(tài)定位方式需要有硬件支持且實(shí)現(xiàn)存儲管理的軟件算法較復(fù)雜 57 2 3指令格式的設(shè)計(jì)和優(yōu)化 設(shè)計(jì)者在選擇指令格式時(shí) 必須考慮許多因素 包括擴(kuò)展新指令和利用在指令系統(tǒng)的使用周期中出現(xiàn)的新技術(shù)都是相當(dāng)重要的 具體的設(shè)計(jì)原則主要有三條 一般情況下 短指令要優(yōu)于長指令 占內(nèi)存少 減少內(nèi)存帶寬 可以加快取指令 使指令長度達(dá)到最小 可能會使譯碼和重疊執(zhí)行變得困難 增加指令執(zhí)行時(shí)間 在指令格式中必須有足夠的空間來表示所有的操作類型 還要考慮留下富余的空間給以后的擴(kuò)展指令使用 58 關(guān)于地址碼的個(gè)數(shù)與每個(gè)地址碼中位的數(shù)量 例如 典型RISC機(jī)器MIPS的指令長度固定為32位 操作碼6位 訪存指令設(shè)計(jì)有3個(gè)地址碼 2個(gè)5位的寄存器地址與1個(gè)16位的主存地址偏移量 采用基址尋址方式訪問主存 本節(jié)先描述與分析指令操作碼的三種編碼方式和地址碼的優(yōu)化 然后討論典型的CISC處理器PentiumII與RISC處理器SPARC的指令格式 59 一條指令是由操作碼和地址碼兩部分組成的 指令操作碼的優(yōu)化 就是指如何用最短的二進(jìn)制位數(shù)來表示指令的操作信息 使程序中指令的平均操作碼長度最短 操作碼的編碼方式主要有三種 定長操作碼 哈夫曼 Huffman 編碼和擴(kuò)展編碼 2 3 1指令操作碼的優(yōu)化 60 一 定長操作碼定長編碼是指所有指令的操作碼長度都是相等的 如果需要編碼的操作碼有n個(gè) 那么 定長操作碼的位數(shù)最少需要位 例如用指令字中第一個(gè)字節(jié) 8位 表示操作碼 這種方式有利于簡化硬件設(shè)計(jì)和減少指令譯碼時(shí)間 但是浪費(fèi)了信息量 RISC 精簡指令系統(tǒng)計(jì)算機(jī) 采用這種編碼方法 61 二 哈夫曼編碼哈夫曼 Huffman 編碼法的基本思想 當(dāng)各種事件發(fā)生的概率不均等時(shí) 對發(fā)生概率最高的事件用最短的編碼來表示 而對出現(xiàn)概率較低的事件用較長的編碼來表示 以使事件編碼的平均位數(shù)縮短 從而減少處理時(shí)間 哈夫曼編碼法可以用于信息壓縮的場合 如存儲空間的壓縮和時(shí)間的壓縮 使用哈夫曼編碼對操作碼進(jìn)行優(yōu)化表示 就需要知道每種指令在程序中出現(xiàn)的概率 使用頻度 這是通過對大量已有的典型程序進(jìn)行統(tǒng)計(jì)后得出的 62 編碼優(yōu)化的程度用平均碼長來評價(jià) 平均碼長定義為 2 6 其中 pi表示第i種操作碼在程序中的出現(xiàn)概率或使用頻度 共有n種操作碼 li是第i種操作碼的編碼長度 63 也可以用位冗余量來衡量編碼優(yōu)化的程度 位冗余量為其中 2 7 2 8 H稱為信息熵 Entropy 表示用二進(jìn)制編碼表示n個(gè)碼點(diǎn)時(shí) 理論上的最短平均編碼長度 因此 對實(shí)際編碼的平均碼長l 都有 故有0 R 1 64 例2 4假設(shè)某模型機(jī)共有n 10種不同的指令 經(jīng)統(tǒng)計(jì)各指令在程序中的使用頻度如表2 1所示 若操作碼用定長碼表示需要 4位 表2 1某模型機(jī)指令使用頻度舉例 65 根據(jù)式 2 8 計(jì)算操作碼的最短平均編碼長度為 這表明模型機(jī)10種指令的操作碼平均只需2 96位即可 如果用4位定長碼表示 l 4 根據(jù)式 2 7 計(jì)算信息冗余量為 66 利用哈夫曼算法 構(gòu)造哈夫曼樹 將10條指令的使用頻度從小到大排序構(gòu)成一個(gè)結(jié)點(diǎn)集 每次從結(jié)點(diǎn)集中選擇頻度最小的兩個(gè)結(jié)點(diǎn)合并成頻度為這兩個(gè)頻度之和的父結(jié)點(diǎn) 若結(jié)點(diǎn)集不為空集 就將生成的新結(jié)點(diǎn)放到結(jié)點(diǎn)集中 繼續(xù)從這個(gè)新的結(jié)點(diǎn)集中選擇出2個(gè)頻度最小的結(jié)點(diǎn)生成其父結(jié)點(diǎn) 直至結(jié)點(diǎn)集成為一個(gè)空集 就生成了一棵哈夫曼樹 從根節(jié)點(diǎn)開始 對每個(gè)結(jié)點(diǎn)的兩個(gè)分支分別用 0 和 1 標(biāo)識 下面對此例使用哈夫曼編碼 如圖2 11所示 67 圖2 11哈夫曼樹舉例 68 如果要得到指令I(lǐng)i的操作碼編碼 則根據(jù)圖2 11的哈夫曼樹 從根結(jié)點(diǎn)到Ii葉結(jié)點(diǎn)的路徑上 將沿線所經(jīng)過的0或1代碼依次組合起來就形成了Ii指令的哈夫曼編碼 如表2 2左部分所示 69 表2 2操作碼哈夫曼編碼和擴(kuò)展操作碼編碼 70 根據(jù)式 2 6 計(jì)算操作碼哈夫曼編碼的平均碼長為 平均碼長2 99位 非常接近于H 這種哈夫曼編碼的信息冗余量為 與4位定長碼的26 信息冗余量相比要小得多 71 需要指出的是哈夫曼編碼并非是惟一的 只要將哈夫曼樹各分支的 0 與 1 互換 就可以得到一組新的編碼 如果存在多個(gè)相同的最小頻度 由于頻度合并的次序不同 會導(dǎo)致生成不同的哈夫曼樹 得到的編碼也不相同 但是 計(jì)算的哈夫曼編碼平均碼長l是惟一的 而且是可用二進(jìn)制位編碼平均碼長最短的編碼 因此哈夫曼編碼是最優(yōu)化的編碼 72 三 操作碼擴(kuò)展編碼哈夫曼編碼具有最優(yōu)化的平均碼長 信息冗余量也接近理想值 但是 哈夫曼編碼形成的操作碼一般不規(guī)整 碼長種類多 不利于實(shí)現(xiàn)硬件譯碼和軟件編譯 實(shí)際機(jī)器中采用將定長操作碼與哈夫曼編碼結(jié)合形成的一種編碼方式 稱為操作碼擴(kuò)展編碼 這種編碼方式的操作碼長度不是定長的 但只限于幾種碼長 較規(guī)整 具體編碼規(guī)則是 根據(jù)要求確定編碼的幾種長度 然后從最短碼開始 一種長度的編碼通常要剩下一個(gè)或多個(gè)碼點(diǎn)用作擴(kuò)展標(biāo)志 為后續(xù)較長的編碼使用 與哈夫曼編碼類似 擴(kuò)展操作碼中的短碼不能是長碼的前綴 73 例2 4中的10條指令 采用2 4擴(kuò)展操作碼編碼如表2 2右部分所示 將使用頻度高的I1 I2用兩位操作碼的00 01表示 剩下二個(gè)碼點(diǎn)10 11作為擴(kuò)展為4位編碼的標(biāo)志 根據(jù)式 2 6 計(jì)算這種擴(kuò)展操作碼編碼的平均碼長為 74 表2 2操作碼哈夫曼編碼和擴(kuò)展操作碼編碼 75 這種表示法的平均長度和信息冗余量 雖比哈夾曼編碼的大 但比定長4位碼小得多 而且編碼較規(guī)整 是一種實(shí)際可用的優(yōu)化編碼 為了便于硬件分級譯碼 一般采用等長擴(kuò)展 如4 8 12擴(kuò)展法表示操作碼位數(shù)按4位 8位和12位 每級加長4位擴(kuò)展 類似還有3 6 9擴(kuò)展法等 實(shí)際機(jī)器中 也有根據(jù)需要采用每級擴(kuò)展位數(shù)不等的不等長擴(kuò)展法 76 2 3 2地址碼的優(yōu)化表示 指令由操作碼和地址碼組成 由于下一條指令地址由程序計(jì)數(shù)器給出 因此地址碼只需要給出操作數(shù)和結(jié)果的地址 地址碼長度主要取決于地址碼個(gè)數(shù) 尋址方式 存儲設(shè)備 通用寄存器 主存和堆棧等 的編址方式和尋址空間大小等 一 地址碼個(gè)數(shù)指令的地址碼個(gè)數(shù)常見的有三個(gè)地址 二個(gè)地址 一個(gè)地址及零地址 77 1 三地址指令格式為 這種格式可以使操作后兩個(gè)操作數(shù)均不被破壞 可供再次使用 間接減少了程序的長度 如典型的RISC處理器都設(shè)置有三地址指令 2 二地址指令格式為 由A2提供源操作數(shù)源地址 由A1提供目的操作數(shù)地址 在運(yùn)算后不再保留 該地址改為存放運(yùn)算結(jié)果 只是A1或A2應(yīng)盡量采用通用寄存器 以減少訪存次數(shù) 這種格式減少了指令給出的顯地址數(shù) 可以縮短指令長度 Intel80 x86主要采用這種指令格式 78 3 一地址指令格式為 一地址指令有兩種常見的形態(tài) 由操作碼定義它屬于哪一種 只有目的操作數(shù)的單操作數(shù)指令 指令中只給出一個(gè)目的地址A A既是操作數(shù)的地址 又是操作結(jié)果的存放地址 隱含約定目的地址的雙操作數(shù)指令 在某些機(jī)器中 雙操作數(shù)指令也可采用一地址指令格式 源操作數(shù)按指令給出的源地址A讀取 另一個(gè)操作數(shù) 目的操作數(shù) 隱含在CPU的累加器AC中 運(yùn)算結(jié)果也將存放在AC中 如Intel8x86的乘法 除法指令就采用該格式 可見 一地址指令不僅可用來處理單操作數(shù)運(yùn)算 也可用來處理雙操作數(shù)運(yùn)算 這是使用隱地址以簡化地址結(jié)構(gòu)的典型例子 79 4 零地址指令格式為 指令中只有操作碼 不含操作數(shù) 這種指令有兩種可能 不需要操作數(shù)的指令 例如空操作指令 停機(jī)指令等 所需操作數(shù)是隱含指定的 如計(jì)算機(jī)中對堆棧操作的運(yùn)算指令 所需的操作數(shù)事先約定在堆棧中 由堆棧指針SP隱含指出 操作結(jié)果仍送回堆棧中 又如Intel80 x86的串操作處理指令 其操作數(shù)是隱含指定的 80 從上述討論可知 指令格式中采用隱含指定操作數(shù)地址 即隱地址 能夠有效地減少地址數(shù) 實(shí)際上縮短了指令碼的長度 但是會增加指令譯碼的復(fù)雜性 上述幾種指令格式只是一般情況 并非每臺計(jì)算機(jī)都具有 例如在Intel80 x86的指令系統(tǒng)中 指令地址格式有零地址 一地址和二地址3種形式 三地址地址指令具有功能強(qiáng) 便于編程等特點(diǎn) 如RISC處理器以三地址指令為主 也設(shè)置少量二地址 一地址和零地址指令 81 二 縮短地址碼的方法當(dāng)前大多數(shù)計(jì)算機(jī)系統(tǒng)都采用虛擬存儲器系統(tǒng) 為程序提供更大的地址空間 這就要求指令中的訪存操作數(shù)地址是一個(gè)邏輯地址 虛擬地址 其長度一般遠(yuǎn)超過實(shí)際主存的所需地址長度 因此 需要考慮如何用較短的地址碼來表示一個(gè)較大的邏輯地址空間 下面討論幾種常用的縮短地址碼的方法 82 采用寄存器直接尋址 或寄存器間接尋址都可以有效地縮短地址碼長度 例如 某機(jī)器有32個(gè)寄存器 每個(gè)寄存器長度是32位 一個(gè)寄存器地址只需要5位 如果采用寄存器間址 5位地址碼就可以間接給出32位的存儲器邏輯地址 采用基址或變址尋址方式縮短地址碼長度 由基址寄存器提供全字長的地址碼 足以指向整個(gè)邏輯地址空間 運(yùn)行時(shí)可以用基址寄存器裝入某個(gè)主存區(qū)間或是程序段的首址 指令中的位移量只是相對于首址的偏移量 位移量可以比較短 例如Intel80 x86實(shí)模式的位移量通常為8位或16位 83 采用存儲器間接尋址方式縮短地址長度 例如 主存儲器按字節(jié)編址 將主存低1KB區(qū)域?qū)iT用來存放地址 如果邏輯地址需要32位 則用連續(xù)4個(gè)字節(jié)單元就可以存放32位地址 即1KB主存空間可以存放256個(gè)地址 在指令中用8位長度就可以表示32位地址 84 2 3 3指令格式設(shè)計(jì)實(shí)例 設(shè)計(jì)指令格式時(shí) 需要考慮指令的長度是采用固定的長度 還是采用可變長度 由于不同指令表示的信息量差異很大 可變長度指令就可以滿足這樣的需求 但是讀取變長指令的時(shí)間會延長 而且指令越復(fù)雜執(zhí)行時(shí)間也越長 實(shí)現(xiàn)也就更復(fù)雜 反之 指令長度固定 格式簡單 則讀取與執(zhí)行時(shí)間短 實(shí)現(xiàn)相對容易 目前多數(shù)復(fù)雜指令系統(tǒng)集計(jì)算機(jī)CISC都采用可變長度指令 如Intel80 x86系列 而精簡指令系統(tǒng)計(jì)算機(jī)RISC則一般采用固定長度指令 如SPARC MIPS 下面以典型的CISC的處理器PentiumII與RISC處理器SPARC為例討論其指令格式 85 一 PentiumII指令格式Pentium 的指令格式相當(dāng)復(fù)雜 一是要與Intel80 x86兼容 而80 x86的指令格式就比較復(fù)雜 二是Pentium 對地址和數(shù)據(jù)的32位擴(kuò)展 以及增加了尋址方式的靈活性 圖2 14給出了Pentium 的指令格式 最多具有6個(gè)變長域 只有操作碼字段是必須出現(xiàn)的 指令前綴一般根據(jù)需要選用 并放在指令前面 在Pentium機(jī)器碼程序中 大部分指令并無前綴 它們使用默認(rèn)的條件進(jìn)行操作 86 圖2 14Pentium 指令格式 87 1 指令前綴部分 指令前綴有4種 第1種包括4條前綴指令 LOCK REP REPE REPNE 第2種段指定 顯式地指定該指令使用哪個(gè)寄存器 第3種操作數(shù)長度指定 用于寄存器數(shù)據(jù)寬度切換 第4種地址長度指定 用于存儲器地址寬度切換 88 2 指令部分 指令本身包括以下字段 1 OPCODE 定義指令類型 寄存器數(shù)據(jù)寬度 及操作結(jié)果存入寄存器還是存儲器 2 MOD RM 分3個(gè)字段MOD REG RM REG 3位 定義一個(gè)寄存器尋址的操作數(shù) MOD 2位 與RM 3位 定義另一個(gè)操作數(shù)的尋址方式 包括8個(gè)寄存器尋址和24種存儲器尋址 89 3 SIB當(dāng)MOD RM 00 100時(shí) 使用SIB以說明比例變址尋址方式 4 DISP如果MOD RM定義的尋址方式需要位移量 即形式地址 由DISP字段給出 可以是8位 16位或32位 5 IMME如果指令有立即數(shù) 由IMME給出 可以是8位 16位或32位 可見 PentiumII的指令格式很復(fù)雜 這一是因?yàn)橐c80X86兼容 二是它的地址和數(shù)據(jù)擴(kuò)展到32位 90 Pentium 指令地址格式包括二地址 一地址和零地址3種形式 在早期的80 x86體系結(jié)構(gòu)中 所有指令的操作碼長度都是一個(gè)字節(jié)的長度 前綴字節(jié)作為額外的操作碼附加在指令的最前面用于改變指令的操作 然而 在80 x86體系結(jié)構(gòu)發(fā)展的過程中 所有的操作碼已經(jīng)用完 因此操作碼0 xFF作為出口碼 escapecode 以表示本條指令的操作碼是兩字節(jié)的 PentiumII的操作碼通常需要完全譯碼后才能確定執(zhí)行哪一類操作 同樣 指令的長度也只有在操作碼譯碼后才能知道 也就是譯碼后才能確定下一條指令的起始地址 這就使實(shí)現(xiàn)更高的性能如多條指令重疊或同時(shí)執(zhí)行變得更為困難 這也是可變長度指令都存在的問題 91 二 SPARC指令格式SPARC ScalableProcessorArchitecture 是指由Sun公司定義的一種RISC處理器結(jié)構(gòu) 92 SPARC所有指令的長度固定為32位 其基本指令格式如下圖 指令最高兩位操作碼 op 定義指令格式 基本指令格式只有3種 格式1專為CALL指令而設(shè) 格式2為SETHI 置高位 和BRANCH 轉(zhuǎn)移 指令而設(shè) 常用算術(shù)邏輯指令 LOAD STORE指令及其他指令均使用格式3 93 第2個(gè)操作碼op2用于區(qū)分BRANCH SETH等指令 第3個(gè)操作碼op3是定義指令操作的 每條指令只定義一個(gè)單獨(dú)的操作 opc是協(xié)處理機(jī)指令操作碼 opf是浮點(diǎn)處理機(jī)指令操作碼 指令格式3中 大多數(shù)指令的第1個(gè)源操作數(shù)rs1是寄存器操作數(shù) 第2個(gè)可能是寄存器rs2 也可能是立即數(shù)simm13 而目的地址一般均是寄存器rd 除了store和轉(zhuǎn)移指令外 整數(shù)算術(shù)邏輯運(yùn)算指令是將rs1與rs2的內(nèi)容 或simm13 按操作碼op3規(guī)定的操作運(yùn)算后把結(jié)果送往rd 其功能可以描述為 當(dāng)格式第13位i 0時(shí) rs1 op3 rs2 rd當(dāng)i 1時(shí) rs1 op3simm13 rd 94 LOAD指令將存儲器中的數(shù)據(jù)取出送到rd中 而STORE指令將rd中的數(shù)據(jù)存到存儲器中 存儲器地址的計(jì)算方法如下 寄存器間接尋址方式 當(dāng)i 0時(shí) 存儲器地址 rs1 rs2 當(dāng)i 1時(shí) 存儲器地址 rs1 simm13 95 由于指令長度是32位 因此不能在指令中包括32位常量 SETHI指令只能設(shè)置22位常量 而把剩下的10位留給其他指令去實(shí)現(xiàn) 非預(yù)取的條件轉(zhuǎn)移指令使用格式2 由cond字段決定測試哪種條件 a位用于延遲轉(zhuǎn)移控制 當(dāng)a 0時(shí) 跟在轉(zhuǎn)移指令下面的指令總是被執(zhí)行 當(dāng)a 1時(shí) 只在條件轉(zhuǎn)移指令轉(zhuǎn)移成功時(shí) 跟在轉(zhuǎn)移指令下面的指令才被執(zhí)行 格式1用于執(zhí)行過程調(diào)CALL指令 這條指令很特別 其操作碼只有兩位 其余30位都用于定義地址 96 隨著技術(shù)的發(fā)展 新的指令格式被添加進(jìn)來 新格式是通過把原來的一個(gè)字段分成不同的字段得到的 例如 最初的轉(zhuǎn)移指令使用格式2 有22位的偏移量 當(dāng)加入分支預(yù)取指令時(shí) 22位中的3位被移作他用 其中1位用于預(yù)測 預(yù)測 不預(yù)測 其他兩位用于定義使用的條件碼位集合 只剩下19位的偏移量 SPARC的指令格式 指令類型和尋址方式相對簡單 可以認(rèn)為是RISC體系結(jié)構(gòu)的代表 97 2 4指令系統(tǒng)的改進(jìn) 精簡指令系統(tǒng)計(jì)算機(jī)RISC是20世紀(jì)80年代提出的一種新的設(shè)計(jì)思想 目前市場上很多處理機(jī)都采用了RISC體系結(jié)構(gòu) 如SUN公司的SPARC SuperSPARC UtraSPARC SGI公司的R4000 RS000 R10000 IBM公司的Power PowerPC Intel公司的80860 80960 DEC公司的Alpha Motorola公司的88100等 此外 一些典型的復(fù)雜指令系統(tǒng)計(jì)算機(jī)CISC的處理機(jī)設(shè)計(jì)時(shí)也吸收一些RISC的設(shè)計(jì)思想 如Intel公司的80486和Pentium系列 本節(jié)先介紹CISC RISC的特點(diǎn) 然后以兩個(gè)典型的RISC處理器MIPSR4000與SPARC為例 討論其指令系統(tǒng) 98 計(jì)算機(jī)的發(fā)展 使指令系統(tǒng)越來越龐大 復(fù)雜 這屬于CISC 復(fù)雜指令系統(tǒng)計(jì)算機(jī) 如 P6指令系統(tǒng)比8086除了在基本指令上有較大的增強(qiáng)外 還增加了57條MMX Multi MediaeXtension 指令及70條流式SIMD擴(kuò)展指令 隨著Intel的PC機(jī)的不斷升級 考慮與以前指令系統(tǒng)的兼容性 其指令系統(tǒng)必將不斷擴(kuò)張 一 從CISC到RISC 99 CISC指令系統(tǒng)存在的問題 20 與80 規(guī)律CISC中 大約20 的指令占據(jù)了80 的處理機(jī)時(shí)間 8088處理機(jī)的指令種類約100種 前11種 11 指令的使用頻度已經(jīng)超過80 前8種 8 指令的運(yùn)行時(shí)間已經(jīng)超過80 前20種 20 指令 使用頻度達(dá)到91 1 運(yùn)行時(shí)間達(dá)到97 72 其余80 指令 使用頻度只有8 9 只占2 28 的處理機(jī)運(yùn)行時(shí)間 100 VLSI技術(shù)的發(fā)展引起的問題CISC處理器有大量的復(fù)雜指令 控制邏輯不規(guī)整 VLSI要求規(guī)整 而RISC控制簡單 符合VLSI要求 CISC要求微程序?qū)崿F(xiàn)復(fù)雜指令系統(tǒng) 而RISC使用簡單指令 可以不用微程序?qū)崿F(xiàn) 101 軟 硬件的功能分配問題CISC支持目標(biāo)程序優(yōu)化 支持高級語言和編譯程序 增加了復(fù)雜指令 使硬件復(fù)雜化 使執(zhí)行時(shí)間加長 CISC增加了指令系統(tǒng)功能 簡化了軟件 增加了硬件復(fù)雜度 102 70年代 指令系統(tǒng)已非常龐大 指令功能相當(dāng)復(fù)雜 1975年 IBM公司率先組織力量開始研究指令系統(tǒng)的合理性問題1979年研制出世界上第一臺采用RISC思想的計(jì)算機(jī)IBM8011986年 IBM正式推出采用RISC體系結(jié)構(gòu)的工作站IBMRTPC 103 二 RISC的特點(diǎn) 大多數(shù)指令在一個(gè)周期內(nèi)完成 采用LOAD STORE結(jié)構(gòu) 較少的指令數(shù)和尋址方式 固定的指令格式 面向寄存器的結(jié)構(gòu) 硬布線控制邏輯 注重編譯的優(yōu)化 104 1981年加州伯克利分校的DavidPatterson等人研制出了32位RISCI微處理器 其指令系統(tǒng)的31種指令包括 12種算術(shù)邏輯指令 8種訪問存儲器的指令 7種程序控制指令和4種其他指令 指令字長度固定為32位 以三地址指令為主 有少量二地址和一地址指令 可識別三種數(shù)據(jù)類型 只有變址尋址和相對尋址兩種尋址方式 按字節(jié)編址 只有LOAD STORE指令可以訪問存儲器 其他指令的操作都在通用寄存器之間進(jìn)行 時(shí)鐘頻率為8MHz 所有指令都在一個(gè)機(jī)器周期 500ns 完成 78個(gè)通用寄存器 將它們分為多個(gè)寄存器窗口提供給相應(yīng)過程使用 即采用重疊寄存器窗口技術(shù) 控制器占CPU面積的6 其余用于寄存器 當(dāng)時(shí)CISC的MC68000的控制器占芯片的50 故無法安排數(shù)量眾多的寄存器 只能更多地訪問存儲器 105 隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展 RISC的設(shè)計(jì)思想也有了一些發(fā)展變化 更強(qiáng)調(diào)所設(shè)計(jì)的指令系統(tǒng)支持流水線的高效率執(zhí)行 并支持編譯器生成優(yōu)化代碼 RISC為了使流水線高效率執(zhí)行 應(yīng)具有以下特征 簡單而統(tǒng)一的指令格式 加快指令譯碼 大部分指令在單周期完成 只有LOAD STORE指令能夠訪問主存 簡單的尋址方式 采用延遲轉(zhuǎn)移技術(shù) LOAD延遲技術(shù) RISC為了支持編譯器生成優(yōu)化代碼 應(yīng)具有以下特征 三地址指令格式 較多的寄存器 對稱的指令格式 106 三 減少CPI是RISC思想的精華程序執(zhí)行時(shí)間的計(jì)算公式 P I CPI T其中 P 執(zhí)行這個(gè)程序所使用的總的時(shí)間 I 這個(gè)程序所需執(zhí)行的總的指令條數(shù) CPI CyclesPerInstruction 每條指令執(zhí)行的平均周期數(shù)T是一個(gè)周期的時(shí)間長度 107 RISC的速度要比CISC快3倍左右 關(guān)鍵是RISC的CPI減小了 108 RISC的出現(xiàn)是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)發(fā)展最重要的變革之一 一方面CISC通過吸收RISC設(shè)計(jì)思想提高了傳統(tǒng)機(jī)器的性能 例如 Intel公司的80 x86處理機(jī)的指令平均周期數(shù)在不斷縮小 8086的CPI約為20 80286的CPI約為5 5 80386的CPI約為4 80486的CPI接近2 另一方面 RISC指令系統(tǒng)也開始采用一些復(fù)雜而必要的指令 使RISC計(jì)算機(jī)結(jié)構(gòu)也日益復(fù)雜 部分RISC的邏輯實(shí)現(xiàn)采用硬聯(lián)和微程序相結(jié)合 讓大多數(shù)簡單指令用硬聯(lián)方式實(shí)現(xiàn) 功能較復(fù)雜的指令允許用微程序解釋實(shí)現(xiàn) 從目前的發(fā)展趨勢來看 RISC與CISC的優(yōu)勢互補(bǔ)和技術(shù)交融將會持續(xù)下去 109 2 4 2RISC指令系統(tǒng)實(shí)例 一 MIPSR4000指令系統(tǒng)MIPSTechnology公司推出MIPSR2000 R3000和R6000微處理器芯片 具有相同的32位系統(tǒng)結(jié)構(gòu)和指令系統(tǒng) MIPSR4000與之前芯片不同 它所有內(nèi)部和外部數(shù)據(jù)路徑和地址 寄存器以及ALU都是64位的 其指令系統(tǒng)是保持兼容的 64位的結(jié)構(gòu)提供更大的地址空間 允許操作系統(tǒng)將大于1012字節(jié)的文件直接映射到虛擬存儲器 由于目前普遍使用磁盤空間達(dá)到或超過100GB 32位機(jī)器的4G地址空間變成了限制 此外 64位使得R4000能夠處理更高精度的浮點(diǎn)數(shù)如IEEE單精度浮點(diǎn)數(shù) 以及能夠一次處理字符串?dāng)?shù)據(jù)中的8個(gè)字符 110 R4000處理器包括兩個(gè)部分 CPU 存儲管理協(xié)處理器 R4000設(shè)置了32個(gè)64位通用寄存器 0 31 0寄存器的值固定為0 是一個(gè)特殊寄存器 因此 存放數(shù)據(jù)的寄存器只有31個(gè) R4000包括 64KB指令Cache 64KB的數(shù)據(jù)Cache 相對較大的Cache允許系統(tǒng)保持更多的程序代碼和局部數(shù)據(jù) 從而減少了訪存沖突和提高了指令速度 111 1 MIPS的指令格式MIPS的指令采用32位固定長度 支持三地址指令 指令格式有3種 包括立即數(shù)型 轉(zhuǎn)移型和寄存器型 如圖2 16所示 MIPS的尋址方式只有3種 立即數(shù)尋址方式 寄存器尋址方式 以及基址加16位偏移量的訪存尋址方式 112 圖2 16MIPS的指令格式 113 2 MIPS指令集MIPSR系列處理器的基本指令集如表2 4所示 MIPS基本指令集有8類指令 具體包括 LOAD STORE指令 算術(shù)指令 含立即數(shù) 算術(shù)指令 三地址 寄存器尋址 移位指令 乘 除指令 跳轉(zhuǎn)和分支指令 協(xié)處理器指令以及專門指令 所有運(yùn)算操作都基于寄存器 只有LOAD STORE指令能夠訪問主存儲器 R4000沒有存放條件碼的專用寄存器 如果一條指令產(chǎn)生某個(gè)條件 其相應(yīng)的標(biāo)志存于一個(gè)通用寄存器中 這可以避免采用專門處理?xiàng)l件代碼的邏輯 因?yàn)樗鼈冇绊懥魉€的執(zhí)行和編譯器對指令的重排序 而且 采用了處理寄存器值相關(guān)性的邏輯 以保證流水線的高效率 114 表2 4MIPSR系列基本指令集 115 表2 4MIPSR系列基本指令集 116 表2 4MIPSR系列基本指令集 117 表2 4MIPSR系列基本指令集 118 表2 5R4000附加的指令 R4000在MIPS基本指令集上增加了附加指令 新的指令類型只增加了異常處理指令 其余的是原有類型指令的擴(kuò)充 119 120 MIPS實(shí)現(xiàn)的是最簡單常用的存儲器尋址方式 基址尋址 即地
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小考畢業(yè)測試題及答案
- 家具設(shè)計(jì)軟件應(yīng)用及考察試題及答案
- 耐藥結(jié)核病試題及答案
- 簡單幾何圖形的識別試題及答案
- 黃浦區(qū)面試真題及答案
- 環(huán)藝面試筆試題目及答案
- 2025年主題公園行業(yè)品牌競爭力研究報(bào)告:市場現(xiàn)狀與未來展望
- 2025飛行技能測試題目及答案
- 金融衍生品市場2025年創(chuàng)新產(chǎn)品風(fēng)險(xiǎn)評估與防控策略報(bào)告
- 基于5G技術(shù)的2025年智慧港口自動化裝卸設(shè)備通信解決方案報(bào)告
- 第二章中國體育產(chǎn)業(yè)的發(fā)展與現(xiàn)狀
- 靜脈炎的護(hù)理 課件
- DB3303T078-2024規(guī)模以上工業(yè)企業(yè)健康評價(jià)指標(biāo)體系
- 特種作業(yè)合同協(xié)議
- 《工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)》(2002年修訂本)
- 人工髖關(guān)節(jié)置換術(shù)后的護(hù)理 課件
- 九州通集團(tuán)簡介
- 五年級語文下冊第七單元【教材解讀】-【單元預(yù)習(xí)課】課件
- 市場管理及產(chǎn)品規(guī)劃課件培訓(xùn)課件(PPT-202張)
- 超深水油田開發(fā)及水下生產(chǎn)系統(tǒng)概述-37頁的簡介
- 太湖縣趙氏宗譜編纂理事會章程
評論
0/150
提交評論