第4章 指令系統
4.1 知識要點掃描
4.1.1指令各式 圖2-4-1 指令基本格式
1.指令的基本格式
一條指令就是機器語言的一個語句,它是一組有意義的二進位代碼,指令的基本格式2-4-1所示。
其中作業碼指明了指令的操作性質及功能,地址碼則給出了運算元的地址。
地址碼中的地址可以是主存的地址,也可以是寄存器的地址(編號),甚至可以是I/O裝置的地址。
對於雙運算元運算指令來說,需要運算元的地址、結果的地址以及下一條指令的地址,這些地址可以在指令中明顯給出,稱為顯地址;也可以依照某種事先的約定,用隱含的地址給出,稱為隱地址。根據顯地址的個數有:三地址和二地址指令(通用寄存器指令)、一地址指令(累加型電腦)和零地址指令(堆棧型電腦)。
2.定長作業碼指令格式
定長作業碼以稱為規整型編碼,這是一種最簡單的編碼方法,作業碼欄位的位元和位置是固定的。為了能表示整個系統中的全部指令,指令的作業碼欄位應當有足夠的位元。
假定指令系統共有m條指令,指令作業碼欄位的位元為N位,則應有如下關係式
所以。
定長編對於簡化硬體設計,減少指令的解碼時間是非常有利的。
3.擴充作業碼指令格式
擴充作業碼以稱為非規整編碼,作業碼欄位的位元不固定,且分散地放在指令字的不同位置上。這種方式能夠有效地壓縮指令中作業碼欄位的平均長度,顯然,作業碼欄位的位元和位置不固定將增加指令解碼和分析的難度,使控制器的設計複雜化。
典型的擴充作業碼編碼讓運算元地址個數多的指令(三地址指令)的作業碼欄位短些,運算元地址個數少的指令(一或零地址指令)的作業碼欄位長些,這樣既能充分地利用指令的各個欄位,又能在不增加指令長度的情況下擴充作業碼的位元,使它能表示更多的指令以。
4.1.2 指令的定址方式
1.有效地址的概念
通常,把指令中地址碼欄位給出的地址稱為形式地址(用字母A表示),這個地址可不能直接用來訪問主存。形式地址經進某種運算而得到的能夠直接存取主存的地址稱為有效地址(用字母EA表示)。
2.資料定址和指令定址
定址可以分為資料定址和指令定址。尋找下一條將要執行的指令地址稱為指令定址,尋找運算元的定址稱為資料定址。指令定址比較簡單,又可以分為順序定址和跳躍定址。而資料定址方式種類較多,其最終目的都是尋找所需要的運算元。
順序定址可通過程式計數器加1,自動形成下一條指令的地址;跳躍建起則需要通過程式轉移類指令實現。
3.常見定址方式
(1)立即定址
立即定址是一種特殊的定址方式,指令中在作業碼欄位後面的部分不是通常意義上的運算元地址,而是運算元本身。
(2)寄存器定址
寄存器定址指令的地址碼部分給出某一個通用寄存器的編號Ri,這個指定的寄存器中存放著運算元。有效地址EA=Ri。這種方式可以縮短指令長度,提高指令的執行速度。
(3)直接定址
指令中地址碼欄位給出的地址A就是運算元的有效地址,即形式地址等於有效地址:EA=A。由於這樣給出的運算元地址是不能修改的,與程式本所在的位置無關,所以又叫絕對定址方式。
(4)間接定址
間接定址意味著指令中給定的地址A不是運算元的地址,而是存放運算元地址的主存單元的地址,簡稱為運算元地址的地址,即EA=(A)。間接定址的指令在執行階段要多次訪存,可擴大定址範圍,便於編製程式。
(5)寄存器間接定址
寄存器間接定址指令中的地址碼給出某一通用寄存器的編號,在被指定的寄存器中存放運算元的有效地址,EA=(Ri),而運算元則存放在主存單元中。這種定址方式的指令較短,並且在取指後只需一次訪存便可得到運算元,因此指令執行的速度較間接定址方式快。
(6)變址定址
變址定址就是把變址寄存器Rx的內容與指令中給出的形式地址A相加,形成運算元有效地址,即EA=(Rx)+A。Rx的內容稱為變址值。
(7)基址定址
基址定址是將基底位址暫存器Rb的內容與指令中給出的位移量D相加,形成運算元有效地址,即EA=(Rb)+D。Rb的內容稱為基址值。
(8)相對定址
相對定址是基址定址的一種變通,由程式計數器(PC)提供基準地址,指令中的地址碼欄位作為位移量D,兩者相加後得到運算元的有效地址,即EA=(PC)+D。位移量指出的是運算元和現行指令之間的相對位置。
(9)頁面定址
儲存空間的有效地址就被分為兩部分:前部分為頁面地址,後部為頁內地址。頁內地址是由指令的地址碼自動直接提供,它與頁面地址通過簡單的拼裝串連就可得到有效地址,無須進行計算,因此定址迅速。根據頁面地址的來源不同,頁面定址以可分為三種不同的方式。
①基頁定址,又稱為零頁定址。由於頁面的地址全等於0,所以有效地址EA=0//A。基頁定址實際就是直接定址。
②當前頁定址。頁面地址就等於程式計數器(PC)的高位部分的內容,所以有效地址EA=(PC)H//A,運算元S與指令本身處於同一頁面中。
③頁寄存器地址。頁面地址取自頁寄存器,與形式地址相拼接形成有效地址。
(10)堆棧定址
堆棧是一種按特定順序進行存取的儲存區,這種特定的順序可歸結為“後進先出(LIFO)”或“先進後出(FILO)”。
寄存器堆棧由 一組專門的寄存器構成,又稱為硬堆棧。這種堆棧的棧頂是固定的,寄存器組中各寄存器是互相串連的,它們之間具有對應位自動推移的功能,即可將一個寄存器的內容推移到相鄰的另一個寄存器中去。
利用主存的一段地區構成的堆棧稱為軟堆棧,軟堆棧的大小可變,棧底固定,棧頂浮動,故需要一個專門的硬體寄存器作為堆棧的棧頂,簡稱堆棧指標(SP)。
若軟堆棧的棧底地址大於棧頂地址,且棧指標始終指向棧頂的滿單元,則進棧時的操作:
(SP)-1→SP 修改棧指標
(A)→(A) 將A中的內容壓入棧頂單元
出棧時操作:
((SP))→A 將棧頂單元的內容彈出送入A中
(SP)+1→SP 修改棧指標
上述10種定址方式是電腦常用的基本定址方式,可以單獨使用,也可以把它們中的某幾種組合在一起,如變址後再間接定址、變址加基址定址等,但並不是每一種電腦都使用所有的定址方式。
4.1.3
CISC和RISC的基本概念
指令系統的發展有兩種截然不同的方向,一種是增強原有指令的功能,設定更為複雜的新指令實現軟體功能的硬化;另一種是減少指令各類和簡化指令功能,提高指令的執行速度。前者稱為複雜指令系統,後者稱為精簡指令系統。
基於複雜指令系統設計的電腦稱為複雜指令系統電腦(CISC),基於精簡指令系統設計的電腦稱為精簡指令系統電腦(RISC)。
RISC的中心思想是要求指令系統簡化,盡量寄存器-寄存器操作指令,除去訪存指令(Load和Store)外,其他指令的操作均在單周期內完成,指令格式力求一致,定址方式儘可能減少,並提高編譯的效率,最終達到加快機器處理速度的目的。表2-4-1所示為CISC和RISC的區別。
表2-4-1 CISC和RISC的區別
|
CISC |
RISC |
指令系統 |
複雜,龐大 |
簡單,精簡 |
指令數目 |
一般大於200條 |
一般小於100條 |
指令字長 |
不固定 |
等長 |
定址方式 |
一般大於4 |
一般小於4 |
可訪存指令 |
不加限制 |
只有LOAD/STORE指令 |
各種指令執行時間 |
相差較大 |
絕大多數在一個周期內完成 |
通用寄存器數量 |
較少 |
多 |
控制方式 |
絕大多數為微程式控制 |
絕大多數為硬布線控制 |