5 计算机组成原理第四章 指令系统
文章目錄
- 1 指令格式
- 1.1 指令定義
- 1.2 指令格式
- 1.3 指令格式-地址碼
- 1.4 指令格式-操作碼
- 1.5 操作碼分類
- 1.6 操作類型
- 2 數據存放指令尋址
- 2.1 數據存放方式
- 2.2 指令尋址
- 2.3 操作數類型
- 2.4 數據尋址
- 2.4.1立即尋址
- 2.4.2 直接尋址
- 2.4.3 間接尋址
- 2.4.4 寄存器尋址
- 2.4.5 寄存器間接尋址
- 2.4.6 隱含尋址
- 2.5 數據尋址-2偏移尋址
- 2.5.1 基址尋址
- 2.5.2 變址尋址
- 2.5.3 相對尋址
- 2.5.4 相對尋址舉例
- 2.5.5 尋址方式小結
- 2.5.6 堆棧尋址
- 2.6 CISC和RISC
- 2.7 指令系統小結
1 指令格式
1.1 指令定義
指令(又稱機器指令):
是指示計算機執行某種操作的命令,是計算機運行的最小功能單位。
一臺計算機的所有指令的集合構成該機的指令系統,也稱為指令集。
注:一臺計算機只能執行自己指令系統中的指令,不能執行其他系統的指令。
1.2 指令格式
一條指令就是機器語言的一個語句,它是一組有意義的二進制代碼。
一條指令通常要包括操作碼字段和地址碼字段兩部分:
1.3 指令格式-地址碼
指令含義:(A1)OP(A2)→A3,A4=下一條將要執行指令的地址
設指令字長為32位,操作碼占8位,4個地址碼字段各占6位
設存儲字長為32位,即 4B
- Ai 可直接表示 26=64 個不同的位置
- 一條指令的執行(假設每個地址都是主存地址):
取指令訪存1次(假設指令字長=存儲字長)
取兩個操作數訪存2次
存回結果訪存1次
總計共訪存4次
設指令字長及存儲字長均為32位,操作碼占8位
指令含義:(A1)OP(A2)→A3,A4=下一條將要執行指令的地址
4個地址碼字段各占6位,指令操作數直接尋址范圍為 26=64;
完成一條指令需要訪存4次
指令含義:(A1)OP(A2)→A3
3個地址碼字段各占8位,指令操作數直接尋址范圍為 28=256;
完成一條指令需要訪存4次
指令含義:(A1)OP(A2)→A1
2個地址碼字段各占12位,指令操作數直接尋址范圍為 212=4K;
完成一條指令需要訪存4次
指令含義:
完成一條指令需要訪存2次
1個地址碼字段占24位,指令操作數直接尋址范圍為 224=16M
指令含義:
指令字結構
- 定長指令字結構:指令長度固定
- 變長指令字結構:指令長度不等
1.4 指令格式-操作碼
定長操作碼:n位→ 2n 條指令
擴展操作碼:操作碼長度可變
擴展操作碼舉例:
擴展思想:即動態的把地址碼用作操作碼,而為了識別變化,上一層操作碼字段留出一個狀態表示下一層
在設計擴展操作碼指令格式時,必須注意以下兩點:
通常情況下,對使用頻率較高的指令,分配較短的操作碼;
對使用頻率較低的指令,分配較長的操作碼,從而盡可能減少指令譯碼和分析的時間。
設地址長度為 n,上一層留出 m 種狀態,下一層可擴展出 mx2n 種狀態
1.5 操作碼分類
- 操作碼指出指令中該指令應該執行什么性質的操作和具有何種功能。
- 操作碼是識別指令、了解指令功能與區分操作數地址內容的組成和使用方法等的關鍵信息。例如,指出是算術加運算,還是減運算;是程序轉移,還是返回操作。
一般 n 位操作碼字段的指令系統最大能夠表示 2n 條指令。
優:定長操作碼對于簡化計算機硬件設計,提高指令譯碼和識別速度很有利;
缺:指令數量增加時會占用更多固定位,留給表示操作數地址的位數受限。
最常見的變長操作碼方法是擴展操作碼,使操作碼的長度隨地址碼的減少而增加,不同地址數的指令可以具有不同長度的操作碼,從而在滿足需要的前提下,有效地縮短指令字長。
優:在指令字長有限的前提下仍保持比較豐富的指令種類;
缺:增加了指令譯碼和分析的難度,使控制器的設計復雜化。
1.6 操作類型
- LOAD作用:把存儲器中(源)的數據放到寄存器中(目的)
- STORE作用:把寄存器中的數據放到存儲器中
- 算術:加、減、乘、除、增1、減1、求補、浮點運算、十進制運算
- 邏輯:與、或、非、異或、位操作、位測試、位清除、位求反
算術移位、邏輯移位、循環移位(帶進位和不帶進位)
- 無條件轉移JMP
- 條件轉移JZ:結果為0;JO:結果溢出;JC:結果有進位
- 調用和返回CALL和RETURN
- 陷阱(Trap)與陷阱指令
CPU寄存器與IO端口之間的數據傳送(端口即IO接口中的寄存器)
也可以分為以下四類:
- 數據傳送類:進行主存與CPU之間的數據傳送
- 運算類
- 程序控制類:改變程序執行的順序
- 輸入輸出類(I/O):進行CPU和I/O設備之間的數據傳送
2 數據存放指令尋址
2.1 數據存放方式
三個字長:
- 機器字長:CPU一次能處理的二進制數據的位數,受寄存器能夠存放二進制位數的限制。
- 指令字長:一個指令字中包含二進制代碼的位數。
- 存儲字長:一個存儲單元存儲二進制代碼的長度。
注:這三個字長沒有固定大小的關系,但這些長度都是字節的整數倍
單字長指令:指令長度=機器字長
半字長指令、雙字長指令
2.2 指令尋址
指令尋址:
順序尋址:(PC)+1→PC
跳躍尋址:由轉移指令指出
2.3 操作數類型
2.4 數據尋址
數據尋址即根據尋址方式的要求將形式地址轉化為實際地址的過程
2.4.1立即尋址
立即尋址:形式地址A就是操作數本身,又稱為立即數,一般采用補碼形式。
#表示立即尋址特征。
一條指令的執行:
取指令訪存1次
執行指令訪存0次
暫不考慮存結果
共訪存1次
- 優點:指令執行階段不訪問主存,指令執行時間最短
- 缺點:A的位數限制了立即數的范圍。
如A的位數為 n,且立即數采用補碼時,可表示的數據范圍為 - 2 n - 1 ~ 2 n - 1-1
2.4.2 直接尋址
直接尋址:指令字中的形式地址A就是操作數的真實地址EA,即 EA=A。
一條指令的執行:
取指令訪存1次
執行指令訪存1次
暫不考慮存結果
共訪存2次
- 優點:簡單,指令執行階段僅訪問一次主存,不需專門計算操作數的地址。
- 缺點:A的位數決定了該指令操作數的尋址范圍。
操作數的地址不易修改。
2.4.3 間接尋址
間接尋址:指令的地址字段給出的形式地址不是操作數的真正地址,而是操作數有效地址所在的存儲單元的地址,也就是操作數地址的地址,即 EA=(A)。
- 優點:可擴大尋址范圍(有效地址EA的位數大于形式地址A的位數)。
便于編制程序(用間接尋址可以方便地完成子程序返回)。 - 缺點:指令在執行階段要多次訪存
一次間址需兩次訪存,多次尋址需根據存儲字的最高位確定幾次訪存。
2.4.4 寄存器尋址
寄存器尋址:在指令字中直接給出操作數所在的寄存器編號,即 EA=Ri,其操作數在由Ri所指的寄存器內。
與直接尋址類似,只是把主存換成了寄存器
一條指令的執行:
取指令訪存1次
執行指令訪存0次
暫不考慮存結果
共訪存1次
- 優點:指令在執行階段不訪問主存,只訪問寄存器,指令字短且執行速度快,支持向量/矩陣運算。
- 缺點:寄存器價格昂貴,計算機中寄存器個數有限。
2.4.5 寄存器間接尋址
寄存器間接尋址:寄存器Ri中給出的不是一個操作數,而是操作數所在主存單元的地址,即 EA=(Ri)。
一條指令的執行:
取指令訪存1次
執行指令訪存1次
暫不考慮存結果
共訪存2次
- 特點:與一般間接尋址相比速度更快,但指令的執行階段需要訪問主存(因為操作數在主存中)。
2.4.6 隱含尋址
隱含尋址:不是明顯地給出操作數的地址,而是在指令中隱含著操作數的地址。
- 優點:有利于縮短指令字長。
- 缺點:需增加存儲操作數或隱含地址的硬件。
小結:
| 隱含尋址 | 程序待定 | 0 |
| 立即尋址 | A即是操作數 | 0 |
| 直接尋址 | EA=A | 1 |
| 一次間接尋址 | EA=(A) | 2 |
| 寄存器尋址 | EA=Ri | 0 |
| 寄存器間接一次尋址 | EA=(Ri) | 1 |
2.5 數據尋址-2偏移尋址
2.5.1 基址尋址
基址尋址:將CPU中基址寄存器(BR)的內容加上指令格式中的形式地址A,而形成操作數的有效地址,即EA=(BR)+A
注:基址寄存器是面向操作系統的,其內容由操作系統或管理程序確定。
在程序執行過程中,基址寄存器的內容不變(作為基地址),形式地址可變(作為偏移量)。
當采用通用寄存器作為基址寄存器時,可由用戶決定哪個寄存器作為基址寄存器,但其內容仍由操作系統確定。
- 優點:可擴大尋址范圍(基址寄存器的位數大于形式地址A的位數);
用戶不必考慮自己的程序存于主存的哪一空間區域,故有利于多道程序設計,以及可用于編制浮動程序。
2.5.2 變址尋址
變址尋址:有效地址EA等于指令字中的形式地址A與變址寄存器IX的內容相加之和,即EA=(IX)+A,其中IX為變址寄存器(專用),也可用通用寄存器作為變址寄存器。
注:變址寄存器是面向用戶的,在程序執行過程中,變址寄存器的內容可由用戶改變(作為偏移量),形式地址A不變(作為基地址)。
- 優點:可擴大尋址范圍(變址寄存器的位數大于形式地址A的位數);
在數組處理過程中,可設定A為數組的首地址,不斷改變變址寄存器IX的內容,便可很容易形成數組中任一數據的地址,特別適合編制循環程序。
變址尋址與基址尋址配合使用:EA=A+(BR)+(IX)
變址尋址與間接尋址配合使用:
- 如先變址后間址,EA=(A+(IX));
- 先間址后變址,EA=(A)+(IX)。
2.5.3 相對尋址
相對尋址:把程序計數器PC的內容加上指令格式中的形式地址A而形成操作數的有效地址,即EA=(PC)+A,其中A是相對于當前指令地址的位移量,可正可負,補碼表示。
- 優點:操作數的地址不是固定的,它隨著PC值的變化而變化,并且與指令地址之間總是相差一個固定值,因此便于程序浮動。。
相對尋址廣泛應用于轉移指令。
2.5.4 相對尋址舉例
某機器指令字長為16位,主存按字節編址,取指令時,每取一個字節PC自動加1。當前指令地址為2000H,指令內容為相對尋址的無條件轉移指令,指令中第一個字節為操作碼,第二個字節為形式地址,當前形式地址為40H。
(1)求取指令后及指令執行后PC內容。
(2)若要求轉移到1F00H,求形式地址的內容。
(1)PC中一開始存放2000H,多字節指令,第一次取出的是操作碼,PC更新為2001H,在2001H中取出地址碼,取數過程結束,PC更新為2002H
CPU分析指令的結果:是一條無條件轉移指令,EA=(PC)+A =2002H+40H =2042H
故取指令后PC內容為2002H,指令執行后PC內容為2042H
(2)即(PC)+A=2002H+A=1F00H
A=1F00H-2002H=1EFFH+1H-2002H =1EFFH-2002H+1H=FEFDH+1H=FEFEH
說明:(1EFFH-2002H=FEFDH,F(15)-2=13→D,1-2 不夠減,向上借位,若是10進制,+10,這是16進制,+16為17,17-2=15,15的16進制就是F)
形式地址就是偏移量
2.5.5 尋址方式小結
| 隱含尋址 | 程序待定 | 0 |
| 立即尋址 | A即是操作數 | 0 |
| 直接尋址 | EA=A | 1 |
| 一次間接尋址 | EA=(A) | 2 |
| 寄存器尋址 | EA=Ri | 0 |
| 寄存器間接一次尋址 | EA=(Ri) | 1 |
| 相對尋址 | EA=(PC)+A | 1 |
| 基址尋址 | EA=(BR)+A | 1 |
| 變址尋址 | EA=(IX)+A | 1 |
- 相對尋址:指令中的形式地址給出一個位移量A,基準地址由程序計數器PC提供,通常用于轉移指令中轉移目標或公共子程序中的操作數的尋址
- 變址尋址:通常用于循環體中對數組元素的訪問
2.5.6 堆棧尋址
堆棧尋址:操作數存放在堆棧中,隱含使用堆棧指針(SP)作為操作數地址。
堆棧是存儲器(或專用寄存器組)中一塊特定的按后進先出(LIFO)原則管理的存儲區,該存儲區中被讀/寫單元的地址是用一個特定的寄存器給出的,該寄存器稱為堆棧指針(SP)。
2.6 CISC和RISC
CISC:Complex Instruction Set Computer(復雜指令系統計算機)
- 設計思路:一條指令完成一個復雜的基本功能。
- 代表:×86架構,主要用于筆記本、臺式機等
RISC:Reduced Instruction Set Computer(精簡指令系統計算機)
- 設計思路:一條指令完成一個基本“動作”;多條指令組合完成一個復雜的基本功能。
- 代表:ARM架構,主要用于手機、平板等
2.7 指令系統小結
總結
以上是生活随笔為你收集整理的5 计算机组成原理第四章 指令系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2 计算机网络性能指标
- 下一篇: 数学家、中科院院士张景中:数学实力影响国