處理器體系結構

一個處理器支持的指令和指令的字節級編碼稱為ISA(指令集體系結構),不同的處理器”家族“都有不同的ISA。一個程序編譯成一種機器上運行,就不能再另一種機器上運行。另外,同一個家族里也有許多不同類型的處理器。因此,ISA在編譯器編寫者和處理器設計員之間提供了一個概念抽象層,編譯器編寫者只需要知道允許哪些指令,以及如何編碼;而處理器設計者必須建造出執行這些指令的處理器。

Y86處理器是基于順序操作、功能正確,但有點不實用。

一、Y86指令集體系結構

Y86程序中每條指令都會讀取或修改處理器狀態的某些部分。Y86的處理器有8個寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp,處理器每個程序寄存器存儲一個字。寄存器%esp被入棧、出棧、調用和返回指令作為棧指針。而其他寄存器沒有固定的含義或固定值。有三個一位的條件碼:ZF、SF、OF,保存有關最近的算術或邏輯指令造成影響的信息。程序計數器(PC)存放著當前正在執行指令的地址。存儲器,從概念上說是一個很大的字節數組,保存著程序和數據。Y86程序用虛擬地址來引用存儲器位置。硬件和操作系統軟件結合起來將虛擬地址翻譯成明數據實際存在存儲器中哪個地方的實際或物理地址。


Y86程序員可見狀態.jpg

二、邏輯設計和硬件控制語言HCL

在硬件設計中,電子電路被用來計算位的函數,以及在各種存儲器元素中存儲位。大多數現代電路設計都是用信號線上的高電壓或低電壓來表示不同的位值。通常的技術中,邏輯1是用1.0伏特左右的高電壓表示,邏輯0是用0.0伏特左右的低電壓表示。要實現一個數字系統需要三個主要的組成部分:計算位的函數的組合邏輯、存儲位的存儲器元素、以及控制存儲器元素更新的時鐘信號。

1.邏輯門

邏輯門是數字電路的基本計算元素。它們產生的輸出,等于他們輸入位值的某個布爾函數,AND,OR,NOT。邏輯門總是活動的,一旦一個門的輸入變化了,在很短時間內,輸出就會相應地變化。

2.存儲器和時刻控制

組合電路從本質上來講,不存儲任何信息。相反只是簡單地相應輸入信號,產生等于輸入的某個函數輸出。為了產生時序電路,有狀態并在在這個狀態上進行計算的系統,引入了按位存儲信息的設備。

  • 時鐘寄存器存儲單個位或字。
  • 隨機訪問存儲器存儲多個字,用地址選擇讀或該讀哪個字。硬件和軟件系統結合起來使處理器可以在很大的地址空間訪問任意的字。

在硬件中,寄存器直接將它的輸入和輸出線連接到電路其他部分。在機器編程級別,寄存器代表CPU中為數不多的可尋址的字,這里的地址是寄存器ID。分別稱這兩類寄存器為“硬件寄存器”和”程序寄存器“。

(a) 硬件寄存器

大多數時候,寄存器保持在穩定狀態(用x表示),產生的輸出等于它當前狀態。只要時鐘是低電位,寄存器的輸出狀態保持不變。當時鐘變成高電位,輸入信號加載到寄存器,成為下一個狀態y,這個狀態就成為寄存器的新輸出。


硬件寄存器.jpg

(b) 程序寄存器

下面展示典型的寄存器文件,寄存器文件有兩個讀端口(A和B),還要一個寫端口(W)。這樣一個多端口隨機訪問存儲器允許同時進行多個讀和寫操作。在圖中,電路可以讀兩個程序寄存器的值,同時更新第三個寄存器的狀態。每個端口都有一個地址輸入,表明選擇哪個程序寄存器,另外還有一個數據輸出或對應程序寄存器的輸入值。


程序寄存器.jpg

三、硬件結構

實現所有Y86指令所需要的計算可以被組織成六個基本階段:取指、解碼、執行、訪存、寫回和更新PC。

  • 取指:將程序計數器寄存器作為地址,指令存儲器讀取一個指令的字節,增加程序計數器
  • 解碼: 寄存器文件有兩個讀端口A和B,從這兩個端口同時讀寄存器值valA和valB.
  • 執行:執行階段根據指令的類型,將算術/邏輯單元(ALU)用于不同的目的。對整數操作,它需要執行指令所指定的運算。對其他指令,它會作為一個加法器來計算增加或減少棧指針,或者有效地址,或者只是簡單地加0,將一個輸入傳遞到輸出。
  • 訪存:在執行訪存操作時,數據存儲器讀出或寫入一個存儲字,指令和數據會根據條件碼或轉換碼類型來計算分支信號Bch
  • 寫回:寄存器文件有兩個寫端口,端口E用來寫ALU計算出來的值,端口M用來寫從數據寄存器中讀出的值。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容