計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第2章指令系統(tǒng).ppt_第1頁(yè)
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第2章指令系統(tǒng).ppt_第2頁(yè)
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第2章指令系統(tǒng).ppt_第3頁(yè)
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第2章指令系統(tǒng).ppt_第4頁(yè)
計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第2章指令系統(tǒng).ppt_第5頁(yè)
已閱讀5頁(yè),還剩125頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論