冒險:一條指令的位置或者操做數依賴於其餘仍在流水線中的指令。程序員
4.1 Y86指令集體系結構數組
4.1.1程序員可見的狀態函數
處理器狀態:fetch
8個程序寄存器,每一個寄存器存儲一個字。其中%esp被入棧、出棧、調用和返回指令做爲棧指針。編碼
3個條件碼:保存最近的算術或邏輯指令所形成影響的有關信息設計
程序計數器PC:存放當前正在執行指令的地址指針
存儲器:咱們認爲虛擬存儲器提供給Y86一個單一的字節數組映像。code
狀態碼Stat:代表程序執行的整體狀態,指示是在正常運行,仍是出現了某種異常。it
4.1.2 Y86指令date
4個movl的不一樣指令:(irmovl,rrmovl,mrmovl,rmmovl)
第一個字母代表了3種源的類型
第二個字母代表了2種目的類型。
4個整數操做指令:addl,subl,andl,xorl;他們會設置三個條件碼ZF,SF,OF
7個跳轉指令
6個條件傳送指令
call和ret
pushl和popl
halt中止指令的執行。會致使處理器中止,並將狀態碼設置爲HLT
4.1.3指令編碼
Y86指令集中,每條指令須要1-6個字節不等。每條指令的第一個字節代表指令的類型。這個字節分爲高低兩部分:
高4位是代碼部分,低4位是功能部分。
8個程序寄存器各自有相應0-7的寄存器標識符。當須要指明不該訪問任何寄存器時,有ID值0xF表示。
寄存器指示符字節:在須要操做數的指令編碼中,能夠用於數據源和目的寄存器,或地址計算的基址寄存器。
有些指令會附加一個4字節常數字:可做爲irmovl的當即數數據,rmmovl和mrmovl的地址指示符偏移量,以及分支指令和調用指令的目的地址(絕對地址)。
4.1.4 Y86異常
狀態碼Stat:
值1:AOK 正常操做
值2:HLT halt指令執行
值3:ADR 遇到非法地址
值4:INS 遇到非法指令
4.2 邏輯設計和硬件控制語言HCL
數字系統的三個組成部分:
計算對位進行操做的函數的組合邏輯、
存儲位的存儲器元素、
控制存儲器元素更新的時鐘信號
4.2.1邏輯門
AND:&&
OR:||
NOT:!
邏輯門只對單個位的數進行操做,而不是整個字
3輸入AND:a&&b&&c
邏輯門老是活動的
4.2.2組合電路和HCL布爾表達式
組合電路:
兩條限制:
兩個或多個邏輯門的輸出不能鏈接在一塊兒;
這個網必須無環。
例1:bool eq = (a&&b)||(!a&&!b);
多路複用器:
例2:bool out=(s&&a)||(!s&&b);
4.2.3字級組合電路和HCL整數表達式
同C語言的switch語句不一樣,咱們不要求不一樣的選擇表達式之間互斥。這些選擇表達式順序求值,且第一個求值爲1的狀況被選中。
4.2.4集合關係
bool s1= code==2||code==3;
等價於
bool s1 = code in {2,3};
表示當code在集合{2,3}中s1爲1。
4.2.5存儲器和時鐘
組合電路從本質上講,不存儲任何信息。只響應輸入產生輸出。
時序電路:有狀態而且在這個狀態上進行計算的系統。
時鐘寄存器:存儲單個位或者字。時鐘信號控制寄存器加載輸入值。
隨機訪問存儲器:存儲多個字,用地址選擇該讀寫哪一個字:
(1) 處理器的虛擬存儲器系統
(2) 寄存器文件
Y86處理器會用時鐘寄存器保存程序計數器(PC),條件代碼(CC)和程序狀態(Stat)。
寄存器文件有兩個讀端口和一個寫端口。
4.3 Y86的順序實現
SEQ(「sequential」順序的)處理器:
4.3.1將處理組織成階段
取址(fetch):從存儲器讀取指令字節,地址爲程序計數器(PC)的值。
譯碼(decode):從寄存器文件讀入最多兩個操做數,獲得值valA和/或valB
執行(execute):算術邏輯單元執行指令指明的操做,計算存儲器引用的有效地址,或者增長或減小棧指針
訪存(memory):將數據寫入存儲器,或者從存儲器讀出數據,讀出的值爲valM。
寫回(write back):最多能夠寫兩個結果到寄存器文件
更新PC(PC update):將PC設置爲下一條指令的地址
4.3.3 SEQ的時序
Y86指令集的組織運算原則:處理器歷來不須要爲了執行一條指令而去讀取被該指令更新了的狀態。
4.3.4 SEQ階段的實現
在這個Y86處理器的完整設計中,咱們能夠少許各類硬件單元和一個時鐘來控制計算順序。其中控制邏輯必需要在這些單元之間傳遞信號,並根據指令類型和分支條件產生適當的控制信息。
他的問題在於時鐘必須很是慢,來讓信號能在一個週期內傳播全部階段。
參考資料:《深刻理解計算機系統》