解釋在計算機體系結構中減少微指令數量的方法?
在本節中,有兩種方法可以利用這種冗餘來減少控制單元所需的微指令數量。第一種方法使用微子程式將重複的微操作組合成單個微指令塊,這些塊可被兩個或多個執行例程訪問。另一種方法是使用微程式碼跳轉來訪問兩個或多個例程共享的微指令。
微子程式
就像高階和組合語言程式碼使用子程式一樣,微順序器也可以使用微子程式。與高階程式碼一樣,微順序器在微程式碼中的多個例程中執行的動作序列中使用微子程式。微順序器硬體必須增強以實現微子程式呼叫和返回。
狀態 LDAC1、LDAC2 和 LDAC3 執行與狀態 STAC1、STAC2 和 STAC3 分別相同的微操作。在每種情況下,這三個狀態都從記憶體獲取一個 16 位地址並將其載入到 AR 中。
儘管微子程式直接出現在 FETCH3 之後,但它不能從該狀態呼叫,因為 FETCH3 必須對映到正確的執行例程。微順序器無法生成正確的返回地址。為了解決這個問題,它可以建立虛擬狀態 LDAC0 和 STAC0。當解碼 LDAC 或 STAC 指令時,FETCH3 對映到其中一個狀態。這些狀態不執行任何微操作並呼叫微子程式。
微子程式返回到下一個位置,該位置包含 LDAC4 或 STAC4。新的狀態分配顯示在表中。SUB1、SUB2 和 SUB3 分別執行與 LDAC1 (STAC1)、LDAC2 (STAC2) 和 LDAC3 (STAC3) 相同的微操作。
簡單 CPU 的修訂狀態分配
| 狀態 | 位置 |
|---|---|
| LDAC0 | 4 |
| LDAC4 | 5 |
| LDAC5 | 6 |
| STAC0 | 8 |
| STAC4 | 9 |
| STAC5 | 10 |
| SUB1 | 61 |
| SUB2 | 62 |
| SUB3 | 63 |
當呼叫微子程式時,例程的地址由微程式碼儲存器的 ADDR 輸出提供。微順序器必須儲存返回地址,以便在子程式終止後可以繼續執行。如果地址為 X 的微指令呼叫微子程式,則該例程必須返回到地址 X + 1。
微程式碼跳轉
條件和無條件跳轉指令有幾個執行相同微操作的狀態。這是可以預期的,因為如果要執行跳轉,則以相同的方式處理。可以透過建立微子程式來消除這種冗餘。它可以修改狀態圖,以便這些指令直接訪問相同的狀態。一組狀態將執行跳轉,另一組狀態將處理未執行的條件跳轉。例程將分支到正確的狀態。
JUMP1、JUMP2 和 JUMP3 與 JMPZY1、JMPZY2 和 JMPZY3 以及 JPNZY1、JPNZY2 和 JPNZY3 相同,除了 JUMP 狀態外,所有狀態都被消除了。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP