《計算機系統》-第八章_第1頁
《計算機系統》-第八章_第2頁
《計算機系統》-第八章_第3頁
《計算機系統》-第八章_第4頁
《計算機系統》-第八章_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

8.1 指

在計算機硬件系統的設計過程中,首先要設計指令系統,然后硬件工程師根據設計好的指令系統完成硬件CPU等功能設計,最后實施硬件電路。軟件工程師根據指令系統編制出系統軟件和應用程序。一臺計算機的指令系統設計得好壞與否,直接關系到計算機硬件系統的結構好壞,并影響到計算機延續(xù)產品的開發(fā)深度。本章介紹指令系統設計過程中涉及的主要內容。計算機指令是計算機硬件能夠識別并直接執(zhí)行的操作命令,又稱為機器指令。一條指令應包括兩方面信息:操作碼信息和地址碼信息。指令格式為:下一頁返回8.1 指

式它是按照一定格式編制的二進制代碼,所以機器指令由二進制代碼表示。操作碼OP指明該指令操作的性質及功能,如是“+”加法操作還是“÷”除法操作等。地址碼也稱操作數地址,指明被操作的數據來自什么地方,以及操作后的結果存到哪里去,如“+”加法操作的加數與被加數分別來自寄存器和主存,結果存到主存。對于地址碼AD,歷史上出現過四地址指令、三地址指令、二地址指令和一地址指令系統,目前采用的是二地址指令系統。四地址指令除指明兩個操作數地址外,還要指明操作結果存放的地址以及下條機器指令在內存中的位置,由于指令長度過長已不采用。三地址指令提供兩個操作數地址,還要指明結果存放的地址,由于指令長度也較長,沒有廣泛采用。二地址指令的格式為:上一頁下一頁返回8.1 指

式以上為二地址指令系統最常用的形式。指令意義:(A1)OP(A2)→A2,即把以A1、A2為地址的兩個操作數進行OP所指定的操作,操作結果存入A2

中替代原來的操作數A2

的內容,A2

地址中原有的內容被破壞。常稱A1

為源操作數地址,A2

為目的操作數地址。一地址指令系統只給出一個操作數地址A,另一個地址隱含給出,由一個事先約定的寄存器提供目的操作數,運算結果也將存放于該寄存器中,稱該寄存器為累加器(AC)。一地址指令系統的指令長度短,占內存少,常用于8位機中。目前奔騰臺式機CPU采用的是二地址指令系統,AMD生產的CPU也采用二地址指令系統。上一頁下一頁返回8.1 指

式8.1.1

指令字長指令字長度=操作碼長度+地址碼長度(源操作數地址長度和目的操作數地址長度)。指令長度通常設計為字節(jié)(8位二進制)的整數倍。指令長度長,占存儲空間就多,讀取指令時間也就增加;指令長度短,情況相反。一臺計算機的指令系統中,指令長度通常不固定,從一個字節(jié)到十幾個字節(jié)不等,多數指令為短指令,少數復雜指令為長指令。固定長度的指令現在很少采用。上一頁下一頁返回8.1 指

式例8-1DEC公司的PDP-11是16位小型機中的重要代表。它的基本指令字長為16位,占主存兩個字節(jié),但有些指令之后緊跟一個16位的地址或立即數,或緊跟兩個16位地址或立即數,指令長度變?yōu)?2位或48位。其格式如下:上一頁下一頁返回8.1 指

式例8-2 Intel8086是曾經廣泛使用的微處理器。它采取1~6個字節(jié)的變長指令格式。第一個字節(jié)是操作碼,表明該指令的操作功能;第二個字節(jié)給出尋址方式與寄存器號;其后可跟兩個字節(jié)的位移量或立即數,或再跟兩個字節(jié)的立即數。其格式如下:Intel80386/80486允許指令最長達15個字節(jié)。上一頁返回下一頁8.1 指

式8.1.2 操作碼格式操作碼指定機器執(zhí)行什么樣的操作(如加法、傳送等),操作碼位數越多,它所能表示的操作種類也就越多。常見的操作碼格式有以下兩種編碼方式。1.操作碼定長,地址碼變長操作碼的長度固定,占指令最前面幾位,稱作操作碼字段。此類指令根據操作碼是單操作數運算還是雙操作數運算,來決定地址碼字段為一個、兩個或更多,這樣指令就稱為變長指令,但操作碼長度固定。例如,“ADD”加指令至少需要兩個地址提供“加數”與“被加數”(假設數據全在內存中),地址信息多,因此指令長。例如,“INC”加1指令只需一個地址信息,指令就短。下一頁返回上一頁8.1 指

式這種方式的操作碼字段規(guī)整,有利于簡化操作碼譯碼器的設計,廣泛用于指令字長較長的大、中型及超級小型機中。例如當年的IBM370大型機指令系統,操作碼固定在指令最高8位,早前的Intel8086也是高8位為操作碼。下一頁返回上一頁8.1 指

式2.操作碼變長,指令碼定長此種方式的操作碼長度不固定,但指令碼的長度固定。這種設計當操作碼變長時,地址碼就縮短(地址個數變少),但指令字總長不變。設某機器的指令長度為16位,包括基本操作碼4位和3個地址字段,每個地址字段長4位,其格式為:上一頁下一頁返回8.1 指

式4位基本操作碼有16種組合,如全部用于表示三地址指令,則只能有16條。但是,如將三地址指令只設計為15條(0000~1110),則剩下的1111編碼用作擴展標志(指示AD14位不代表地址,此時代表操作碼),這樣將第11~8位擴展為操作碼,AD2與AD3仍表示地址,此時指令變?yōu)榱硕刂分噶睢T跀U展的4位操作碼中取14種組合表示二地址指令,即11110000~11111101(“1111”擴展標志,第11~8位的0000~1101為14種新的操作碼),還留下兩種組合沒有用(“11111110”和“11111111”),可繼續(xù)作為擴展標志。上一頁下一頁返回8.1 指

式對于單地址指令,地址段只留下AD34位,可將第7~4(AD2)位擴展為操作碼。現在只取“11111110”和“11111111”兩個擴展標志與第7~4位(AD2)組成的32種組合中的28種表示單地址指令,即111111100000~111111101111(16種)和111111110000~111111111011(12種)。留下4種組合111111111100、111111111101、111111111110和111111111111作為進一步擴展操作碼標志??衫^續(xù)擴展零地址指令。以上擴展方法如圖8-1所示。上一頁下一頁返回8.1 指

式在計算機中,可采取不同的做法。例如DEC公司的PDP-11機器指令字長為16位,高4位作為基本操作碼,但取其中的4種組合0000、0111、1000、1111作為擴展操作碼標志,可將操作碼分別擴展為7位、8位、10位、12位、13位、16位等,使其16位指令的操作可達幾百種。操作碼擴展技術是一種重要的指令優(yōu)化技術,它可以縮短指令的平均長度,并且增加指令字表示的操作信息。這種方式多用于微、小型機。上一頁下一頁返回8.1 指

式8.1.3 指令助記符

計算機指令的操作碼及地址碼在計算機中用二進制數據表示。這種表示方式很難被閱讀理解,也不便于程序員編寫程序,因此人們通常用一些比較容易記憶的文字符號來表示指令中的各種信息,即操作碼和操作數地址,這些符號稱為助記符。比如用ADD表示加法,用SUB表示減法,用MOV表示數據傳送等。在地址碼中常用R表示寄存器,用A表示存儲單元。例如“ADDR1,A”指令的含義為作加法操作,第一操作數(源操作數)在1號寄存器中,第二操作數(目的操作數)在存儲器A單元中(A為十六進制數)。計算機中所有指令的助記符的集合以及使用規(guī)則構成了匯編語言。用匯編語言編寫的程序可以比較簡單地轉換成機器指令代碼,這種轉換由匯編程序完成。匯編語言是面向計算機硬件的語言,通過它可以了解計算機的硬件結構。上一頁返回8.2 尋

式如何尋找指令以及指令中的數據稱為尋址方式。尋址方式規(guī)定了如何對地址字段作出解釋,以找到操作數。尋址方式通常是指指令中的地址尋址方式。一個指令系統具有哪幾種尋址方式,地址以什么方式給出,如何為編程提供方便與靈活性,這不僅是設計指令系統的關鍵,也是整機設計的開始階段。8.2.1 指令尋址方式程序是由一條條指令構成的,它連續(xù)存放在內存中,當執(zhí)行完一條指令后,下一條指令去哪尋找,稱為指令尋址。指令尋址方式在現代機中很簡單,由一個程序計數器(PC)提供下一條指令地址。這個程序計數器每次從內存中取出指令后(把指令放在指令寄存器里)自動加1,準備好下一條指令的內存地址;重復此動作,就可連續(xù)執(zhí)行指令。當遇到轉移情況時,只要把轉移地址放入PC中,就可按照新地址開始執(zhí)行。下一頁返回8.2 尋

式8.2.2 數據的尋址方式1.立即數尋址立即尋址是指操作數直接在指令中給出,如圖8-2所示。操作數占據一個地址碼部分,在取出指令的同時也取出了操作數,所以稱為立即尋址。這種方式不需要根據地址尋找操作數,所以其指令的執(zhí)行速度較快。因操作數是指令的一部分,運行時不能修改,它適用于提供常數,設定初始值。匯編語言中立即數通常直接用數字表示,有些計算機中在數字前還加上一個“#”號。例如,“#03”表示立即數3,其指令“ADD #03,R1”表示將R1寄存器內容加上3。上一頁下一頁返回8.2 尋

式2.直接尋址直接尋址是操作數的地址直接在指令中給出,如圖8-3所示。這種尋址方式簡單,不需作任何尋址計算。由于直接地址值是指令的一部分,不能修改,因此它只能用于訪問固定主存單元,或者外部設備接口中的寄存器。例如,“ADD 2000,R2”表示內存2000單元的內容與R2寄存器的內容相加,結果放入R2中,2000為直接地址。3.寄存器尋址寄存器尋址是操作數在指定的寄存器中,寄存器號在指令中給出,如圖8-4所示?!癆DD 2000,R2”指令中目的操作數由R2寄存器提供,即目的操作數在R2中。CPU中寄存器數量一般很少,從幾個到幾十個不等,因此指令中只需幾位二進制數就可指定所有寄存器號,從而縮短了整個指令的長度。在匯編語言中一般用R代表寄存器,R后面的數字代表第幾號寄存器。如R0、R3表示0號寄存器和3號寄存器。上一頁下一頁返回8.2 尋

式4.寄存器間接尋址寄存器間接尋址是操作數的地址在寄存器中,如圖8-5所示。指令中給出的是存放操作數地址的寄存器,寄存器中的內容為內存地址。寄存器的位數較長(一般為機器字長),足以訪問整個內存空間,這樣既有效地壓縮了指令長度,又解決了尋址空間太小的問題。在匯編語言中常在寄存器名外加上括號來代表寄存器間接尋址方式,如“(R1)”“(R4)”等。例如,“ADD(R1),(R3)”表示源操作數地址在R1中,目的操作數地址在R3中,兩個操作數分別從R3和R1指定的內存單元中讀出,相加后,結果再存回R3指定的內存單元中。上一頁下一頁返回8.2 尋

式5.間接尋址間接尋址是操作數的地址在主存儲器中,如圖8-6所示。指令中給出的既不是操作數,也不是操作數的地址,而是操作數地址的地址。間接尋址方式需要二次訪問存儲器才能找到操作數,這降低了指令執(zhí)行速度。在匯編語言中常在地址值外加上括號來代表間接尋址方式,如“(2050)”“(0080)”等。例如,“ADD(2000),R2”表示源操作數的地址在第2000號單元中,指令要從2000號單元中讀地址,再根據地址在內存中讀取源操作數,與R2內容相加,結果寫入R2中。上一頁下一頁返回8.2 尋

式6.相對尋址相對尋址是操作數的地址是程序計數器PC的值加上一個偏移量,這個偏移量在指令地址碼中給出,如圖8-7所示。這種尋址方式下訪問的操作數的地址是不固定的,而是相對于該指令的位置。指令中給出的偏移量可以是正值,也可以是負值,通常用補碼表示。在匯編語言中為表示相對尋址方式,一般在PC外加上括號和偏移量的值。如“100(PC)”“?200(PC)”等。例如,“ADD 100(PC),R1”表示源操作數在PC值加100的內存單元中,PC值由當前程序計數器給出,當前PC值本身也是內存地址(代碼段地址),“100(PC)”即表示操作數存放在距現行指令100個單元處。上一頁下一頁返回8.2 尋

式7.變址尋址變址尋址是操作數的地址是變址寄存器內容與形式地址(地址數值)相加得到內存地址,變址寄存器由指令給出,形式地址也由指令給出,如圖8-8所示。這種尋址方式適用于對一組數據進行訪問。當訪問一個數據元素之后,只要改變變址寄存器的值,該指令就可形成另一個數據元素的地址。在有的機器中指定某個寄存器為變址寄存器,大多數計算機中有多個寄存器可充當變址寄存器,如“300(R1)”“400(R3)”等。例如,“ADD R2,100(R1)”指令中,“100(R1)”就是變址尋址方式,此時R1寄存器充當變址寄存器,操作數地址等于R1的內容加上100。上一頁下一頁返回8.2 尋

式8.基址尋址基址尋址是操作數的地址為基址寄存器內容與形式地址(地址數值)相加得到內存地址。基址寄存器由指令給出,形式地址也由指令給出。這種尋址方式與變址尋址方式在計算上形式一樣,但在使用目的上不一樣。變址尋址方式用于數組元素操作;基址尋址方式用于程序定位和擴大尋址空間等

問題,它面向系統?;芳拇嫫髟谟嬎銠C中也是被指定的,不是所有寄存器都能當基址寄存器使用。例如8086指令中指定BX和BP兩個寄存器為基址寄存器。9.其他尋址除上述外,還有塊尋址和堆棧尋址等。塊尋址是對連續(xù)的數據塊進行尋址,對于連續(xù)存放的數據進行相同的操作。使用塊尋址能有效壓縮程序長度,加快程序的執(zhí)行。塊尋址必須指明塊的首址和塊長,或者指明塊的首址和末址。堆棧尋址是使用堆棧指令對堆棧進行操作,堆棧指令中的一個操作數地址是由堆棧指針SP隱含指定的。上一頁返回8.3 指

型指令少,則計算機的功能、速度等指標就弱,指令多,則代表CPU的硬件投入大,相應的指標就高。無論指令系統的規(guī)模如何,都應具備基本指令類型。常見指令類型包括:(1)數據傳送指令。將數據在主存與CPU寄存器之間進行傳輸,即將數據從一個地方傳送到另一個地方。匯編助記符有MOV或LD兩套常用符號,例如“MOVAX,BX”或“LDR1,(R2)”。(2)算術運算指令。對數據進行算術操作,包括加法ADD、減法SUB、乘法MULT、除法DIV、求反NOT、求補COM、算術移位SHA等。(3)邏輯運算指令。對數據進行邏輯操作,包括按位與AND、按位或OR、邏輯移位SHL和數據轉換等。下一頁返回8.4 CISC和RISC(4)程序控制指令。用來控制程序執(zhí)行的順序和方向,主要包括轉移指令、循環(huán)控制指令、子程序調用指令、返回指令、程序中斷指令等。(5)輸入/輸出指令。用于啟動外設、檢查測試外設的工作狀態(tài)、讀/寫外設的數據。有些計算機用專門的輸入/輸出操作指令,如IntelX86指令中的IN、OUT指令。有的計算機則沒有專門的外設操作指令,它們把外設控制器看作一個特殊的存儲器單元,因而用訪問存儲器的指令訪問外設。(6)其他類指令。包括堆棧操作指令、字符串處理指令、系統指令和特權指令。下一頁返回8.4 CISC和RISC根據指令系統設計風格的不同,計算機分為“復雜指令系統計算機(CISC)”和“精簡指令系統計算機(RISC)”。CISC結構是傳統計算機指令系統結構,至少包括百條以上指令,多則幾百條指令,造成指令條數多且指令長度長的原因有三方面:①隨著超大規(guī)模集成電路的發(fā)展,硬件可設計得更復雜,要求用硬件實現的功能也越多,這使指令種類不斷擴張,多種復合功能的指令也相應產生。②為了支持高級語言和操作系統,新的功能更復雜的指令和尋址方式不斷出現,以便將高級語言中的語句翻譯成較少的機器指令,以使編譯程序的設計變得簡單。③解決指令兼容問題,使各種軟件都可以不加修改地在新型號機器上運行,這就使得新增指令的操作碼不斷擴展,指令格式越來越復雜,指令也越變越長。這個問題目前已變成三個原因中的主要問題,并且影響指令執(zhí)行速度。上一頁下一頁返回8.4 CISC和RISC人們對程序在機器上的運行情況作大量分析后發(fā)現,機器所執(zhí)行的指令有80%以上是簡單指令,復雜指令只占很小比例。根據實際情況,人們提出用一套精簡的指令系統取代復雜指令系統,以簡化機器結構,提高機器的性能價格比。于是人們在20世紀70年代開始了RISC技術的研究,并研制成SPARC和MIPS系列的RISC結構處理器。這些RISC處理器通過簡化指令系統,簡化了計算機中的指令譯碼器和控制電路,使運算速度得到提高。RISC的主要技術內容如下:(1)簡化的指令系統。表現在指令條數較少,基本尋址方式少,指令格式少,指令字長度一致。指令總數大都不超過100條,尋址方式一般限制在2~3種,指令格式一般限制在2~3種,長度為32位。(2)以寄存器間的數據處理為主。只有LOAD(取數)和STORE(存數)兩條指令訪問內存。(3)CPU中采用大量的通用寄存器,一般不少于32個,多則幾百個。上一頁下一頁返回8.4 CISC和RISC(4)指令采用流水線工作方式。采用流水線技術可使每一時刻都有多條指令重疊執(zhí)行。盡管一條指令的執(zhí)行仍需要幾個周期時間,但從平均效應來看,每條指令的周期數大大減少,每條指令只需一個周期。只有LOAD和STORE兩條指令不采用流水線方式。(5)采用優(yōu)化編譯程序。用優(yōu)化編譯技術,力求能高效地支持高級語言,生成優(yōu)化的機器指令代碼。RISC和CISC兩種技術正在不斷融合,相互擷取對方的優(yōu)點補充自己。Pentium指令系統屬于CISC結構,但采用了許多RISC思想。上一頁返回8.5 PentiumⅡ指令格式PentiumⅡ指令格式相當復雜,而且沒有什么規(guī)律,它最多具有6個指令字段,如圖8-9所示。PentiumⅡ指令格式如此復雜的原因是其體系結

溫馨提示

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

評論

0/150

提交評論