版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
指令系統(tǒng)5.1指令系統(tǒng)概述5.2指令系統(tǒng)結構層定義5.3指令設計5.4尋址方式5.5指令系統(tǒng)結構的發(fā)展5.6指令系統(tǒng)實例
5.1指令系統(tǒng)概述
根據(jù)設計者、使用者不同的需求和要求,計算機系統(tǒng)通常采用分層方法構建。圖5.1就是一種通俗的計算機系統(tǒng)抽象分層結構。圖5.1中,下面三層為微體系結構層、指令系統(tǒng)結構(InstructionSystemArchitecture,ISA)層、操作系統(tǒng)層。圖5.1計算機系統(tǒng)的抽象分層結構
對于硬件設計者來說,一個好的指令系統(tǒng)更容易被高效率實現(xiàn);對于軟件設計者來說,一個好的指令系統(tǒng)更便于編寫程序代碼。設計、評價指令系統(tǒng)一般從以下方面考慮:
(1)完備性:常用指令齊全,編程方便。
(2)高效性:程序占主存空間少,運行速度快。
(3)規(guī)整性:指令和數(shù)據(jù)使用規(guī)則統(tǒng)一簡單,易學易記。
(4)兼容性:同一系列的低檔計算機的程序能在高檔計算機上直接運行,即向后兼容(BackwardCompatible)。
指令有兩種表現(xiàn)形式:機器指令和助記符指令。在計算機內(nèi)部,每條指令用一定位數(shù)(指令字長)、特定編碼的二進制代碼表示,稱為機器指令(MachineInstruction)。機器指令是CPU唯一能夠識別、可執(zhí)行的指令。但機器指令不便于人的識別和記憶,于是出現(xiàn)了用特定英文符號來描述每條機器指令的做法,由此產(chǎn)生了助記符指令。所以,機器指令和助記符指令是一對一的。表5.1給出了Intelx86和RISC-V指令系統(tǒng)中兩條加法指令的示例。
5.2指令系統(tǒng)結構層定義
5.2.1存儲模式存儲模式的定義包括存儲器結構、特殊存儲區(qū)(如堆棧等)、數(shù)據(jù)存儲順序、邊界對齊等的確定。
1.數(shù)據(jù)存儲順序
不同的計算機系統(tǒng)采用不同的方式來存儲數(shù)據(jù)。
1)大端存儲(Big-EndianOrdering)大端存儲是指將數(shù)據(jù)的最低有效字節(jié)存儲在相應的高地址單元中,將最高或大端字節(jié)的地址作為字地址。該方式便于十進制數(shù)、ASCII字符串的顯示、打印處理。IBMS370/390、Motorola680x0和大部分RISC系統(tǒng)等采用這種存儲模式。
2)小端存儲(Little-EndianOrdering)
小端存儲是指將數(shù)據(jù)的最低有效字節(jié)存儲在相應的低地址單元中,將最低或小端字節(jié)的地址作為字地址。該方式有利于算術運算,滿足用同一個主存單元地址表示存儲不同長度數(shù)據(jù)的需求。Intelx86、VAX、Alpha等系統(tǒng)以及AppleiOS、谷歌Android操作系統(tǒng)、微軟WindowsforARM都采用這種存儲模式。因為小端存儲在商業(yè)上占主導地位,所以RISC-V也采用該模式。
例5.1一個32位的十六進制數(shù)據(jù)12345678H,存儲在1000H地址開始的以字節(jié)編址的主存空間中,其存儲結果見表5.2。
2.邊界對齊
所謂邊界對齊,是指數(shù)據(jù)存儲在地址為2的整數(shù)倍(16位字長)、4的整數(shù)倍(32位字長)或8的整數(shù)倍(64位字長)起始的連續(xù)存儲單元中,如圖5.2(a)所示。當所存數(shù)據(jù)不能滿足此對齊限制要求時,可填充一個或多個空白字節(jié)。Intelx86和RISC-V沒有邊界對齊限制,但MIPS系統(tǒng)有對齊限制。
在數(shù)據(jù)邊界未對齊的計算機中,數(shù)據(jù)(例如一個字)的存儲將跨兩個邊界對齊的存儲單元,此時讀/寫一個完整的數(shù)據(jù)需要訪問兩次存儲器,并需對高低字節(jié)的順序進行調整,如圖5.2(b)所示。
所以,為了簡化硬件實現(xiàn),縮短存儲器的訪問時間,通常選擇多字節(jié)的數(shù)據(jù)在主存中存放時滿足邊界對齊的要求。例如,在Pentium4CPU中,不同位數(shù)的數(shù)據(jù)可按圖5.2(c)所示方式儲存。圖5.2以小端模式存儲數(shù)據(jù)(0807060504030201H)的情況
3.堆棧(Stack)
在所有計算機系統(tǒng)中,對于主存的大部分空間,允許在任何時間對其中的任何存儲單元進行讀/寫操作,且讀/寫時間相同,這種特性稱為主存的隨機讀/寫特性。但有時我們希望對主存的操作有一定的順序性,堆棧就是主存中被特殊定義的一塊存儲區(qū)域,它具有先進后出(FirstInLastOut,FILO)的操作規(guī)則。
在使用堆棧之前,先要對堆棧的大小以及堆棧在主存中的位置做出定義。使用堆棧時用如下三個專用地址寄存器來管理。
(1)堆棧指針(StackPointer,SP):指示當前可操作的堆棧單元。
(2)堆?;?StackBase,SB):指示堆棧的底部。
(3)堆棧界限(StackLimit,SL):指示堆棧的最頂端。堆棧界限的公式為
堆棧界限=堆棧基址±堆棧大小
圖5.3所示為Intelx86和RISC-V系統(tǒng)中堆棧的兩種基本操作,在此設定棧底地址大于棧頂?shù)刂?堆棧每次操作的數(shù)據(jù)由i個字節(jié)構成。壓棧時,先做(SP)-i→SP,然后在SP指示的新存儲單元中存入要保存的數(shù)據(jù);彈出時,先將SP指示的存儲單元中的數(shù)據(jù)讀出,然后做(SP)+i→SP。在堆棧中存儲數(shù)據(jù)總是從底部向頂部發(fā)展,無論對堆棧做壓棧還是彈出操作,操作完成后,SP總是指向所有已存數(shù)據(jù)單元最上面的那個單元,稱為棧頂單元。在正常堆棧操作的情況下,必然使最先存入堆棧中的數(shù)據(jù)總是最后從堆棧中讀出。圖5.3堆棧基本操作
堆棧在過程或子程序調用和返回、中斷處理程序的進入和返回等場合被系統(tǒng)廣泛應用,用戶也可以利用堆棧進行數(shù)據(jù)保護操作。
為了防止堆棧操作錯誤,應注意以下幾點:
(1)堆棧大小要按需求設置得足夠大。
(2)用戶對堆棧的壓棧和彈出操作要成對進行,以防止堆棧溢出。
(3)最好將系統(tǒng)堆棧和用戶堆棧分開,以免用戶不慎破壞系統(tǒng)對堆棧的正常使用。
4.馮·諾依曼結構和哈佛結構
在馮·諾依曼計算機中規(guī)定,指令與數(shù)據(jù)均用二進制表示,并可在整個主存中混合存放,如圖5.4(a)所示。從指令系統(tǒng)結構層的角度看,整個主存就是單一的線性地址空間。這種指令與數(shù)據(jù)混合存儲的主存架構被稱為馮·諾依曼結構。目前仍有許多計算機系統(tǒng)主存采用這種結構,如Intel系統(tǒng)、AMD系統(tǒng)等。馮·諾依曼結構的優(yōu)點是指令和數(shù)據(jù)可以共享并充分利用主存資源;缺點是不正確的數(shù)據(jù)操作可能會破壞到指令,造成程序無法正常運行。圖5.4兩種主存結構
哈佛結構將主存分為指令存儲器和數(shù)據(jù)存儲器兩個實體,所有的程序必須放在指令存儲器的地址空間中,所有的數(shù)據(jù)必須放在數(shù)據(jù)存儲器的地址空間中,如圖5.4(b)所示。采用哈佛結構有以下優(yōu)點:
(1)指令存儲器只需做讀出操作,這使得指令存儲器的設計、控制變得較為簡單,并可以加快讀出指令的速度。
(2)所有的寫操作都自動在數(shù)據(jù)存儲器中執(zhí)行,避免了數(shù)據(jù)對程序可能造成的破壞,減少了程序出錯的機會。
(3)利用n位地址可以獲得2個2n大小的地址空間(1個2n大小的程序空間和1個2n大小的數(shù)據(jù)空間)
哈佛結構的缺點是指令存儲器和數(shù)據(jù)存儲器有可能得不到充分利用。所以,指令存儲器和數(shù)據(jù)存儲器應根據(jù)實際需要做出不同容量的設計。目前大多數(shù)RISC系統(tǒng)采用哈佛結構。
需要注意的是,在一級Cache中設立分離的指令Cache和數(shù)據(jù)Cache與在主存中設立分離的指令存儲器和數(shù)據(jù)存儲器是不同的。前者的主存可以是馮·諾依曼結構,也可以是哈佛結構;而后者的主存就是哈佛結構。
Intelx86系統(tǒng)的主存采用馮·諾依曼結構,RISC-V系統(tǒng)的主存采用哈佛結構。
5.加載/存儲體系結構
在許多RISC系統(tǒng)中,指令系統(tǒng)只提供了兩條對主存操作的指令,即加載(Load)和存儲(Store)指令,這使得訪存指令的譯碼與執(zhí)行邏輯大為簡化。Load指令實現(xiàn)將主存的數(shù)據(jù)傳送到寄存器,Store指令實現(xiàn)將寄存器的數(shù)據(jù)傳送到主存。在這種加載/存儲體系結構中,所有運算的源操作數(shù)由寄存器或指令提供,而不是直接來自主存;運算結果也必須放在寄存器中,而不是直接寫入主存。
5.2.2寄存器組織
寄存器是存儲體系中最上層(速度最快,容量最小)的存儲部件,是CPU內(nèi)部配合控制器、運算器工作的重要部件,也是指令系統(tǒng)結構層定義的重要對象。從指令系統(tǒng)結構層來看,寄存器是軟件設計者唯一能操作的CPU內(nèi)部資源。
寄存器的定義包括寄存器功能、寄存器所屬層次、寄存器規(guī)模(數(shù)量)、寄存器字長等信息的確定。
寄存器的基本功能是為CPU運行提供所需信息,保存CPU運行產(chǎn)生的結果。寄存器的主要用途是對頻繁使用的數(shù)據(jù)進行快速訪問。因此,為了獲得高性能和低功耗,指令系統(tǒng)必須設計足夠多的寄存器,并且編譯器要充分利用這些寄存器。
指令系統(tǒng)結構層可見的寄存器是可以程序訪問的。其中,一部分寄存器允許用戶程序使用,稱為用戶程序可見的寄存器,如通用寄存器;另一部分寄存器只允許在內(nèi)核模式下由操作系統(tǒng)使用,它們通常是控制高速緩存、主存、I/O設備及其他硬件的專用寄存器。通常將用戶程序可見的一組寄存器稱為寄存器組(RegisterSet)或寄存器文件(RegisterFile)。
地址寄存器的作用是在CPU訪問主存或外設資源時提供主存地址或I/O接口地址(外設地址),或提供生成地址的相關信息。地址寄存器可以有一到多個。變址寄存器是一種特殊的地址寄存器,它具有每次使用完內(nèi)部地址之后能自動對其修改的功能。
數(shù)據(jù)寄存器主要用來存放原始數(shù)據(jù)和處理結果,作為數(shù)據(jù)傳輸?shù)膩碓春湍康牡亍?/p>
指令寄存器暫存從主存中獲得的CPU要執(zhí)行的當前指令,并將該指令輸出給控制器,由控制器譯碼、執(zhí)行它。
標志寄存器也稱為程序狀態(tài)字(ProgramStatusWord,PSW),是在內(nèi)核模式和用戶模式下均可使用的寄存器,它既用于保存CPU的當前工作狀態(tài),又用于為CPU運行提供必要的控制信息。記錄在標志寄存器中、表明CPU工作狀態(tài)的信息為條件碼(ConditionCode),也稱為狀態(tài)標志。典型的條件碼包括:
Z———零標志。當CPU運行結果為0時,該標志置位,否則清零。
S———符號標志。當CPU運行結果為負數(shù)時,該標志置位,否則清零。
C———進位標志。當CPU做加法運算產(chǎn)生進位或做減法運算產(chǎn)生借位時,該標志置位,否則清零。
O———溢出標志。當CPU運行結果過大或過小而超出數(shù)據(jù)可表示范圍時,該標志置位,否則清零。
P———奇偶標志。當CPU運行結果符合偶校驗狀況(即結果中1的個數(shù)為偶數(shù)個)時,該標志置位,否則清零。
A———半加進位標志。當CPU做加/減運算時,若低4位向高4位產(chǎn)生進位或借位,則該標志置位,否則清零。
在標志寄存器中為CPU運行提供控制信息的標志稱為控制標志,典型的控制標志有:
I———中斷允許標志。當I設置為1時,允許CPU接受來自CPU之外的可屏蔽中斷請求,否則中斷被禁止。
T———單步跟蹤標志,也稱陷阱標志。當T設置為1時,允許CPU單步執(zhí)行程序,否則連續(xù)執(zhí)行程序。該標志主要在調試程序時使用。
5.2.3數(shù)據(jù)類型
數(shù)據(jù)作為指令的處理對象,需要有不同的類型、不同的格式。數(shù)據(jù)類型不同,則處理方法不同,需要的硬件支持也不同。
計算機系統(tǒng)可以處理的數(shù)據(jù)分為兩大類:數(shù)值型數(shù)據(jù)和非數(shù)值型數(shù)據(jù)。數(shù)值型數(shù)據(jù)主要是面向數(shù)字計算的,是計算機系統(tǒng)中最早出現(xiàn)的數(shù)據(jù)類型,它包括帶符號數(shù)與無符號數(shù)、定點整數(shù)與定點小數(shù)、浮點數(shù)、二十進制數(shù)等。非數(shù)值型數(shù)據(jù)在現(xiàn)代計算機中被廣泛使用,如文字、圖像處理,它包括邏輯數(shù)據(jù)(布爾值)、字符及字符串、漢字編碼、指針(地址)等。
在高級語言中,數(shù)據(jù)通常需要事先設定好類型。而在機器語言中,數(shù)據(jù)類型取決于對其所做的操作,即指令功能。也就是說,同一個數(shù)據(jù),對其進行邏輯運算,該數(shù)據(jù)類型即為邏輯數(shù)據(jù);對其進行字符處理,該數(shù)據(jù)類型即為字符數(shù)據(jù)。
5.2.4I/O模式
在指令系統(tǒng)結構層對I/O模式的定義主要涉及I/O結構。I/O結構的設計類似于主存結構,給I/O系統(tǒng)中的每個I/O設備分配不同的I/O地址,對I/O設備的操作也像對存儲單元一樣通過I/O地址進行讀/寫操作。I/O地址有兩種編碼方式:存儲器映射方式和I/O映射方式。
存儲器映射方式也稱統(tǒng)一編址方式,就是將主存的一部分地址空間分配給I/O設備。這種映射方式將主存與I/O設備放置在同一個地址空間中,I/O設備與主存被同樣看待,它們使用相同的指令和控制信號,可以做完全相同的操作。這樣做的好處是不需要專門的I/O指令,可以簡化控制。但缺點也是明顯的,在地址空間確定的情況下,兩者的地址擴充會相互制約。ARM和RISC-V采用此方式。
5.2.5指令類型
指令系統(tǒng)是指令系統(tǒng)結構層的主要特征,它的每一條指令規(guī)定了計算機的基本功能,并可以被CPU執(zhí)行。由指令構成的程序控制了計算機系統(tǒng)的運行,并決定了計算機系統(tǒng)要完成的任務。
邏輯運算類指令提供處理用戶希望使用的其他類型數(shù)據(jù)的能力。一般計算機中都設有與、或、非、異或邏輯運算指令。有些計算機還設有位操作指令,如位測試、位清除、位設置等。
程序控制類指令用來控制程序的走向,具有改變指令執(zhí)行順序的功能。它包括無條件和條件分支(跳轉)指令、無條件和條件循環(huán)指令、過程(子程序)調用和返回指令、軟中斷和中斷返回指令。條件分支和條件循環(huán)指令依據(jù)的條件主要是標志寄存器中的狀態(tài)標志,如進位標志、零標志、符號標志、溢出標志、奇偶標志。計算機之所以具有智能,在于它具有決策能力,而條件分支類指令正是決策能力的具體實現(xiàn)。
系統(tǒng)控制類指令包括空操作、等待及某些特權指令。特權指令是指具有特殊權限的指令,它們只供操作系統(tǒng)或其他系統(tǒng)軟件使用,一般不直接提供給用戶使用。通常在單用戶、單任務的計算機中不需要設置特權指令,而在多用戶、多任務的計算機系統(tǒng)中,必須設置特權指令。特權指令主要用于系統(tǒng)資源的分配和管理,如檢測用戶的訪問權限,修改虛擬存儲管理的段表、頁表,改變系統(tǒng)的工作模式,創(chuàng)建和切換任務等。在某些多用戶計算機系統(tǒng)中,為了統(tǒng)一管理外圍設備,I/O指令也被當作特權指令,用戶不能直接使用它們,需要輸入/輸出時通過系統(tǒng)調用來實現(xiàn)。
輸入/輸出(I/O)類指令完成主機與外圍設備之間的信息傳送,包括輸入/輸出數(shù)據(jù),主機向外設發(fā)送控制命令或讀取外設的工作狀態(tài)等。該類指令本質上實現(xiàn)的也是傳送操作,所以有時也將該類指令歸屬于數(shù)據(jù)傳送類。由于硬件支持不同,因此用指令操作I/O有如下不同的方式:
(1)設置專用的I/O指令:I/O編址采用獨立編址方式,即主存與I/O處于各自獨立編址的地址空間。早期x86系統(tǒng)僅采用此方式。
(2)用存儲器傳送類指令實現(xiàn)I/O操作:I/O編址采用存儲器映射方式,即主存與I/O在同一地址空間統(tǒng)一編址。RISC-V系統(tǒng)采用此方式。現(xiàn)代x86系統(tǒng)同時采用以上兩種方式。
5.3指令設計圖5.5指令的格式
5.3.1指令格式為了使指令能夠有效地指揮計算機完成各種操作,一條指令應包含兩個基本要素:操作碼和地址碼,如圖5.5所示。
操作碼(Operationcode)指定指令要完成的功能(即計算機要完成的某個基本操作)。
地址碼又稱操作數(shù)地址或操作數(shù)(Operand),用來提供該指令的操作對象。它可以直接提供操作數(shù),也可以提供操作數(shù)的存放地址。
指令格式就是對操作碼、地址碼字段的布局及用二進制編碼的表示。
5.3.2地址碼設計
指令功能不同,需要的操作數(shù)數(shù)量也有所不同。對地址碼字段布局可以為指令指定源操作數(shù)、目的操作數(shù)和下條指令地址等信息,格式如圖5.6所示。圖5.6地址碼字段的格式
圖5.6中,源操作數(shù)字段指示指令執(zhí)行開始時所需原始數(shù)據(jù)的來源;目的操作數(shù)字段指示指令執(zhí)行結束時結果數(shù)據(jù)的存放地;下條指令地址字段指示CPU欲執(zhí)行的下一條指令從主存中何地址獲取。根據(jù)指令需要,源操作數(shù)可以有0到多個,來源于指令本身、主存、寄存器或I/O端口;目的操作數(shù)可以有0到1個,目的地可以是主存、寄存器或I/O端口;下條指令地址字段僅在程序控制類指令或部分系統(tǒng)控制類指令中使用,在指令執(zhí)行順序發(fā)生改變時,由該字段提供轉移地址(順序指令地址由程序計數(shù)器PC提供)。
按照地址碼字段的數(shù)量,指令也可以分為四地址指令、三地址指令、兩地址指令、一地址指令和零地址指令,其指令格式如圖5.7所示。圖5.7多地址碼字段的指令格式
指令中的地址碼字段數(shù)和機器的字長有著比較密切的關系:一地址指令格式是8位機通常采用的地址碼結構,16位機更多采用二地址指令格式,而32位以上的計算機有條件選擇三地址結構。
指令中地址碼字段數(shù)愈多,完成同樣功能所需的指令條數(shù)愈少。對于相同的操作,不同地址碼結構的計算機有不同的實現(xiàn)方案。出于指令功能、兼容性等考慮,往往在一個指令系統(tǒng)中會出現(xiàn)幾種地址結構指令混雜的情況。
5.3.3操作碼設計
操作碼是用來指示計算機執(zhí)行某種操作或完成某種功能的,每條指令有唯一確定的操作碼,不同指令的操作碼用不同的二進制編碼表示。操作碼的編碼位數(shù)決定了指令系統(tǒng)的規(guī)?;蛴嬎銠C操作的種類。
1.定長操作碼編碼方式
對所有指令的操作碼用相同位數(shù)的二進制數(shù)進行編碼即為定長操作碼編碼方式。例如,某計算機的指令系統(tǒng)需要設置N條指令,若所有指令的操作碼均用n位二進制數(shù)表示,則應滿足關系式N≤2n。從2n個編碼中選出N個編碼分配給N條指令,即可完成操作碼設計。
操作碼長度固定的好處是操作碼構造簡單,有利于簡化硬件設計,提高指令譯碼和后續(xù)執(zhí)行速度;缺點是操作碼占用指令空間較大,且指令規(guī)模(條數(shù))擴充受到限制。RISC系統(tǒng)一般采用這種編碼方式,如SUN公司的SPARC指令系統(tǒng)。
2.變長操作碼編碼方式
對不同類型的指令操作碼用不固定長度的二進制數(shù)進行編碼即為變長操作碼編碼方式,也稱作擴展操作碼編碼方式。擴展操作碼技術是一種重要的指令優(yōu)化技術,其技術核心如下:
(1)使程序中指令的平均操作碼長度盡可能短,以減少操作碼在程序中占用的總位數(shù)。
(2)盡可能充分地利用指令的二進制數(shù)位,以增加指令字表示的操作信息。
擴展操作碼的設計原則如下:
(1)如果指令字長固定,則長地址碼對應短操作碼,操作碼長度隨地址碼長度縮短而增加。
(2)如果指令字長可變,則以指令使用頻度(指令在程序中出現(xiàn)的概率)作為設計依據(jù),使用頻度高的指令用短操作碼,使用頻度低的指令用長操作碼,這便是霍夫曼(Huffman)編碼原理。
(3)設計總是從短操作碼開始,并要保證當前使用的操作碼編碼與未來要擴展的操作碼編碼能夠有效地區(qū)分。
1)基于霍夫曼編碼原理設計變長操作碼
統(tǒng)計發(fā)現(xiàn),在程序設計過程中,由于指令功能的不同和設計者對指令使用偏好的不同,會導致一個指令系統(tǒng)中的各種指令的使用頻度大不相同。表5.3是針對SPECint92測試程序對x86指令使用情況的統(tǒng)計結果。
例5.2某計算機有10條指令,它們的使用頻度分別為0.30、0.20、0.16、0.09、0.08、0.07、0.04、0.03、0.02、0.01。用Huffman樹(最優(yōu)二叉樹)對它們的操作碼進行編碼,并計算平均代碼長度。
解圖5.8為基于霍夫曼編碼原理構造的Huffman樹。根據(jù)Huffman樹得出的Huffman編碼結果及各編碼的長度如表5.4所示。圖5.8例5.2Huffman樹
例5.3某計算機系統(tǒng)中有20條指令的使用頻度是80%,80條指令的使用頻度是15%,40條指令的使用頻度是5%,試設計固定長度和可變長度的操作碼。
解(1)定長操作碼:140條指令可用8位操作碼長度(140≤28),從256種編碼中選出140種編碼分配給140條指令作為它們的操作碼。
(2)擴展操作碼:一種設計結果如表5.5所示,其中↓代表編碼連續(xù)變化。
2)基于特定規(guī)則擴展操作碼
設計擴展操作碼不僅要考慮操作碼的可分辨性,還應考慮其是否便于快速譯碼和簡化硬件。圖5.9所示為兩種以某種特定規(guī)則設計的擴展操作碼。圖5.9特定規(guī)則的擴展操作碼編碼方法
3)依據(jù)地址碼數(shù)量擴展操作碼
對于指令字長度固定的指令系統(tǒng),為了充分利用指令的二進制位,操作碼長度一般隨地址碼數(shù)量多少而變化。
例5.4某指令系統(tǒng)的指令長度確定為32位,由三地址、二地址、一地址、零地址指令組成,其中各類指令中地址字段位數(shù)如表5.6所示,問:各類指令的操作碼可以設計為幾位?各類指令數(shù)最多可以是多少?
5.3.4指令長度設計
指令長度的確定與CPU的復雜度、主存結構、數(shù)據(jù)傳輸寬度等有關。程序員希望有更多的操作碼、更多的操作數(shù)、更多的尋址方式、更大的主存和寄存器地址范圍,這使得指令長度趨向于更長,進而使CPU更復雜,取指令和執(zhí)行指令的速度有可能會降低。所以,需要權衡考慮指令長度的確定。
指令長度設計的一般原則如下:
(1)短的操作碼與多地址碼字段配合,長的操作碼與簡單地址碼組合。
(2)指令長度一般設計為數(shù)據(jù)傳輸寬度的整數(shù)倍。
(3)指令長度為主存儲器最小可尋址單位(字節(jié))的整數(shù)倍。
在實際的計算機系統(tǒng)中,有如下三種常用的設計方案:
(1)定長操作碼,變長指令碼。也就是說,即操作碼長度固定,地址碼長度隨指令功能需要而變化,致使指令長度變化。在8086指令系統(tǒng)中,所有指令操作碼長度為8位,最短的指令為1字節(jié),最長的指令為5字節(jié)。
(2)變長操作碼,定長指令碼。在指令長度固定的情況下,讓操作碼位數(shù)隨地址碼長度的減少而擴展,如例5.4所示。在RISC-V指令中,除了一個固定長度的7位基本操作碼字段外,還有7+3位的兩個附件操作碼字段,可以擴展操作碼長度,以便增加指令數(shù)目,見5.6.1節(jié)。
(3)定長操作碼,定長指令碼。在早期的MIPS指令系統(tǒng)中,所有指令采用6位定長操作碼、32位定長指令碼的格式。
5.4尋址方式
尋址方式就是指令獲取操作數(shù)的方式。換句話說,尋址方式是規(guī)定如何對地址碼字段作出解釋以找到所需操作數(shù)的方式,或者程序轉移時找到跳轉地址的方式。尋址方式的設定決定了每個地址碼字段的長度(二進制位數(shù)),設計時要考慮兩個方面:一是要能夠有效壓縮地址碼字段長度,二是要能夠支持靈活的程序設計。
尋址方式在指令中以以下兩種方式呈現(xiàn):
(1)隱式尋址:由操作碼決定其尋址方式。
(2)顯式尋址:指令中設置尋址方式字段,由尋址方式字段的不同編碼來指定操作數(shù)的尋址方式。
5.4.1基本尋址方式
一臺計算機可以采用多種尋址方式。多數(shù)計算機都會首先采用公認的基本尋址方式,之后再增加某些獨特的尋址方式,以此構成本系統(tǒng)的尋址方式。下述尋址方式就是在大多數(shù)計算機系統(tǒng)中會出現(xiàn)的基本尋址方式。
1.隱含尋址
該尋址方式的特征是:操作數(shù)的存放地由操作碼指定。以x86乘法指令mulb1為例,該指令實現(xiàn)(a1)×(b1)→ax,其中乘數(shù)之一的8位寄存器a1和乘積存放地16位寄存器ax被隱含指定。
2.立即尋址
該尋址方式的特征是:操作數(shù)在指令中,見圖5.10。圖5.10立即尋址
3.寄存器尋址
該尋址方式的特征是:操作數(shù)在指令指定的寄存器中,見圖5.11。圖5.11寄存器尋址
寄存器尋址在尋址方式中占有十分重要的地位,它具有如下優(yōu)點:
(1)與立即尋址相比,寄存器尋址的操作數(shù)在不改變程序的情況下可以方便地修改。
(2)利用寄存器存取數(shù)據(jù)的速度比訪問主存更快,功耗更小,所以有利于加快指令的執(zhí)行,降低CPU功耗。
(3)由于寄存器數(shù)量有限,寄存器地址比主存單元地址要短得多,因而這種方式可以有效縮短指令長度。
4)用寄存器存放基址值、變址值可派生出其他尋址方式,使編程更具有靈活性。
4.直接尋址
該尋址方式的特征是:操作數(shù)地址在指令中,操作數(shù)在主存單元中,見圖5.12。圖5.12直接尋址
指令的地址字段給出操作數(shù)所在主存單元的實際地址,根據(jù)該地址直接訪問主存便可獲得操作數(shù),故稱直接尋址。
直接尋址方式的缺點是:直接提供的主存地址需要較多的二進制位,造成指令字較長,不便于操作數(shù)在主存中存放地址的靈活修改;若地址碼位數(shù)受限,會限制操作數(shù)存放的主存空間。
5.寄存器間接尋址
該尋址方式的特征是:操作數(shù)地址在指令指定的寄存器中,操作數(shù)在主存單元中,見圖5.13。圖5.13寄存器間接尋址
6.相對尋址
該尋址方式的特征是:操作數(shù)地址由程序計數(shù)器和指令提供的地址偏移量決定,操作數(shù)在主存單元中,見圖5.14。圖5.14相對尋址
7.基址尋址
該尋址方式的特征是:操作數(shù)地址由指令指定的基址寄存器和指令提供的地址偏移量決定,操作數(shù)在主存單元中,見圖5.15。圖5.15基址尋址
用指令提供的基址寄存器尋址位B或寄存器地址選擇RB(其中存放欲訪問存儲區(qū)域的基準地址),將指令中給出的偏移地址D(為帶符號整數(shù)補碼)與基準地址求和即獲得操作數(shù)的有效地址,即EA=(RB)+D,根據(jù)EA訪問主存即可獲得操作數(shù)。
基址寄存器的字長應足以指向整個主存空間,而位移量只需覆蓋本存儲區(qū)域即可。利用基址尋址方式,既能縮短指令的地址字段長度,又可以擴大尋址空間。
相對尋址與基址尋址方式的本質相同,差別僅在于提供基準地址的寄存器不同。
8.堆棧尋址
該尋址方式通常由指令操作碼指定,用在涉及堆棧操作的指令中,所尋址的操作數(shù)在堆棧中,故該尋址方式實質上也是一種隱含尋址方式。
在x86系統(tǒng)中,壓棧、調用指令中的目的操作數(shù)地址或彈出、返回指令中的源操作數(shù)地址均由堆棧指針SP隱含指定,即EA=(SP)。依據(jù)SP對堆棧進行操作數(shù)壓?;驈棾龊?SP的值會自動修改指向新的棧頂單元,見圖5.3。
5.4.2RISC-V和x86尋址方式
1.RISC-V尋址方式
RISC-V充分體現(xiàn)了RISC指令系統(tǒng)的特點,它在基本指令模塊RV32/64I中僅采用了極簡的尋址方式:立即尋址、寄存器尋址、基址尋址、相對尋址。每種尋址方式與相應類型的指令格式配合使用(見5.6.1節(jié)),使操作數(shù)獲取速度盡可能地快,且能夠支持較靈活的操作數(shù)獲取。
2.x86尋址方式
x86指令系統(tǒng)采用了一套復雜的尋址方式。16位系統(tǒng)的指令使用1字節(jié)(ModR/M)指示操作數(shù)的尋址方式,32/64位系統(tǒng)的指令使用2字節(jié)(ModR/M和SIB)以提供更多、更復雜的尋址方式。
x86的尋址方式可分為三類:
(1)立即尋址:操作數(shù)以64/32/16/8位立即數(shù)的形式出現(xiàn)在指令中。
(2)寄存器尋址:操作數(shù)放在64/32/16/8位的通用寄存器中。
(3)主存儲器尋址:按照x86系統(tǒng)主存的組織方式,主存的線性地址(LA)由段基址和有效地址(EA)構成,如圖5.16所示。圖5.16x86存儲單元尋址方式示意圖
圖5.16中,EA計算如下:
式(5.3)中,按照4個分量組合有效地址的方法不同,可以將主存尋址分為7種模式,見表5.7。多樣的尋址方式可以靈活獲取操作數(shù),同時也增加了實現(xiàn)的復雜度,降低了數(shù)據(jù)的獲取速度。
5.5指令系統(tǒng)結構的發(fā)展
在已進入計算機軟、硬件協(xié)同設計的今天,計算機的每一項設計決定都應該綜合考慮以下因素:①技術支持;②計算機體系結構;③編程語言;④編譯技術;⑤操作系統(tǒng)。
由于指令系統(tǒng)是計算機軟、硬件的交界面,因此無論是計算機硬件技術的發(fā)展還是計算機軟件技術的發(fā)展,都必然會引起指令系統(tǒng)的演變和發(fā)展。指令系統(tǒng)結構的發(fā)展歷程見圖5.17,其中CISC(ComplexInstructionSetCommputer,復雜指令集計算機)結構和RISC(ReducedInstructionSetComputer,精簡指令集計算機)結構是目前在商業(yè)上占主導地位的指令系統(tǒng)結構。CISC設計更關注功能,RISC設計更關注速度。CISC指令系統(tǒng)崇尚大而全的設計理念,RISC指令系統(tǒng)崇尚少而精、精而快的設計理念。圖5.17指令系統(tǒng)結構的發(fā)展
5.5.1CISC
由于硬件實現(xiàn)的限制,早期的計算機是簡單的。隨著大規(guī)模集成電路的發(fā)展和對計算機功能日趨強大的需求,指令系統(tǒng)受到硬件可以實現(xiàn)相當復雜的結構和成本一路下降的支持,變得越來越豐富和完備,形成了復雜指令集計算機,即CISC。
早期CISC設計有如下特點:
(1)指令系統(tǒng)復雜,即指令數(shù)多,尋址方式多,指令格式多。
(2)絕大多數(shù)指令執(zhí)行需要多個時鐘周期。
(3)有多種指令可以訪問存儲器。
(4)CPU控制器采用微程序控制方式實現(xiàn)。
(5)寄存器數(shù)量有限。
規(guī)模龐大的指令系統(tǒng)在提供豐富指令、有助于靈活程序設計的同時,也存在諸多弊端:
(1)為適應豐富的指令系統(tǒng),CPU控制器必須很復雜,相應的主存儲器必須有更大空間,這會增加指令執(zhí)行的時間,抵消復雜指令預期帶來的速度優(yōu)勢。
(2)繁多的指令會使計算機研制周期變長,調試和維護難度變大。
(3)復雜指令系統(tǒng)必然增加硬件設計和制造的復雜性,增加了研制成本。
5.5.2RISC
在20世紀70年代,很少有設計者會考慮到簡化計算機體系結構與計算機實現(xiàn)及速度之間的相互作用。1980年Ditzel和Patterson分析了高級語言結構面臨的困難,主張將計算機設計的關注點放在較簡單的體系結構上。之后的CISC系統(tǒng)發(fā)展遇到的復雜體系結構成為系統(tǒng)速度提升障礙的問題,使設計者更認識到簡化指令系統(tǒng)對構建快速計算機的重要性。
1982年以后,一種新的稱作精簡指令集計算機(RISC)的結構出現(xiàn)了。基于RISC結構的指令系統(tǒng)都遵從RISC思想:
①指令字定長;
②使用Load/Store指令;
③尋址方式有限;
④指令數(shù)量有限。
當時對指令系統(tǒng)的衡量標準也從匯編語言程序員的使用性能轉向對編譯器的支持能力。面向語言的機器設計策略徹底被RISC終結。
RISC結構計算機具有如下特點:
(1)只設置使用頻度高的簡單指令,所以指令的操作種類少,尋址方式少。
(2)指令格式規(guī)范,長度固定,便于簡單統(tǒng)一譯碼,可使控制器簡化,硬件結構精簡。
(3)僅通過Load和Store指令訪問主存。
(4)通用寄存器數(shù)量多,一般有幾十甚至幾百個,大多數(shù)操作在寄存器之間進行。
(5)在非流水線RISC中,單條指令可在單機器周期內(nèi)完成;在流水線RISC中,對于大多數(shù)指令有CPI=1。
(6)采用硬布線控制器,不使用微代碼(即微程序),有利于提高時鐘頻率和CPU速度,能夠更好地響應中斷。
(7)可簡化硬件設計,降低成本,便于超大規(guī)模集成電路實現(xiàn)。
(8)有利于多流水線、多核CPU實現(xiàn)。
(9)適宜高度優(yōu)化編譯器(即編譯程序)。
(10)精簡的指令使程序閱讀、分析難度加大。
(11)不能同CISC兼容。解決辦法:一是將源程序在CISC機器上重新編譯,二是用目標代碼翻譯器將CISC代碼翻譯成RISC代碼。
隨著芯片密度和硬件速度的提高,RISC系統(tǒng)越來越復雜(采用多流水線、多核結構),同時CISC設計也在關注與RISC相同的技術焦點,如增加通用寄存器數(shù)量和更加強調指令流水線設計等。實踐表明,RISC設計中包括某些CISC特色會有好處,CISC設計吸納RISC優(yōu)點更有利于增強自身性能。目前展現(xiàn)的發(fā)展趨勢是RISC和CISC正逐漸融合。例如RISC代表之一的PowerPC處理器設計融入了CISC技術,而CISC代表之一的x86處理器設計則采納了RISC技術。未來,RISC系統(tǒng)是否會完全取代CISC系統(tǒng),RISC-V是否能夠統(tǒng)領天下,我們拭目以待。
5.6指令系統(tǒng)實例
5.6.1RISC-V指令系統(tǒng)1.RISC-V的與眾不同1)免費、開放RISC-V是第一款開源的指令集架構,開源讓RISC-V的免費、共享成為可能,從而降低了成本。RISC-V的免費、開源更容易獲得來自操作系統(tǒng)、軟件供應商和工具開發(fā)人員的廣泛支持,每個人都可以為低功耗、性能、安全等進行優(yōu)化設計,同時保持與他人設計完全兼容。
2)簡約、模塊化
與以往的ISA不同,RISC-V是簡約、模塊化的。它的核心模塊是固定不變的基礎整數(shù)ISA,即RV32/64I,簡潔到僅有47條指令。RISC-V架構師的目標是讓RV32/64I在從最小的到最快的所有計算設備上都能有效工作,并強調簡約性來保證它的低成本。
3)穩(wěn)定、可擴展
RISC-V不僅是一個開放的ISA,其基金會還保證基本指令集和經(jīng)核準的可選擴展部分是一個不變的ISA,這種穩(wěn)定性使得軟件開發(fā)者確信為RISC-V編寫的軟件可以永遠運行在所有RISC-V核上,而軟件管理者可以依賴它來保護他們的軟件投資。
正是由于RISC-V屬于一個開放的、非營利性質的基金會,所以RISC-V完全有可能挑戰(zhàn)主流專有ISA的主導地位。
2.RISC-V的指令格式
RISC-VISA有6種基本指令格式,如圖5.18所示,其中:
opcode:操作碼,該字段表示指令的基本操作。
rd:目的操作數(shù)寄存器,存放操作結果。
funct3、funct7:附加操作碼。
rs1:第一源操作數(shù)寄存器。
rs2:第二源操作數(shù)寄存器。
imm:立即數(shù)(補碼)或地址偏移。圖5.18RISC-V指令格式
在圖5.18中,R型是用于寄存器寄存器運算的指令,I型是用于立即數(shù)運算和訪存Load操作的指令,S型是用于訪存Store操作的指令,B型是用于條件分支操作的指令,U型是用于立即數(shù)加載和加PC的指令,J型是用于無條件跳轉的指令。不同格式是通過操作碼字段的值(編碼)來區(qū)分的:在第一個字段(opcode)中為每種格式分配了一組不同的操作碼值,以便硬件知道如何處理指令的其他部分,見圖5.19。圖5.19帶有指令布局、格式類型和指令名稱的RV32I操作碼編碼圖
3.RV32/64I指令
RV32/64I全部指令見表5.8,該基礎指令系統(tǒng)可以支持構建一個功能比較完整的32/64位RISC處理器。
5.6.2x86指令系統(tǒng)
1.Intelx86指令系統(tǒng)發(fā)展
隨著x86CPU功能不斷提升,其指令格式也在不斷擴展,指令數(shù)量也在不斷擴大。表5.9是x86指令系統(tǒng)的發(fā)展歷程,從中可以看出這個系列指令系統(tǒng)的規(guī)模和始終堅守的向后兼容特性。據(jù)不同的統(tǒng)計結果顯示,到2015年,x86指令已達到1338或3600條。
2.Intel64和IA-32體系結構的指令格式
Intel64和IA-32體系結構指令格式如圖5.20所示,它是對8086指令格式(圖中有陰影字段,占1~5字節(jié))的擴展,它由可選的指令前綴(按任意次序)、基本操作碼字段(最多3字節(jié))、尋址方式指定字段(如果需要,由ModR/M和SIB字節(jié)組成)和地址偏移量字段(如果需要)、立即數(shù)字段(如果需要)組成。指令長度最短為1字節(jié),最長為17字節(jié)。圖5.20Intel64和IA-32體系結構指令編碼格式
1)指令前綴(InstructionPrefixes)
每條指令可以加或不加前綴,指令前綴分為4組:
(1)組1:封鎖和重復前綴(LockandRepeatPrefixes)。Lock前綴強制在多處理器環(huán)境中共享存儲器的獨占使用。Repeat前綴引發(fā)一條指令對串的每個元素重復執(zhí)行。
(2)組2:段超越前綴(SegmentOverridePrefixes)。該前綴允許地址跨越不同屬性的段(CS、SS、DS、ES、FS、GS)。
(3)組3:操作數(shù)長度超越前綴(Operand-SizeOverridePrefix)。該前綴允許程序在16位與32位操作數(shù)之間轉換。
(4)組4:地址范圍超越前綴(Address-SizeOverridePrefix)。該前綴允許程序在16位與32位地址空間之間轉換。
每組(Group)包含一個到多個前綴碼(每個前綴碼1字節(jié)),每條指令允許使用多個前
2)操作碼(Opcode)
基本操作碼為1~3字節(jié),某些指令附加的3位操作碼在ModR/M字節(jié)中。該字段用來指明指令的類型和功能。8086系統(tǒng)對操作碼采用1字節(jié)的固定長度編碼,而從80386開始擴展了操作碼。
Intel64和IA-32指令包括以下類型:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年12月重慶永川區(qū)衛(wèi)星湖公益性崗位招聘4人備考考試題庫及答案解析
- 2025重慶涪陵區(qū)馬武鎮(zhèn)人民政府選聘本土人才14人備考考試試題及答案解析
- 2026瑞眾保險全國校園招聘模擬筆試試題及答案解析
- 2025年12月重慶市萬州區(qū)地寶土家族鄉(xiāng)人民政府公益性崗位招聘2人備考考試題庫及答案解析
- 2025年河北雄安新區(qū)中級人民法院公開招聘聘用制人員7名模擬筆試試題及答案解析
- 2025福建廈門港務控股集團有限公司本部員工招聘5人模擬筆試試題及答案解析
- 2025年甘肅省文化和旅游廳直屬事業(yè)單位引進高層次人才15人備考筆試試題及答案解析
- 2025年榆林市榆陽區(qū)部分區(qū)屬國有企業(yè)招聘(20人)備考筆試題庫及答案解析
- 2025下半年廣東韶關市教育局直屬學校赴外地院校招聘專任教師18人(第二場編制)參考筆試題庫及答案解析
- 我的校園春游回憶作文(12篇)
- 內(nèi)分泌科糖尿病足管理指南
- 2026年江西楓林涉外經(jīng)貿(mào)職業(yè)學院單招綜合素質考試題庫及答案詳解一套
- 西藏吊橋施工方案(3篇)
- 2025中智信通第三批社會招聘(公共基礎知識)綜合能力測試題附答案解析
- 全國人大機關直屬事業(yè)單位2026年度公開招聘工作人員備考題庫附答案解析
- 2026年內(nèi)蒙古自治區(qū)招收事業(yè)編制行政執(zhí)法人員1991人考試歷年真題匯編及答案解析(奪冠)
- GB/T 46469-2025皮革物理和機械試驗抗張強度和伸長率的測定
- 新生兒奶量計算與喂養(yǎng)頻率
- 快遞員外包合同范本
- 工程居間費合同范本
- 合伙飯店協(xié)議書模板
評論
0/150
提交評論