《計算機組成原理》課件第5章_第1頁
《計算機組成原理》課件第5章_第2頁
《計算機組成原理》課件第5章_第3頁
《計算機組成原理》課件第5章_第4頁
《計算機組成原理》課件第5章_第5頁
已閱讀5頁,還剩155頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章

指令系統本章導讀指令是計算機軟硬件的接口,對機器的性能及硬件結構影響非常大。本章首先介紹指令的基本格式,討論操作碼的定長與擴展兩種設計方法;然后介紹并舉例說明計算機中一般需設置的指令類型與操作數類型。本章導讀接著對常見的尋址方式進行介紹,內容包括指令尋址與數據尋址兩大部分。最后從指令系統的發展情況引入介紹CISC與RISC的技術特點,并通過具體的例子,說明指令設計時需考慮的一些因素和CISC機器與RISC機器的指令系統格式特點。本章要點指令的基本格式定長操作碼指令格式擴展操作碼指令格式有效地址的概念數據尋址和指令尋址常見尋址方式CISC與RISC的基本概念5.1指令格式5.1.1指令的基本格式5.1.2定長操作碼與擴展操作碼5.1.3指令字長指令是指揮計算機工作的命令,是計算機軟件與硬件的接口。計算機的性能好壞與它所設置的指令系統有很大關系,而指令系統的設置又與機器的硬件結構密切相關。通常性能較好的計算機都設置有功能齊全、通用性強、類型豐富的指令系統,但這需要復雜的硬件結構來支持。計算機設計者主要研究如何確定機器的指令系統,如何用硬件電路、芯片、設備來實現機器指令系統的功能。計算機的使用者則是根據機器提供的指令系統,使用各種語言來編制各種程序。并能根據機器指令系統所描述的機器功能,可以清楚地了解計算機內部寄存器-存儲器結構,以及計算機能直接支持的各種數據類型。5.1.1指令的基本格式計算機是通過執行指令來處理各種數據的。為了指出數據的來源、操作結果的去向及所執行的操作,一條指令通常包括下列基本信息:(1)操作碼,具體說明了操作的性質及功能。每一條指令都有一個相應的唯一操作碼。(2)操作數的地址。機器通過該地址就可以找到所需的操作數。(3)操作結果的存儲地址。機器把對操作數的處理所產生的結果保存在該地址中,以便再次使用。(4)下一條指令的地址。一般來說,當程序順序執行時,下條指令的地址由程序計數器(PC)遞增給出;僅當改變程序的運行順序(如轉移、調用子程序)時,需要由指令指明目的地址。從上述分析可知,一條指令實際上包括兩種基本信息,即操作碼(operationcode)和地址碼(address)。其基本格式如圖5-1所示。圖5-1指令的基本格式地址碼字段用來指出該指令的源操作數的地址(一個或兩個)、結果的地址以及下一條指令的地址。這里的“地址”可以是主存的地址,也可以是寄存器的地址,甚至可以是I/O設備的地址。根據地址碼部分所給出地址的個數,指令格式可分為如下幾種。(1)零地址指令格式:指令中只有操作碼,而沒有操作數或沒有操作數地址。這種指令有兩種可能:一是指令無需任何操作數。如空操作指令。一是所需的操作數是默認的。如堆棧結構計算機的運算指令,所需的操作數默認在堆棧中,由堆棧指針SP隱含指出,操作結果仍放回堆棧中。(2)一地址指令格式:A——操作數的存儲器地址或寄存器名。指令中只給出一個地址,該地址既是操作數的地址,又是操作結果的存儲地址。如加1,減1和移位等操作均采用這種格式。它也可完成(ACC)OP(A)→ACC的操作,用累加器ACC既存放參加運算的操作數,又存放運算的結果。(3)二地址指令格式:這是最常見的指令格式,它可完成(A1)OP(A2)→A1的操作,即A1字段既代表源操作數的地址,又代表存放本次運算結果的地址。有些機器也可表示(A1)OP(A2)→A2的操作。在該格式中,根據操作數的物理位置,又可分為3類:RR型、RS型和SS型。RR型:機器在執行這類指令時,需要多個通用寄存器或個別專用寄存器,從寄存器中取操作數,把操作結果放到另一寄存器中。由于這類指令不需訪問內存,所以執行速度很快。RS型:執行這類指令時,既要訪問內存單元,又要訪問寄存器。SS型:這種指令操作時存取數據都涉及到內存單元,即參與操作的數都放在內存中,因此這類指令需要多次訪問內存,速度較慢。(4)三地址指令格式:它可完成(A1)OP(A2)→A3的操作。(5)多地址指令這類指令較為少見,它可用于處理成批數據,如字符串處理指令,向量、矩陣運算指令等。為了描述一批數據,指令中需要多個地址來指出數據存放的首地址、長度和下標等信息。在計算機中,指令和數據一樣,都是以二進制編碼的形式存儲的,從表面來看,兩者沒有什么差別。但是,指令的地址是由程序計數器(PC)規定的,而數據的地址是由指令規定的,在CPU控制下訪存操作絕對不會將指令和數據混淆。為了程序能重復執行,一般要求程序在運行前后所有的指令都保持不變,因此在程序執行過程中,要避免修改指令。5.1.2定長操作碼與擴展操作碼操作碼用來指明該指令所要完成的操作,如加法、減法、傳送、移位等等。通常,其位數反映了機器具有的操作種類,也即機器允許的指令條數。若某機器的操作碼長度為K位,則它最多有2K個不同的編碼,只能表示2K條不同的指令。指令操作碼通常有兩種編碼格式:一種是定長格式,即操作碼的長度固定,且集中放在指令字的一個字段中。這種格式對于簡化機器硬件設計,減少指令譯碼時間非常有利。另一種是可變格式,即操作碼的長度可變,且分散地放在指令字的不同字段中。這種格式能有效地壓縮程序中操作碼的平均長度。顯然,操作碼長度不固定將增加指令譯碼和分析的難度,使控制器的設計復雜化,因此操作碼的編碼對機器性能影響極大。通常是在指令字中用一個固定長度的字段來表示基本操作碼,而對于一部分不需要某個地址碼的指令,把它們的操作碼擴展到該地址字段,這樣既能充分利用指令字的各個字段,又能在不增加指令長度的情況下擴展操作碼的長度,使它能表示更多的指令。設某機器的指令長度為16位,包括4位基本操作碼字段和3個4位地址碼字段,其格式如圖5-2所示。可見,若操作碼固定,則最多可表示16條3地址指令。但如果機器所需3地址指令沒有這么多,就可以把一部分地址碼字段擴充為操作碼。一種擴充方案如下:(1)用4位基本操作碼編碼的0000~1110來表示15條3地址指令,剩下的編碼1111用于把操作碼擴展到A1字段。圖5-2指令格式(2)用11110000~11111110表示15條2地址指令的操作碼,剩下的編碼11111111用于把操作碼擴展到A2字段。(3)用12位操作碼編碼的111111110000~111111111110表示15條1地址指令,剩下的編碼111111111111用于表示把操作碼擴展到A3字段。(4)用1111111111110000~1111111111111111表示16條零地址指令的操作碼。對這種擴充方案,在不增加指令長度的情況下,可表示61條指令。當然還有別的擴充方案,如可形成14條三地址指令,30條二地址指令,30條一地址指令和32條零地址地址,共106條指令。在可變長度的指令系統的設計中,到底使用何種擴展方法除了要考慮機器實際所需指令字長及指令條數外,還有一個重要的原則,就是使用頻率(指令在程序中出現的平均概率)高的指令應分配短的操作碼;使用頻率低的指令可分配較長的操作碼。這樣不僅可以有效縮短操作碼在程序中的平均長度,節省存儲器空間,而且縮短了經常使用的指令的譯碼時間,提高了程序的運行速度。假設某計算機模型有7條指令(I1~I7),它們在程序中出現的概率用Pi表示,如表5-1所示,則可得相應操作碼擴展方案。表5-1指令出現概率與操作碼長度選擇指令概率Pi(%)操作碼操作碼長度(位)I1I2I3I4I5I6I7472617531100011011001101111011112224444該方案中,使用頻率高的指令的操作碼為2位,低的用4位,和采用固定長度的操作碼方案比較,7條指令采用固定格式需要用3位操作碼,考慮程序中對指令操作碼的平均譯碼位數的話,固定格式平均是3位,而可變格式為90%×2+10%×4=2.2位。這不是壓縮到最小代碼的方案(最小代碼方案可考慮用哈夫曼編碼實現),因為在計算機中的操作碼還是希望有一定的規整性,否則會引起硬件實現的復雜化。另外在計算機內存放的指令長度一般是字節的整數倍,所以操作碼與地址碼兩部分長度之和最好是字節的整數倍。在考慮操作碼長度時還應考慮地址碼的要求。5.1.3指令字長指令字長取決于操作碼的長度、操作數地址的長度和操作數地址的個數。不同機器的指令字長是不相同的。為了充分利用存儲空間,指令的長度通常設置為字節的整數倍。早期的計算機指令字長、機器字長和存儲字長均相等,因此訪問某個存儲單元,便可取出一條完整的指令。這種機器的指令字長是固定的,控制起來比較簡單。隨著計算機的發展,指令字長發生了很大的變化,在同一臺計算機中的指令,它既可以小于或等于機器的字長,也可以大于機器的字長。前者稱為短格式指令,后者稱為長格式指令。一條長格式指令通常存放在地址連續的存儲空間中,控制這類指令的電路比較復雜,而且多字長指令要多次訪問存儲器才能取出一條完整的指令,因此使CPU執行速度下降。為了提高指令的運行速度和節省存儲空間,通常盡可能把常用的指令設計成短格式指令。5.2操作數類型和操作類型5.2.1操作數類型5.2.2數據在存儲器中的存放方式5.2.3操作類型5.2.4Pentium機器數據類型和操作類型5.2.1操作數類型指令是對數據進行操作處理的,通常可把數據分為地址、數字、字符、邏輯數據等。(1)地址:通常包括主存地址或I/O地址,許多情況下要進行操作數地址的計算,此時,地址可認為是一個無符號的整數。(2)數字:計算機中常見的數字有定點數、浮點數和十進制數。這些數字的表示和運算在第三章作了詳細介紹。(3)字符:除了數字之外,計算機中普遍使用的另一種數據類型為文本或字符串。由于計算機在處理信息過程中需要以二進制形式存儲和傳送,因此普遍采用ASCII碼等編碼方案。(4)邏輯數據:計算機除了做算術運算外,有時還需作邏輯運算,此時n個0和1的組合不被看作算術數字,而是看作邏輯數。這種位排列方法有兩個優點。首先,有時我們希望存儲一個布爾或二進制數據項陣列,陣列中的每項只能取值1(真)或0(假)。這種存儲方式能達到存儲器最有效的使用。第二,可以對數據項的具體位進行操作。5.2.2數據在存儲器中的存放方式目前所用計算機的機器字長一般為32位。存儲器的地址,一般按字節表示。計算機的指令系統可支持對字節、半字、字、雙字的運算,有些計算機還有位處理指令。為便于硬件實現,一般要求多字節數據對準邊界,如圖5-3(a)所示。圖5-3存儲器中數據的存放當所存數據不能滿足此要求時,則填充一個至多個空白字節。也有的計算機不要求對準邊界,但可能增加訪問存儲器次數。在數據對準邊界的計算機中,當以二進制來表示地址時,半字地址的最低位恒為0,字地址的最低兩位為0,雙字地址的最低三位為0。圖5-4為按字節編址的雙字數據的兩種字節次序:(a)表示低字節為低地址;(b)表示高字節為低地址。通常計算機中采用的是低字節在低地址、高字節在高位地址的方式。圖5-4兩種字節次序5.2.3操作類型指令系統決定了計算機所具有的基本功能,因此設計一個合理而又有效的指令系統是至關重要的,它對機器的性能價格比有很大影響。但一臺計算機最基本、必不可少的指令是不多的,因為很多指令都可以用這些最基本的指令組合來實現。在一般計算機中通常都設置有以下幾種類型的指令。(1)數據傳送這類指令用以實現寄存器與寄存器,寄存器與存儲器單元,存儲器單元與存儲器單元之間的數據傳送。對于存儲器來講,數據傳送包括了對數據的讀或寫操作,數據從源地址傳送到目的地址,而源地址中的數據保持不變,因此實際上是數據復制。(2)算術邏輯運算計算機中一般要根據算術運算、邏輯運算的結果置狀態位,常用狀態位有N(結果為負)、Z(結果為0)、V(結果溢出)、C(產生進位或借位)四個。當滿足括號內的條件時,相應狀態位被置“1”,否則為“0”。(3)移位操作移位操作指令分為算術移位、邏輯移位和循環移位三種,可以將操作數左移或右移若干位。在無乘除運算指令的計算機中,可用來代替實現簡單的乘法和除法運算。(4)字符串處理(5)輸入輸出(6)程序控制(7)其他程序控制指令也稱轉移指令,它可用來實現程序執行順序的調整控制。按轉移的性質,可分為無條件轉移、條件轉移、過程調用與返回、陷阱(trap)等幾種。①、無條件轉移和條件轉移無條件轉移不受任何條件的約束,可直接把程序轉移到下一條需執行的指令處。可用jump表示無條件轉移指令,通常在該指令中給出轉移的目的地址。條件轉移是根據當前指令的執行結果,來決定是否需轉移。若條件滿足,則轉移;若條件不滿足,則繼續按順序執行。可用branch表示條件轉移指令。②、調用指令與返回指令調用指令(call)一般與返回指令(return)配合使用,call用于從當前的程序位置轉至子程序的入口;return用于子程序執行完后重新返回到原程序調用指令后,繼續執行原程序。call指令與jump和branch指令的主要差別就是需要保留返回地址,也就是說當執行完被調用的子程序后要回到原調用程序處,繼續執行call指令的下一條指令。③、陷阱與陷阱指令陷阱實際上是一種意外事故中斷,它可能是電源電壓不穩、存儲器檢驗出錯、輸入輸出設備出現故障等引起的。計算機的陷阱指令一般不直接提供給用戶使用,而是作為隱含指令由CPU自動產生并執行的。5.2.4Pentium機器數據類型和操作類型1、Pentium機的數據類型Pentium機器能處理8位(字節),16位(字),32位(雙字)和64位(四字)各種長度的數據類型。為允許最大的數據結構靈活性和最有效地使用存儲器,字不需要在偶數地址上對齊,雙字也不需要在4倍整數地址上對齊,,四字也不需要在8倍整數地址上對齊。當經由32位總線存取數據時,數據傳送是以雙字為單位進行的,雙字的起始地址是能被4整除的。處理器要將對于未對齊數據的請求,轉換成一系列的總線傳送請求。像所有的80x86機器一樣,Pentium也采用小數在先風格,即最低有效字節存于最低地址中。字節、字、雙字、四字稱為通常數據類型。另外,Pentium還支持一系列的特殊數據類型,可被具體指令所承認和操作。表5-2總結了所有這些數據類型。表5-2Pentium機器數據類型數據類型說明常規字節、字(16位)、雙字和四字,可位于任意存儲位置上整數字節、字或雙字的有符號二進制值,使用2的補碼表示序數字節、字或雙字中的無符號整數未壓縮的BCD碼范圍0~9的BCD數字表示,每字節一個數字壓縮的BCD碼每字節表示兩個BCD數字近指針表示段內偏移的32位有效地址。用于不分段存儲器中的所有指針和分段存儲器中的段內訪問位串一個連續的位序列,每位位置都認為是一個獨立的單位。能以任何字節的任何位位置開始一個位串字符串一個連續的字節、字或雙字的序列,浮點數符合IEEE754標準的浮點數2、Pentium機的操作類型Pentium機器提供了一系列復雜操作類型,包括幾種特殊的指令。打算為編譯程序編寫人員提供一種強有力的工具,以將高級語言程序轉換成優化的機器語言程序。表5-3列出了這些類型并給予簡要說明(詳見教材)。5.3指令的尋址方式5.3.1指令尋址5.3.2數據尋址所謂尋址方式指的是確定本條指令的數據地址及下一條要執行的指令的地址的方法,它與計算機硬件結構緊密相關,而且對指令格式和功能有很大影響。從程序員角度來看,尋址方式與匯編程序設計的關系極為密切,與高級語言的編譯程序設計也同樣密切。在此,對尋址方式分為指令尋址和數據尋址兩大類進行討論。5.3.1指令尋址指令尋址比較簡單,它又可分為順序尋址和跳躍尋址兩種。順序尋址可通過程序計數器PC加1,自動形成下一條指令的地址;跳躍尋址要通過轉移類指令來實現。圖5-5表示了指令尋址過程。圖5-5指令尋址方式示意圖如果程序的首地址為0,只要先將0送至程序計數器PC中,啟動機器執行程序后,程序便按0、1、2、……順序執行。其中第1、2、3號指令地址均由PC自動加1形成。因第3號地址處指令為無條件轉移,故執行完后將目的地址7送入PC中,此刻機器跳過4、5、6三條指令,直接執行第7條指令,接著又順序執行第8條、第9條指令等。5.3.2數據尋址數據尋址的方式較多,通常把指令的地址碼字段稱為形式地址,記為A,因為它往往并不是操作數的真實地址;而將操作數的真實地址稱為有效地址,記為EA。對于不同的尋址方式,由A得到EA的方法不同。若用(A)表示地址A中的內容,則(EA)即表示了實際的操作數。通常機器的指令系統中不只采用一種尋址方式,為了表明指令中所采用的尋址方式,一種方法是把尋址方式和操作碼字段結合起來,即由操作碼決定了這種操作必須采用某一種尋址方式;另一種方法是把指令格式中的一位或幾位作尋址方式字段,用編碼來指明具體的尋址方式。而對于EA來說,在有些機器中作為主存儲器的物理地址,而在有些機器中也并不是表示主存儲器的物理地址,可能是一個邏輯地址。如8086對存儲器進行了分段,按尋址方式計算出的有效地址EA只是段內的偏移地址。(1)立即尋址尋址方式中最簡單的就是立即尋址。它的特點是操作數本身設在指令字中,即地址字段部分不是地址而是操作數本身。這個操作數又稱為立即數,通常用補碼形式存放。如圖5-6所示。圖5-6立即尋址示意圖這種方式的優點在于只要取出指令就可以得到操作數,在執行階段不需要再訪問存儲器。但地址字段的位數限制了所表示的立即數(imm)的范圍。(2)直接尋址直接尋址是非常直觀的一種尋址方式,它的特點是指令字中的形式地址A就是操作數的真實地址EA,即:EA=A。直接尋址的示意圖如圖5-7所示。圖5-7直接尋址示意圖直接尋址在早期的計算機中使用是非常普遍的,即指令字的地址字段直接給出操作數在主存中的物理地址,尋找操作數比較簡單,不需要專門的計算操作數的地址,在指令的執行階段對主存只訪問一次。但它的地址字段的位數限制了指令的尋址范圍。(3)寄存器尋址計算機的中央處理器一般都設置有一定數量的通用寄存器,用以存放操作數、操作數的地址或中間結果。假如指令地址碼部分給出某一通用寄存器地址,而且所需要的操作數就在這一寄存器中,則稱為寄存器尋址。通用寄存器的數量一般在幾個到幾十個之間,比存儲單元少很多,因此地址碼短。而且從寄存器中存取數據要比從存儲器中存取快得多,所以這種方式可以縮短指令長度、節省存儲空間,提高指令的執行速度,在計算機中得到了廣泛應用。圖5-8寄存器尋址(4)間接尋址在尋址時,有時根據指令的地址碼所找到的單元中的內容既不是操作數,也不是下一條要執行的指令,而是操作數的有效地址或指令的有效地址,這種尋址方式稱為間接尋址,簡稱間址。根據地址碼指的是寄存器地址還是存儲器地址,間接尋址又可分為寄存器間接尋址和存儲器間接尋址兩種方式。它們地址間的關系為:EA=(R)或EA=(A)。如圖5-9表示了寄存器間接尋址和存儲器間接尋址的過程。圖5-9間接尋址過程間接尋址有一次間址和多次間址兩種情況,大多數計算機只允許一次間址。對于存儲器一次間址情況,需訪問兩次存儲器才能取得數據,第一次從存儲器讀出操作數有效地址,第二次讀出操作數。(5)隱含尋址這種類型的指令,不是明顯地給出操作數的地址,而是在指令中隱含著操作數的地址。圖5-10表示了隱含尋址過程。由于隱含尋址在指令字中少了一個地址,因此,這種尋址方式有利于縮短指令字長。圖5-10隱含尋址過程(6)基址尋址基址尋址需設有基址寄存器BR,其操作數的有效地址EA等于指令字中的形式地址與基址寄存器中的內容之和。即:EA=A+(BR)。在這種情況下,地址碼A通常被稱為位移量disp。基址寄存器可采用隱式和顯式兩種。隱式的是指在計算機中專門設有一個基址寄存器BR,使用時用戶不用明顯指出該寄存器,只需要由指令的尋址特征位反映出為基址尋址即可。顯式是指計算機中沒有專門的基址寄存器,要在指令中由用戶明確指出用哪一個通用寄存器作為基址寄存器,存放基地址。圖5-11基址尋址示意圖基址寄存器主要用于為程序或數據分配存儲區,對多道程序或浮動程序很有用。用戶可不必考慮自己的程序存于主存的哪一空間區域,完全由操作系統或管理程序根據主存的使用情況,賦予基址寄存器一個初始值(即基地址),便可以實現從浮動程序的邏輯地址到存儲器的物理地址的轉換。另外,當存儲器的容量較大,由指令的地址碼部分直接給出的地址不能直接訪問到存儲器的所有單元時,通常把整個存儲空間分成若干個段,段的首地址存放于基址寄存器或段寄存器中,段內位移量由指令給出。存儲器的實際地址就等于基址寄存器的內容與段內位移量之和,這樣可通過修改基址寄存器的內容訪問存儲器的任一單元。由此可見,基址尋址主要用以解決程序在存儲器中的定位和擴大尋址空間等問題。通常基址寄存器的值只能由系統程序設定,由特權指令執行,而不能被一般用戶指令所修改,從而確保了系統的安全性。(7)變址尋址變址尋址與基址尋址極為相似。其有效地址EA等于指令字中的形式地址A與變址寄存器IX的內容相加之和,即EA=A+(IX)。圖5-12變址尋址示意圖變址尋址與基址尋址的有效地址的形成過程極為相似,但其應用場合有較大的區別。基址尋址主要用于為程序或數據分配存儲空間,故基址寄存器的內容通常由操作系統或管理程序確定,而指令字中的A是可變的。在變址尋址中,變址寄存器的內容是由用戶設定的,在程序執行過程中其值可變,而指令字中的A是不可變的。變址尋址主要用于處理數組問題,在數組處理過程中,可設定A為數組的首地址,不斷改變變址寄存器IX的內容,便可以很容易形成數組中任一數據的地址,特別適合編制循環程序。而有的機器的變址寄存器有自動增量和自動減量功能,每存取一個數據,根據數據長度(即所占的字節數)自動增量或自動減量,以便指向下一個單元,為存取下一數據作準備。(8)相對尋址把程序計數器PC的內容(即當前指令的地址)與指令的地址碼部分給出的位移量(disp)之和作為操作數的地址或轉移地址,稱為相對尋址。該尋址方式主要用于指令尋址,執行本條指令后,將轉移到(PC)+disp處執行下一條指令。圖5-13相對尋址示意圖相對尋址有兩個特點:第一,轉移地址不是固定的,它隨PC值的變化而變化,并且總是與PC相差一個固定值disp,因此無論程序裝入存儲器的任何地方,均能正確運行,對浮動程序很有用。第二,位移量disp可正可負,常用補碼表示,若位移量為8位,則指令的尋址范圍在(PC)+127~(PC)-128之間。(9)堆棧尋址堆棧(stack)是由若干個連續存儲單元組成的先進后出(FILO)存儲區,第一個送入堆棧的數據存放在棧底,最后送入堆棧的數據保存在棧頂。棧底是固定不變的,而棧頂卻是隨著數據的入棧和出棧在不斷變化。為了表示棧頂的位置,有一個寄存器或存儲器單元用于指出棧頂的地址,這個寄存器或存儲器單元就稱為堆棧指針(SP)。用于訪問堆棧的指令只有壓入(即進棧)和彈出(即出棧)兩種,它們實際上是特殊的數據傳送指令,壓入(PUSH)是把指定的操作數送入堆棧的棧頂,而彈出(POP)是把棧頂的數據取出,送到指令所指定的目的地。這兩種操作都要在棧頂進行,而棧頂位置由SP指定,所以它們的實質是寄存器間接尋址,但在指令的表示中,并不需要給出SP的地址。在一般的計算機中,堆棧從高地址向低地址擴展,即棧底的地址總是大于或等于棧頂的地址(也有少數計算機相反)。當執行入棧操作時,首先把堆棧指針(SP)減量(減量的多少取決于壓入數據的字節數),然后把數據送入SP所指定的單元;當執行出棧操作時,首先把SP所指單元的數據取出,然后根據數據的大小對SP增量。例如:設寄存器A的大小為兩個字節,則入棧操作:

PUSHA其操作是:(SP)-2→SP

(A)→(SP)出棧操作:

POPA其操作是:((SP))→A

(SP)+2→SP以上這些是比較基本的尋址方式,它們在計算機中也可組合使用,或許有些計算機還具有更復雜的尋址方式。假如用戶用高級語言編程,可根本不用考慮尋址方式,但若用匯編語言編程,則應對它有確切的了解,才能編寫出正確而又高效的程序。5.4CISC與RISC技術5.4.1指令系統的發展5.4.2RISC的特點5.4.1指令系統的發展早期計算機硬件結構比較簡單,所支持的指令系統一般只有定點加減、邏輯運算、數據傳送等十幾至幾十條最基本的指令,而且尋址方式簡單。隨著集成電路的出現,硬件功能不斷增強,指令系統也越來越豐富,尋址方式也趨于多樣化。“軟件危機”的出現,使人們認為,縮小機器指令系統與高級語言語義的差距,為高級語言提供更多地支持,是緩解軟件危機有效和可行的辦法。計算機設計者們利用當時已經成熟的微程序技術和飛速發展的VLSI技術,增設多種復雜的、面向高級語言的指令,使指令系統越來越復雜化,由此出現了復雜指令系統計算機(ComplexInstructionSetComputer),簡稱CISC。CISC指令系統的主要特點是:指令格式多、尋址方式復雜、指令數量多、不同指令的使用頻率相差很懸殊。大量的統計數字表明,大約只有20%的指令使用頻率比較高,占用了80%的處理機時間。換句話說,占指令系統80%的復雜指令只在20%的處理機運行時間內被用到。由于CISC龐大的指令系統,不但使計算機的研制周期變長,正確性難以保證,不易調試和維護,而且由于采用了大量使用頻率低的復雜指令而造成硬件資源浪費。計算機設計者嘗試從另一條途徑來支持高級語言及適應VLSI技術的特點。1975年IBM公司的JohnCocke提出了精簡指令系統計算機(ReducedInstructionSetComputer,簡稱RISC)的設想。80年代后期以來,RISC微處理器迅速發展,廣泛采用了超標量和超流水線等指令級并行處理技術。但是人們又發現RISC指令系統并不能充分實現指令級并行處理,從而影響了計算機性能的進一步提高,1983年美國教授J.Fisher受水平微指令思想的啟示,提出了超長指令字(VLIW)體系結構。總之,計算機指令系統的發展經歷了從簡單到復雜,又從復雜到簡單的演變過程。另外,從計算機的發展過程可以看到,構成計算機的基本硬件發展迅速,為了緩解新機器的推出與原有應用程序的繼續使用之間的矛盾,在60年代出現了系列計算機的思想。所謂系列計算機是指基本指令系統相同,基本體系結構相同的一系列計算機。通常新推出的機種在性能和價格上要比早推出的機種優越,但它們保持了指令系統、數據格式、I/O系統等方面是相同的。通常在研制該系列計算機的新型號或高檔產品時,保留原來的全部指令,以保持軟件向上兼容的特點,即低檔機或舊機型上的軟件不加修改即可在新機器上運行,保護了用戶在軟件上的投資。5.4.2RISC的特點自從JohnCocke提出精簡指令系統的想法后。美國加州伯克萊大學的RISCI和RISCII機、斯坦福大學的MIPS機相繼研制成功,為精簡指令系統計算機的誕生與發展起了很大作用。1983年以來,開始出現商品化的RISC機,如1987年SUN微系統公司用SPARC芯片構成工作站,從而使其工作站的銷售量居于世界首位。當前一些大公司也都將其部分力量轉到RISC方面來,RISC已經成為當前計算機發展的不可逆轉的趨勢。我國自主開發的“龍芯”系列微處理器,基于MIPS架構,也屬于RISC機器。而一些傳統大公司轉向RISC是很不容易的,因為要考慮到與原有機器的軟件兼容,但盡管如此,在他們新機器的設計中仍采用了不少RISC思想。精簡指令系統計算機的著眼點不是簡單地放在簡化指令系統上,而是通過簡化指令系統使計算機的結構更加簡單合理,從而提高運算速度。計算機執行程序所需的時間P可用下式表述:

P=I×C×T表5-4RISC與CISC的I、C、T比較ICTRISC1.2~1.41.3~1.7<1CISC14~101表5-4列出了第二代RISC機與CISC機的I、C、T統計。由于RISC指令比較簡單,用這些簡單指令編制出的子程序來代替CISC機中比較復雜的指令,因此RISC中的I比CISC多20%~40%。但RISC的大多數指令僅用一個機器周期完成,C值比CISC小得多。而且RISC的硬件結構比較規整簡單,完成一個操作所經過的數據通路比較短,使T值也大大下降。因此總體來看,RISC的性能要優于CISC。通過對RISC各種產品的分析,可歸納出RISC應具有如下一些特點。(1)優先選取使用頻率最高的一些簡單指令,以及一些很有用但不復雜的指令。避免復雜指令,讓復雜指令的功能由簡單指令的組合來實現。(2)指令長度固定,指令格式種類少,尋址方式種類少。指令之間各字段的劃分比較一致,各字段的功能也比較規整。(3)CPU中通用寄存器的數量比較多,只用取數/存數指令訪問存儲器,其余指令的操作都在寄存器內完成。(4)采用流水線結構,大部分指令在一個時鐘周期內完成。(5)控制器采用硬布線邏輯控制,不用微程序控制。(6)重視高級語言的優化編譯工作,以減少程序執行時間。5.5指令格式舉例5.5.1設計指令格式應考慮的因素5.5.2指令格式舉例5.5.1設計指令格式應考慮的因素計算機的指令格式與機器的字長、存儲器的容量及指令的功能都有很大的關系。從便于程序設計,增加基本操作并行性,提高指令功能的角度來看,指令中所包含的信息以多為宜;但在有些指令中,其中一部分信息可能無用,這將浪費指令所占的存儲空間,從而增加了訪存次數,也許反而會影響速度。因此,如何合理、科學地設計指令格式,使指令既能給出足夠的信息,其長度又盡可能地與機器的字長相匹配,以便節省存儲空間,縮短取指時間,提高機器的性能仍然是指令格式設計中的一個重要問題。指令格式在設計時可從以下幾個方面考慮。(1)指令長度:指令格式設計的最基本出發點就是指令格式的長度,指令格式的長度將影響到存儲器的大小、存儲器的組織、總線的結構、CPU的復雜度以及CPU的速度。同時指令格式的長度還決定著匯編語言編程人員所能支配機器的存儲空間和靈活度。指令格式長度的最基本的考慮是如何在強有力的指令清單和節省指令存儲空間之間進行衡量。從編程人員的角度來看,更多的操作碼、更多的操作數和更多的尋址方式以及更大的尋址空間是他們希望的目標。他們可以以較短的程序完成既定的任務,而且處理某些操作和功能有更大的靈活度。但是指令長度過長是一種浪費,因為一個32位長度的指令需要占用兩個16位長度指令的空間,而功能很可能不是一個16位指令的兩倍。除此之外,指令長度還應該是一些其他參數的整數倍,否則的話將會在讀總線操作周期得不到整齊數目的指令。(2)位的分配:在確定指令格式長度之后,一個指令設計的重要因素就是如何分配指令字中的位段。對于一個指定的指令長度,需要考慮如何在操作碼數目和尋址能力之間進行權衡。操作碼越多意味著操作碼字段的位數越多,這樣就減少了地址字段的位數。一種折中考慮的方法是變長操作碼。但這種方法只適用于較少操作數和較弱的尋址方式的指令。對于指令中尋址位的分配,需要考慮以下因素。①、操作數的數目和類型:操作數的數目無疑將影響地址段的位數,操作數越多,可能需要的地址位數越多,現代機器的典型指令都是提供兩個操作數。而且不同的操作數類型占用的位數不一樣,可能會影響到占用的地址位數。②、尋址方式:尋址方式可以是隱含指定的,例如操作數地址隱含在寄存器或者程序計數器中,除此之外,尋址方式大都是顯式指定的,顯式指定需要一位或多位尋址特征位。③、寄存器個數:大多數機器內都有一組通用的寄存器,這些寄存器可以用來保存數據,也可以用來保存地址。隨著技術的發展,一些系統內朝著兩個或者多個專用寄存器組的方向發展,例如單片微處理器和超級計算機。這種技術的優點是對于固定數目的寄存器,功能上的分開使得指令中只需要較少的位數,而操作碼隱式的指定用哪一組寄存器作尋址對象。④、地址范圍:可以尋址存儲器的地址空間與指令的地址位數有關。由于指令的位數嚴重影響了尋址的空間,所以很少使用直接尋址。5.5.2指令格式舉例1、SPARC的指令系統SPARC的指令字長32位,有3種指令格式、6種指令類型。6種指令類型為:(1)算術運算/邏輯運算/移位指令31條SPARC有多條加法和減法指令,沒有乘法和除法指令,但設置了一條乘法步指令,執行一次“加和移位”操作。加法指令有4條(ADD、ADDCC、ADDX、ADDXCC),其中CC結尾的表示除了進行加法運算以外還要根據運算結果置狀態標記N、Z、V、C;X結尾表示同時要加進位信號;XCC表示加進位信號并置N、Z、V、C。(2)LOAD/STORE指令22條取/存字節、半字、字、雙字共20條指令,其中一半是特權指令。SPARC結構將存儲器分成若干區,其中有4個區分別為用戶程序區、用戶數據區、系統程序區和系統數據區。并規定在執行用戶程序時,只能從用戶程序區取指令,在用戶數據區存取數據;而執行系統程序時則可使用特權指令訪問任一區。(3)控制轉移類指令5條(4)讀/寫專用寄存器指令8條(5)浮點運算指令(6)協處理器指令3種指令格式為:格式1:CALL指令格式2:SETHI指令和Branch指令格式3:其他指令其中OP,OP2,OP3為指令操作碼,OPf為浮點指令操作碼。實際上整數部件IU大部分指令碼固定在第31,30位(OP)和第24~19位(OP3)。為了增加立即數長度和位移量長度,總共有3條指令將指令碼縮短了,其中CALL為調用指令,Branch為轉移類指令,SETHI指令的功能是將22位立即數左移10位,送入rd所指示的寄存器中,然后再執行一條加法指令補充上后面10位數據,這樣可生成32位字長的數據。rs1,rs2為通用寄存器地址,一般用作源操作數寄存器地址。rd為目的寄存器地址,此寄存器通常用來保存運算結果或從存儲器中取來的數據。惟有執行STORE指令時,rd中保存的是源操作數,并將此操作數送往存儲器的指定地址中。Simm13是13位擴展符號的立即數,在對它進行運算時,假如它的最高位為1,那么在最高位前面的所有位都擴展為1;假如它的最高位為0,那么在最高位前面的所有位都擴展為0。i用來選擇第二個操作數,假如i=0,第二操作數在rs2中;假如i=1,Simm13為第二操作數。(1)算術邏輯運算指令功能:(rs1)OP(rs2)→rd(當i=0時)(rs1)OPSimm13→rd(當i=1時)本指令將rs1,rs2的內容(或Simm13)按操作碼所規定的操作進行運算后將結果送rd。RISC的特點之一是所有參與算術邏輯運算的數均在寄存器中。(2)LOAD/STORE指令LOAD指令將存儲器中的數據送rd中STORE指令將rd的內容送存儲器中存儲器地址的計算(寄存器間址尋址方式):當i=0時,存儲器地址=(rs1)+(rs2);當i=1時,存儲器地址=(rs1)+Simm13。(3)控制轉移類指令①、條件轉移(Branch):根據指令中的cond字段(條件碼)決定程序是否轉移。轉移地址由相對尋址方式形成。②、轉移并連接(JMPL):采用寄存器間址方式形成轉移地址,并將本條指令的地址(即PC值)保存在以rd為地址的寄存器中,以備程序返回時使用。③、調用(CALL):采用相對尋址方式形成轉移地址。為了擴大尋址范圍,本條指令的操作碼只取兩位,位移量有30位。④、陷阱(trap):采用寄存器間址方式形成轉移地址。⑤、從trap程序返回(RETT):采用寄存器間址方式形成返回地址。在SPARC中,有一些指令沒有設置,但很容易用一條其他指令來替代,這是因為SPARC約定R0的內容恒為0,而且立即數可以作為一個操作數處理,表5-5中列出的一些指令就屬于這種情況。表5-5某些指令的實現指令功能替代指令實現方法MOVE寄存器間傳送數據ADD(加法)(Rs)+(R0)→RdINC寄存器內容+1ADD(加法)(Rs)+1→Rd(立即數imm13=1,作為操作數)DEC寄存器內容-1SUB(減法)(Rs)-1→Rd(立即數imm13=-1,作為操作數)NEG取負數SUB(減法)R0-Rs→RdNOT取反碼XOR(異或)(Rs)XOR11…1→Rd(立即數imm13=-1,作為操作數)CLEAR清除寄存器ADD(加法)(R0)+(R0)→RdCMP,TEST比較測試SUB(減法)(Rs1)-(Rs2)→R0(將R0作為Rd,并置條件碼)2、Pentium微處理器指令格式Pentium機器的指令長度變化很大(1字節~10余字節),還可以帶前綴,其指令格式如圖5-14所示。這種非固定長度的指令格式是典型的CISC結構特征。之所以如此,一是為了與它的前身80486保持兼容,二是希望能給編譯程序設計者更多靈活的編程支持。圖5-14Pentium機器的指令格式指令格式中包括以下字段:(1)OP(操作碼)每條指令都有操作碼,某些指令在操作碼中還包含有操作數長度W(8位,16位或32位)或立即數是否需擴充符號位(S)等信息。(2)MOD/RMMOD/RM字節指出操作數在寄存器中還是在存儲器中。該字節分成3個字段:Mod字段(2位)與R/M字段(3位)可以產生32個編碼,分別表示8個寄存器和24種變址方法;Reg/op字段(3位)可以是寄存器號,或者作為3位附加的操作碼;R/M字段(3位)可以是一個操作數所在的寄存器或者與Mod字段一起指出尋址方式。(3)SIB當MOD/RM為某些值時,需要SIB參與決定尋址方式。SIB字節分成3個字段;SS字段(2位,4種編碼情況)指出變址寄存器的放大因子(1倍、2倍、4倍、8倍);Index字段(3位)指出變址寄存器;Base字段(3位)

溫馨提示

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

評論

0/150

提交評論