Download presentation
Presentation is loading. Please wait.
1
第 5 章 處理器指令集
2
到底處理器應該提供哪些指令? 理論上,處理器只要具備某些基本的運算功能(指令),就有足夠的能力去計算任何一個函數。 電腦結構師必須考慮:
指令太多帶來的是便利性,而非功能性。 指令太多可能衍生效率問題。 電腦結構師必須考慮: 晶片大小 消耗功率 散熱問題
3
指令集重點 建置處理器的運算集合是一種妥協,一種介於硬體成本、程式便利、和工程層面(比如:功率消耗)之間的妥協。
4
表示法 所有的硬體運算 硬體運算表示法 就是所有指令的集合,稱為指令集。 指令集定義所有指令的字義和運作規格。
意指所使用的指令語法,稱為指令格式。 先把程式轉換成可執行的指令格式,然後再交給處理器。
5
指令的組成部分 執行運算的操作碼 擷取數值的運算元 置放結果的位置
6
典型指令格式 由一序列的二進制位元所組成 通常 指令開頭是操作碼欄位 接著跟隨著運算元欄位
7
典型指令格式圖
8
指令長度 固定長度指令 可變長度指令 所有的指令長度都相同 硬體比較簡單 硬體比較快速 具有各種不同長度的指令 比較吸引程式設計師
記憶體使用較有效率
9
固定長度指令的重點 對程式設計師而言,使用固定長度指令的理由似乎不夠充分,然而,固定長度指令集確實讓處理器硬體比較精簡,也比較快!
10
通用暫存器 高速設備 處理器的一部份 暫時的儲存裝置 數量不大(<100)編號由0到N-1 長度剛好可以容納整數
11
浮點暫存器 容納浮點數 通用暫存器和浮點暫存器的編號都是從0開始,當指令發出暫存器編號時,很容易搞混淆。
比如:指定暫存器3和6作整數運算,處理器會擷取通用暫存器;然而,如果指定暫存器3和6是作浮點運算,則必須擷取浮點暫存器。
12
暫存器規劃 Z = X + Y 動作: 把X載入暫存器3 把Y載入暫存器6 把暫存器3和6的數值相加 把結果放到暫存器7
13
專業術語 暫存器配置 暫存器溢出 把數值放在暫存器,改善執行效能。 選擇暫存器置放數值的程序,稱為暫存器配置。
暫存器數量不夠時,會發生暫存器溢出。 為了讓新數值使用暫存器,只好把原暫存器內的舊數值,先移到記憶體。
14
雙精準度 兩倍原運算元的位元數 通常把暫存器視為連續的硬體 比如:使用連續的暫存器儲存雙精準度整數 一半的整數放在暫存器4
一半的整數放在暫存器5
15
暫存器庫 系統可以有多個暫存器庫 暫存器庫就是暫存器的集合 把某些運算元放在某個暫存器庫,利於平行處理。 硬體細節可能會影響到暫存器配置
最佳化執行效能
16
典型的暫存器庫策略 將暫存器分割成兩個暫存器庫 ALU可以從這兩個不同的暫存器庫,同時取出加法所需要的兩個運算元。
17
暫存器庫圖
18
程式設計師受到的影響 運算元必須放在暫存器庫 無法保證每一個指令的運算元,都來自於不同的暫存器庫。 R ← X + Y S ← Z – X
T ← Y + Z
19
暫存器衝突 暫存器衝突:無法把運算元配置到不同的暫存器庫。 通常由編譯器或組譯器通知。
程式設計師最好重新指定暫存器、或插入指令複製數值,才能有效地控制衝突的發生。
20
典型指令集 CISC(複雜指令集,Complex Instruction Set Compute )
RISC(精簡指令集,Reduced Instruction Set Computer )
21
CISC指令集 指令較多,往往有數百個指令。 某些複雜的計算指令可能需要一段時間執行,比如:
圖形指令在記憶體的運算動作 sine、cosine、…等計算函數 著名的英特爾Pentium,就是CISC處理器的代表。
22
RISC指令集 指令較少,剛好滿足數學函數計算的最低要求(比如:32個指令)。 通常一個時脈週期執行一個指令。 比如:MIPS指令集。
23
指令集結論 如果處理器的指令集有眾多(比如:數百個指令)且複雜(通常執行也相當耗時)的指令,則分類為CISC處理器;反之,如果指令集只有少數的指令,而且每個指令都只需要1個時脈週期的執行時間,則分類為RISC處理器。
24
管線執行 一種硬體最佳化技術 可以讓處理器更快速地完成一個指令 典型常見於RISC處理器
25
典型的指令週期 擷取下一個指令 檢視操作碼:決定需要幾個運算元 擷取每一個運算元 執行操作碼指定的運算 儲存結果到指定的位置
26
最佳化指令週期 RISC處理器被設計成平行的硬體單元,每個硬體單元執行一個階段,多個階段的硬體單元排列成多階管線。
管線會把結果,從目前的硬體單元 傳送到 下一個硬體單元。
27
五階管線執行圖
28
管線速度 所有階段的硬體都可以平行且獨立地運作 所有階段的硬體同時往右傳送指令 效果:N階管線可以同時執行N個指令
29
管線工作圖
30
RISC處理器和管線 雖然RISC處理器不能在單一時脈週期下,就執行完擷取−執行週期的所有階段,但是藉由平行硬體的指令管線提供幾乎相等的效能表現,一旦管線滿載,每一個時脈週期剛好會有一個指令完成。
31
管線技術 指令管線透通於程式設計師。 雖然如此,但是不瞭解管線技術很可能妨礙到程式設計的效能表現。
比如:如果管線項目不合,則管線硬體可能會發生指令遲滯。
32
指令遲滯 假設 指令K: C ← add A B 指令K+1: D ← subtract E C 以下兩個連續指令分別執行加法和減法
運算元和結果置放於暫存器A、B、C和D 指令K: C ← add A B 指令K+1: D ← subtract E C
33
管線遲滯現象 使用泡泡代表延遲,泡泡的出現將影響管線階段的傳輸與進行。
34
管線遲滯的其它原因 存取外部儲存裝置 加入協同處理器 分支到新位置 呼叫副程式
35
程式高速運作 少用分支指令 最好也不要在鄰接的指令後面,立刻存取結果暫存器,以避開延遲。
36
指令重排順序
37
管線重點 雖然在任何時間上,管線硬體會自動地幫助程式盡可能高速執行,然而程式設計師最好能在撰寫程式時,就開始注意並且謹慎地運用管線技術,否則指令管線硬體可能無法全速執行。
38
No-OP指令 大部分的處理器會提供no-op指令 no-op (不動作)指令不會影響 no-op指令通常什麼都不做,只是浪費時間而已。
資料數值 計算結果 電腦狀態 no-op指令通常什麼都不做,只是浪費時間而已。 程式設計師可以插入no-op指令,來標示這裡發生指令遲滯現象。
39
前遞轉送 英文稱為forwarding技術 (forward字面意義為轉送) 讓ALU預先存取上一個指令的結果,解決連續算術指令的傳輸問題。
使用硬體來進行偵測,避免遲滯。 範例: 指令K: C ← add A B 指令K+1: D ← subtract E C
40
運算型態
41
程式計數器 就是所謂的”指令指標” 專用暫存器 使用擷取−執行週期 自動擷取下一個指令位址
42
程式計數器演算法 指定程式計數器一個初始值,重複執行下列工作{ 擷取:從程式計數器給予的位址,抓取程式的下一個指令
由剛剛擷取的指令得知下個指令位址,並送至內部位址暫存器A 執行:執行指令運算動作 複製位址暫存器A內容給程式計數器 }
43
分支指令和擷取執行 絕對分支指令 相對分支指令 最典型的就是jump指令 尾隨的運算元就是位址,會載入到內部位址暫存器A 。
最典型的就是br指令 運算元是一個有號數值,會加到內部位址暫存器A 。
44
副程式呼叫指令 jsr指令 ret指令 類似分支指令 jsr指令會先把目前的呼叫位址,完整地儲存到位址暫存器A。 副程式的結束指令
45
傳遞引數 有多種傳遞引數的方式 比如: 使用記憶體來傳遞引數 使用通用暫存器來傳遞引數 使用專用暫存器來傳遞引數
46
暫存器視窗 最佳化引數傳輸方式 在任何時間點,處理器只能看到一小部分的暫存器,稱為視窗。
每執行一個副程式,硬體會自動加入一個對應的視窗,等到副程式結束後,才會收回該視窗。 視窗之間可以出現重疊現象 重疊暫存器正是呼叫程式置放引數的地方 呼叫程式可以看見的重疊暫存器,副程式也可以看見。
47
暫存器視窗圖
48
MIPS指令集範例 MIPS處理器廣泛地應用在嵌入式系統 MIPS指令集是RISC處理器中最經典的範例
49
MIPS指令集
50
MIPS指令集(Cont.)
51
MIPS指令集(Cont.)
52
最小化指令集 最基本的指令集必須精簡,以保證高速運作。 不需要太多指令,只要具有最必要的基本指令即可。
53
正交原則 正交原則指出:每一個指令都只執行唯一的任務,再也沒有其它指令具備相同或類似的功能,來完成這個任務,也就是說,正交原則可以避免出現多個重複功能的指令,強化精簡觀念。
54
條件碼 內部的硬體機制 ALU會主動地設定條件碼 分支指令可以根據多個條件位元進行測試,並且根據這些測試的結果,來決定是否要作分支動作。
55
條件碼範例
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.