簡介
指令系統是指計算機所能執行的全部指令的集合,它描述了計算機內全部的控制信息和“
邏輯判斷”能力。不同計算機的指令系統包含的指令種類和數目也不同。一般均包含
算術運算型、邏輯運算型、數據傳送型、判定和控制型、移位操作型、位(位串)操作型、輸入和輸出型等指令。指令系統是表征一台計算機性能的重要因素,它的格式與功能不僅直接影響到機器的硬體結構,而且也直接影響到系統軟體,影響到機器的適用範圍。
一條指令就是機器語言的一個語句,它是一組有意義的
二進制代碼,指令的基本格式如:操作碼欄位+地址碼欄位,其中操作碼指明了指令的操作性質及功能,地址碼則給出了運算元或運算元的地址。
發展歷程
指令系統的發展經歷了從簡單到複雜的演變過程。早在20世紀50-60年代,計算機大多數採用分立元件的電晶體或電子管組成,其體積龐大,價格也很昂貴,因此計算機的硬體結構比較簡單,所支持的指令系統也只有十幾至幾十條最基本的指令,而且定址方式簡單。
到60年代中期,隨著積體電路的出現,計算機的功耗、體積、價格等不斷下降,硬體功能不斷增強,指令系統也越來越豐富。
在70年代,高級語言己成為大、中、小型機的主要
程式設計語言,計算機套用日益普及。由於軟體的發展超過了軟體設計理論的發展,複雜的軟體系統設計一直沒有很好的理論指導,導致軟體質量無法保證,從而出現了所謂的“
軟體危機”。人們認為,縮小機器指令系統與高級語言語義差距,為高級語言提供很多的支持,是緩解軟體危機有效和可行的辦法。計算機設計者們利用當時已經成熟的微程式技術和飛速發展的VLSI技術,增設各種各樣的複雜的、面向高級語言的指令,使指令系統越來越龐大。這是幾十年來人們在設計計算機時,保證和提高指令系統有效性方面傳統的想法和作法。
指令格式
計算機的指令格式與機器的字長、存儲器的容量及指令的功能都有很大的關係。從便於程式設計、增加基本操作並行性、提高指令功能的角度來看,指令中應包含多種信息。但在有些指令中,由於部分信息可能無用,這將浪費指令所占的存儲空間,並增加了訪存次數,也許反而會影響速度。因此,如何合理、科學地設計指令格式,使指令既能給出足夠的信息,又使其長度儘可能地與機器的字長相匹配,以節省存儲空間,縮短取指時間,提高機器的性能,這是指令格式設計中的一個重要問題。
計算機是通過執行指令來處理各種數據的。為了指出數據的來源、操作結果的去向及所執行的操作,一條指令必須包含下列信息:
(1)操作碼。它具體說明了操作的性質及功能。一台計算機可能有幾十條至幾百條指令,每一條指令都有一個相應的操作碼,計算機通過識別該操作碼來完成不同的操作。(2)運算元的地址。CPU 通過該地址就可以取得所需的運算元。(3)操作結果的存儲地址。把對運算元的處理所產生的結果保存在該地址中,以便再次使用。(4)下條指令的地址。執行程式時,大多數指令按順序依次從主存中取出執行,只有在遇到轉移指令時,程式的執行順序才會改變。為了壓縮指令的長度,可以用一個程式計數器(Program Counter,PC)存放指令地址。每執行一條指令,PC 的指令地址就自動 +1(設該指令只占一個主存單元),指出將要執行的下一條指令的地址。當遇到執行轉移指令時,則用轉移地址修改 PC 的內容。由於使用了 PC,指令中就不必明顯地給出下一條將要執行指令的地址。
一條指令實際上包括兩種信息即操作碼和地址碼。操作碼(OperationCode,OP)用來表示該指令所要完成的操作(如加、減、乘、除、數據傳送等),其長度取決於指令系統中的指令條數。地址碼用來描述該指令的操作對象,它或者直接給出運算元,或者指出運算元的存儲器地址或暫存器地址(即暫存器名)。
一條指令就是機器語言的一個語句,它是一組有意義的二進制代碼,指令的基本格式如:操作碼欄位地址碼欄位其中操作碼指明了指令的操作性質及功能,地址碼則給出了運算元或運算元的地址。
各計算機公司設計生產的計算機,其指令的數量與功能、指令格式、定址方式、數據格式都有差別,即使是一些常用的基本指令,如算術邏輯運算指令、轉移指令等也是各不相同的。因此,儘管各種型號計算機的高級語言基本相同,但將高級語言程式(例如 Fortran 語言程式)編譯成機器語言後,其差別也是很大的。因此將用機器語言表示的程式移植到其他機器上去幾乎是不可能的。從計算機的發展過程已經看到,由於構成計算機的基本硬體發展迅速,計算機的更新換代是很快的,這就存在軟體如何跟上的問題。大家知道,一台新機器推出交付使用時,僅有少量系統軟體(如作業系統等)可提交用戶,大量軟體是不斷充實的,尤其是應用程式,有相當一部分是用戶在使用機器時不斷產生的,這就是所謂第三方提供的軟體。為了緩解新機器的推出與原有應用程式的繼續使用之間的矛盾,1964 年在設計 IBM360 計算機時所採用的系列機思想較好地解決了這一問題。從此以後,各個計算機公司生產的同一系列的計算機儘管其硬體實現方法可以不同,但指令系統、數據格式、I/O 系統等保持相同,因而軟體完全兼容(在此基礎上,產生了兼容機)。當研製該系列計算機的新型號或高檔產品時,儘管指令系統可以有較大的擴充,但仍保留了原來的全部指令,保持軟體向上兼容的特點,即低檔機或舊機型上的軟體不加修改即可在比它高檔的新機器上運行,以保護用戶在軟體上的投資。
指令包括操作碼域和地址域兩部分。根據地址域所涉及的地址數量,常見的指令格式有以下幾種。
①三地址指令:一般地址域中A1、A2分別確定第一、第二運算元地址,A3確定結果地址。下一條指令的地址通常由程式計數器按順序給出。②二地址指令:地址域中A1確定第一運算元地址,A2同時確定第二運算元地址和結果地址。
③單地址指令:地址域中A 確定第一運算元地址。固定使用某個暫存器存放第二運算元和操作結果。因而在指令中隱含了它們的地址。
④零地址指令:在堆疊型計算機中,運算元一般存放在下推堆疊頂的兩個單元中,結果又放入棧頂,地址均被隱含,因而大多數指令只有操作碼而沒有地址域。
⑤可變地址數指令:地址域所涉及的地址的數量隨
操作定義而改變。如有的計算機的指令中的地址數可少至 0個,多至6個。
性能要求
指令系統的性能決定了計算機的基本功能,它的設計直接關係到計算機的硬體結構和用戶的需要。一個完善的指令系統應滿足如下四方面的要求:
完備性
指用
彙編語言編寫各種程式時,指令系統直接提供的指令足夠使用,而不必用軟體來實現。完備性要求指令系統豐富、功能齊全、使用方便。
有效性
是指利用該指令系統所編寫的程式能夠高效率地運行。高效率主要表現在程式占據存儲空間小、執行速度快。
規整性
包括指令系統的對稱性、勻齊性、指令格式和數據格式的一致性。對稱性是指:在指令系統中所有的
暫存器和存儲器單元都可同等對待,所有的指令都可使用各種定址方式;勻齊性是指:一種操作性質的指令可以支持各種數據類型;指令格式和數據格式的一致性是指:
指令長度和數據長度有一定的關係,以方便處理和存取。
兼容性
至少要能做到“向上兼容”,即低檔機上運行的軟體可以在高檔機上運行。
定址方式
根據指令內容確定運算元地址的過程稱為定址。完善的定址方式可為用戶組織和使用數據提供方便。
②間接定址:指令地址域中表示的是運算元地址的地址即指令地址碼對應的
存儲單元所給出的是地址
A,運算元據存放在地址
A指示的主存單元內。有的計算機的指令可以多次間接定址,如
A指示的主存單元記憶體放的是另一地址
B,而運算元據存放在
B指示的主存單元內,稱為多重間接定址。
③立即定址:指令地址域中表示的是運算元本身。④變址定址:指令地址域中表示的是變址暫存器號
i和位移值
D。將指定的變址暫存器內容
E與位移值
D相加,其和
E+
D為運算元地址。許多計算機具有雙變址功能,即將兩個變址暫存器內容與位移值相加,得運算元地址。變址定址有利於
數組操作和程式共用。同時,位移值長度可短於地址長度,因而指令長度可以縮短。
⑤相對定址:指令地址域中表示的是位移值
D。
程式計數器內容(即本條指令的地址)
K與位移值
D相加,得運算元地址
K+
D。當程式在
主存儲器浮動時,相對定址能保持原有程式功能。 此外,還有自增定址、自減定址、組合定址等定址方式。定址方式可由操作碼確定,也可在地址域中設標誌,指明定址方式。
種類
總況
隨著
計算機系統結構的發展,有些計算機還不斷引入新指令。如“測並置”指令是為在多機系統和
多道程式中防止重入公用子程式而設定的。指令先測試標誌位以判斷該子程式是否正在使用。如未被使用,則轉入子程式並置該標誌位,以防其他進程重入。後來又出現功能更強的信號(PV操作)指令。有的計算機還設定“執行”指令。“執行“指令執行由地址域所確定的存儲單元中的指令。其目的是避免用程式直接修改程式中的指令。這對程式的檢查和流水線等技術的套用均有好處。有的計算機採用
堆疊實現程式的調用指令和返回指令。調用時將返回地址和各種狀態、參數壓入堆疊頂部,這樣就能較好地實現子程式的嵌套和遞歸調用,並可使子程式具有可重入性。另外,一些計算機使不少複雜的操作固定化,形成諸如多項式求值、佇列插項、佇列撤項和各種翻譯、編輯等指令。
按功能劃分
①數據處理指令:包括算術運算指令、邏輯運算指令、移位指令、比較指令等。
②數據傳送指令:包括暫存器之間、暫存器與主存儲器之間的傳送指令等。
③
程式控制指令:包括條件轉移指令、無條件轉移指令、轉子程式指令等。
④輸入-輸出指令:包括各種外圍設備的讀、寫指令等。有的計算機將輸入-輸出指令包含在數據傳送指令類中。
⑤狀態管理指令:包括諸如實現置存儲保護、中斷處理等功能的管理指令。
其他劃分
向量指令和標量指令:有些大型機和巨型機設定功能齊全的向量運算指令系統。向量指令的基本操作對象是向量,即有序排列的一組數。若指令為向量操作,則由指令確定向量運算元的地址(主存儲器起始地址或向量暫存器號),並直接或隱含地指定如增量、向量長度等其他向量參數。向量指令規定
處理機按同一操作處理向量中的所有分量,可有效地提高計算機的運算速度。不具備向量處理功能,只對單個量即標量進行操作的指令稱為標量指令。
特權指令和用戶指令:在多用戶環境中,某些指令的不恰當使用會引起機器的系統性混亂。如置存儲保護、中斷處理、輸入輸出等這類指令,均稱為特權指令,不允許用戶直接使用。為此,處理機一般設定特權和用戶兩種狀態,或稱管(理)態和目(的)態。在特權狀態下,程式可使用包括特權指令在內的全部指令。在用戶狀態下,只允許使用非特權指令,或稱用戶指令。用戶如使用特權指令則會發生違章中斷。如用戶需要申請作業系統進行某些服務,如輸入-輸出等,可使用“廣義指令”,或稱為“進監督”、“訪管”等的指令。
複雜指令系統與精簡指令系統
複雜指令系統( CISC)
早期的計算機, 存儲器是一個很昂貴的資源, 因此希望指令系統能支持生成最短的程式。此外, 還希望程式執行時所需訪問的程式和數據位的總數越少越好。在微程式出現後, 將以前由一串指令所完成的功能移到了微代碼中, 從而改進了代碼密度。此外, 它也避免了從主存取指令的較慢動作, 從而提高執行效率。在微代碼中實現功能的另一論點是: 這些功能能較好的支持編譯程式。如果一條高級語言的語句能被轉換成一條機器語言指令, 這可使編譯軟體的編寫變得非常容易。此外, 在機器語言中含有類似高級語言的語句指令, 便能使機器語言與高級語言的間隙減少。這種發展趨嚮導致了複雜指令系統( CISC) 設計風格的形成, 即認為計算機性能的提高主要依靠增加指令複雜性及其功能來獲取。
CISC 指令系統的主要特點是:
( 1) 指令系統複雜。具體表現在以下幾個方面:
① 指令數多, 一般大於100 條。
② 定址方式多, 一般大於4 種。
③ 指令格式多, 一般大於4 種。
( 2) 絕大多數指令需要多個機器時鐘周期方可執行完畢。
( 3) 各種指令都可以訪問存儲器。
CISC 指令系統主要存在如下三方面的問題:
( 1) CISC 中各種指令的使用頻度相差很懸殊, 大量的統計數字表明, 大約有20%的指令使用頻度比較高, 占據了80%的處理機時間。換句話說, 有80%的指令只在20%的處理機運行時間內才被用到。
( 2) VLSI 的集成度迅速提高, 使得生產單晶片處理機成為可能。在單晶片處理機內, 希望採用規整的硬布線控制邏輯, 不希望用微程式。而在CISC 處理機中, 大量使用微程式技術以實現複雜的指令系統, 給VLSI 工藝造成很大困難。
( 3) 雖然複雜指令簡化了目標程式, 縮小了高級語言與機器指令之間的語義差距, 然而增加了硬體的複雜程度, 會使指令的執行周期大大加大, 從而有可能使整個程式的執行時間反而增加。
精簡指令系統( RISC)
由於CISC 技術在發展中出現了問題, 計算機系統結構設計的先驅者們嘗試從另一條途徑來支持高級語言及適應VLSI 技術特點。1975 年IBM 公司Jo hn Cocke 提出了精簡指令系統的構想。到了1979 年, 美國加州大學伯克萊分校由Patter son 教授領導的研究組, 首先提出了RISC 這一術語, 並先後研製了RISC-Ⅰ和RISC- Ⅱ計算機。1981 年美國的史丹福大學在Hennessy教授領導下的研究小組研製了M IPS RISC 計算機, 強調高效的流水和採用編譯方法進行流水調度, 使得RISC 技術設計風格得到很大補充和發展。
90 年代初, IEEE 的Michael Slater 對於RISC 的定義作了如下描述:RISC 處理器所設計的指令系統應使流水線處理能高效率執行, 並使最佳化編譯器能生成最佳化代碼。
RISC 為使流水線高效率執行, 應具有下述特徵:
( 1) 簡單而統一格式的指令解碼;
( 2) 大部分指令可以單周期執行完成;
( 3) 只有LOAD 和ST ORE 指令可以訪問存儲器;
( 4) 簡單的定址方式;
( 5) 採用延遲轉移技術;
( 6) 採用LOAD 延遲技術。
RISC 為使最佳化編譯器便於生成最佳化代碼, 應具有下述特徵:
( 1) 三地址指令格式;
( 2) 較多的暫存器;
( 3) 對稱的指令格式。
RISC 的主要問題是編譯後生成的目標代碼較長, 占用了較多的存儲器空間。但由於半導體集成技術的發展, 使得RAM 晶片集成度不斷提高和成本不斷下降, 目標代碼較長已不成為主要問題。RISC 技術存在另一個潛在缺點是對編譯器要求較高,除了常規最佳化方法外, 還要進行指令順序調度, 甚至能替代通常流水線中所需的硬體聯鎖功能。
執行步驟
一條指令的執行過程按時間順序可分為以下幾個步驟。
① CPU發出指令地址。將指令指針暫存器(IP)的內容——指令地址,經地址匯流排送入存儲器的地址暫存器中。
② 從地址暫存器中讀取指令。將讀出的指令暫存於存儲器的數據暫存器中。
③ 將指令送往指令暫存器。將指令從數據暫存器中取出,經數據匯流排送入控制器的指令暫存器中。
④ 指令解碼。指令暫存器中的操作碼部分送指令解碼器,經解碼器分析產生相應的操作控制信號,送往各個執行部件。
⑤ 按指令操作碼執行。
⑥ 修改程式計數器的值,形成下一條要取指令的地址。若執行的是非轉移指令,即順序執行,則指令指針暫存器的內容加1,形成下一條要取指令的地址。指令指針暫存器也稱為程式計數器。