第四章《處理器體系結構》
一、概述
1、現代微處理器可以稱得上人類創造的最複雜的系統之一
2、一個處理器支援的指令和指令的位元組級編碼稱為它的指令級體系結構
二、Y86指令集體系結構
1、簡易圖示
2、各個位元組代表的含義
halt:這個指令将會終止指令的執行。
nop:這是一個占位指令,它不做任何事情,後續為了實作流水線,它有一定的作用。
xxmovl:這是一系列的資料傳送指令,其中r代表寄存器,m代表存儲器,i代表立即數。比如rrmovl指令,則代表将一個寄存器的值,賦給另外一個寄存器。
opl:操作指令,比如加法,減法等等。
jxx:條件跳轉指令,根據後面的條件進行跳轉。
cmovxx:條件傳送指令,後面的xx代表的是條件。特别的是,條件傳送隻發生在兩個寄存器之間,不會将資料傳送到存儲器。
call與ret:方法的調用和傳回指令。一個将傳回位址入棧,并跳到目标位址。一個将傳回位址入PC,并跳到傳回位址。
push與pop:入棧和出棧操作。
3、對于指令的基本介紹
對于opl、jxx、cmovxx指令來說,都有一個fn辨別,占用4個二進制位(半個位元組)。這個便是指令的功能部分,這個是由于它們的指令編碼一樣,但功能有所不同所造成的。比如對于opl,就有加、減、與、異或等操作,那麼它們的指令編碼第一個位元組就分别為十六進制的60、61、62、63。
對于寄存器的表示,是使用4個二進制位表示的,這是一個ID辨別。所有的寄存器可以看做是一個寄存器檔案,其中的ID辨別就類似于它們的位址。對于一些隻需要一個寄存器的指令來說,另一個寄存器辨別位使用0xF表示。
還有的指令需要一個字的常數,比如irmovl指令,call指令等等。這種指令,将把常數放在最後的四個位元組當中,順序按照大端法或小端法表示(與機器和OS有關)。對于call指令來說,這四個位元組就是一個位址,這個位址就是絕對位址,指向了存儲器當中的某一個位置,這個位置存儲着代碼。采用絕對位址是為了描述簡單,真實當中,是采取的基于PC的相對位址。
4、Y86異常
對于Y86來說,程式猿可見的狀态中就有stat狀态碼,它辨別了程式執行的狀态。Y86需要有能力根據stat去做一些處理。不過為了簡單起見,這裡除了正常執行之外,都将停止指令的執行。真實當中,會有專門的異常處理程式。
Y86有四種不同的狀态碼,AOK(正常)、HLT(執行halt指令)、ADR(非法位址)和INS(非法指令)。
三、邏輯設計和硬體控制語言HCL
1、邏輯門
AND:&&
OR:||
NOT:!
2、組合電路和布爾表達式
*兩個或多個邏輯門的輸出不能連接配接在一起,否則可能會使線上的信号沖突,導緻一個不合法的電壓或電路故障
*網必須無環
3、字級的組合電路和HCL整數表達式
*P245圖
一些位級信号代表一個整數或一些控制模式。執行字級計算的組合電路根據輸入字的各個位,用邏輯門來計算輸出字的各個位。
4、集合關系
判斷集合關系的通用格式:
Iexpr in {iexpr1,iexpr2,…,iexprk}
5、存儲器和時鐘
組合電路從本質上講,不存儲任何資訊。隻響應輸入産生輸出。
時序電路:有狀态并且在這個狀态上進行計算的系統。
時鐘寄存器:存儲單個位或者字。時鐘信号控制寄存器加載輸入值。
随機通路存儲器:存儲多個字,用位址選擇該讀寫哪個字:
(1) 處理器的虛拟存儲器系統
(2) 寄存器檔案
Y86處理器會用時鐘寄存器儲存程式計數器(PC),條件代碼(CC)和程式狀态(Stat)。
寄存器檔案有兩個讀端口和一個寫端口。
四、Y86的順序實作
1、 将處理組織成階段
下面是關于各個階段以及各階段内執行操作的簡略描述:
- 取指:取指階段從存儲器讀取指令位元組,位址為程式計數器(PC)的值。
- 譯碼:譯碼階段從寄存器檔案讀入最多兩個操作數,得到val A/val B.
- 執行:執行階段,算術/邏輯單元要麼執行指令明确的操作(根據ifun的值),計算存儲器引用的有效位址,要麼增加或減少棧指針。得到的值稱為valE
- 訪存:訪存階段可将資料寫入存儲器或從存儲器讀出資料
- 寫回:最多可寫兩個結果到存儲器。
- 更新PC:将PC設定成下一指令的位址。
- 2、seq階段的實作
- 參考資料
- 1、百度百科
- 2、左潇龍的技術部落格
- 3、bubuko的部落格
- 4、碼迷指導教程
五、學習總結
本周的内容雖然不多,但是有些晦澀難懂,看書有的地方還是不了解,需要靠做題加深。而本章知識比較像彙編和數字邏輯電路的結合,引入了更多的邏輯門,時序邏輯電路等知識點。
六、遇到的問題以及解決方式
1、235頁的練習題4.2,由數字編碼翻譯成彙編語言時不知道30f3fcffffff為什麼偏移量為四。
後面通過詢問同學知道,因為偏移量編碼是反序的補碼形式存放在4個位元組的常數字中
2、不知道為什麼val值等于pc值+常數
通過百度以及做習題知道,已取指令長度:指令所占位元組編碼,即是位元組數。