定義乙個指令集體系結構,例如y86,包括定義各種狀態元素、指令集和他們的編碼、一組變成規範和異常事件處理。
①程式設計師可見的狀態:y86中每條指令都會讀取或修改處理器狀態的某些部分。這裡的「程式設計師」既可以是用彙編**寫程式的人,也可以是產生機器**的編譯器。
y86的處理器狀態類似ia32。有8個程式暫存器:%eax,%ecx,%edx,%ebx,%esi,%esp和%ebp。處理器的每個程式暫存器儲存乙個字。
②儲存器,從概念上來說是乙個很大的位元組陣列,儲存著程式和資料。
y86程式用虛擬位址來引用儲存器位置。硬體和作業系統軟體聯合起來將虛擬位址翻譯成實際或實體地址,指明資料實際儲存在儲存器那個地方。
③狀態碼stat:它表明程式執行的總體狀態,會指示是正常執行還是出現了某種異常。
y86指令集基本上是ia32指令集的乙個子集,只包括四位元組整數操作,定址方式比較少,操作也較少。
ia32的movl指令分成了四個不同的指令:irmovl,rrmovl,mrmovl,rmmovl 顯示的指明源和目的。
源可以是立即數i,暫存器r,儲存器m 目的可以是暫存器r,儲存器m
不允許從儲存器到儲存器,也不允許將立即數傳到儲存器。
4個整數操作指令:addl,subl,andl,xorl 只對暫存器資料進行操作,會設定3個條件碼
7個跳轉指令:jmp,jle,jl,je,jne,jge,jg
6個條件傳送指令:cmovle,comvl,cmove,cmovne,cmovge,cmovg
call指令將返回位址入棧,然後跳到目的位址。ret從這樣的過程呼叫中返回
pushl,popl實現入棧和出棧
halt停止指令的執行,會導致處理器停止,並將狀態碼設定為hlt
每條指令需要1-6個位元組不等,每條指令的第乙個位元組表明指令的型別。
1.第乙個位元組
這個位元組分為兩個部分,每個部分4位:
比如:課本第233頁,y86指令集的功能碼:
整數操作裡**部分均為6,功能部分區分addl,subl,andl,xorl
分支指令裡**部分均為7
傳送指令裡**部分均為2
這裡要注意rrmovl歸到了傳送指令裡,前面說過它們有相同的指令**
8個程式暫存器中每個都有相應的0~7的暫存器識別符號,程式暫存器存在cpu中的乙個暫存器檔案中,這個暫存器檔案就是乙個小的、以暫存器id作為位址的隨機訪問儲存器。
當需要指明不應訪問任何暫存器時,用id值0xf表示
2.有的需要額外的位元組
(1)附加的暫存器指示符位元組
指定乙個或兩個暫存器,例如ra或者rb。
(2)附加的4位元組常數字
這個字的用處:
1.irmovl的立即數資料
2.rmmol和mrmovl的位址指示符的偏移量
3.分支指令和呼叫指令的目的位址
注意事項
1.分支指令和呼叫指令的目的位址是乙個絕對位址
2.所有整數採用小端法編碼
對於y86,當遇到這些異常的時候,我們就簡單的讓處理器停業執行指令。
在更完整的設計中,處理器通常會呼叫乙個異常處理程式,這個過程被指定用來處理遇到的某種型別的異常。
y86和ia32的區別
1.y86有時需要兩條指令來完成ia32一條指令就能完成的事
2.y86沒有伸縮定址模式
1.邏輯門產生的輸出,等於它們輸入位值的某個布林函式。
2.and &&or ||not !
3.邏輯門只對單個位的數進行操作,而不是整個字。
4.邏輯門總是活動的,輸入變化輸出很快就跟著變化。
組合電路:講很多的邏輯門組成乙個網,就能構成計算塊。
構建這些網有兩條限制:
①兩個或多個邏輯門的輸出不能連線在一起,否則他們可能會使線上的訊號矛盾,可能會導致乙個不合法的電壓或電器故障。
②這個網必須是無環的。
判斷集合關係的通用格式是:
iexpr in
iexpr等都是整數表示式。
(1)時鐘暫存器(簡稱暫存器):儲存單個位或字。
暫存器分為「硬體暫存器」和「程式暫存器」。
2.y86處理器
它會用時鐘暫存器儲存程式計數器pc,條件**cc和程式狀態stat。
下面是關於各個階段以及各階段內執行操作的簡略描述:
解碼:解碼階段從暫存器檔案讀入最多兩個運算元,得到val a/val b.
訪存:訪存階段可將資料寫入儲存器或從儲存器讀出資料
寫回:最多可寫兩個結果到儲存器。
程式計數器放在暫存器中,位於左下角pc。
資訊隨著線流動,方向是先向上再向右
反饋先祖在右邊向下
所有硬體單元的處理都在乙個時鐘週期內完成。
淺灰色方塊表示硬體單元
控制邏輯塊是用灰色圓角矩形表示的
線路的名字在白色橢圓中說明
寬度為字長或更窄的資料連線用細線
單個位的連線用虛線。
seq抽象檢視的畫法:
乙個時鐘變化會引發乙個經過組合邏輯的流來執行整個指令。
seq的實現包括組合邏輯和兩種儲存器裝置:
時鐘暫存器:程式計數器和條件碼暫存器
隨機訪問儲存器:暫存器檔案、指令儲存器和資料儲存器
組合邏輯不需要時序或控制。
四個硬體單元需要時序進行明確控制:程式計數器、條件碼暫存器、資料儲存器和暫存器檔案,通過乙個時鐘訊號來控制,它觸發將新值裝載到暫存器以及將值寫到隨機訪問儲存器。即要控制處理器中的時序,只需要暫存器和儲存器的時鐘控制。
4.3.4 seq階段的實現
1、取指階段
以pc作為起始位址,從指令儲存器中讀出六個位元組。
根據這些位元組,產生出各個指令字段。pc增加模組計算訊號valp。
2、解碼和寫回階段
指令字段解碼,產生暫存器檔案使用的四個位址(兩個讀和兩個寫)的暫存器識別符號。
從暫存器檔案中讀出的值成為訊號vala和valb。兩個寫回值vale和valm作為寫操作的資料。
3、執行階段
alu要麼為整數運算指令執行操作,要麼作為加法器。
根據alu的值,設定條件碼暫存器。檢測條件碼的值,判斷是否該選擇分支。
4、訪存階段
資料儲存器既可以寫,也可以讀儲存器的值。從儲存器讀出的值就形成了訊號valm。
5、更新pc階段
根據指令**和分支標誌,從訊號valc、valm和valp中選出下乙個pc的值。
第六周學習總結
已經進入到了第六周,我感覺我的水平也在逐步提公升,從一開始的看不懂題到如今能夠做出題來,這說明更多的思考是值得的。而在做題的過程中,我也對動態規劃演算法有了更為深刻的認識。動態規劃,就是利用歷史記錄,來避免我們的重複計算。而這些歷史記錄,我們得需要一些變數來儲存,一般是用一維陣列或者二維陣列來儲存。...
第六周學習總結
pytorch 本週繼續學習了基本操作,包括tensor的合併與分割 數 算 屬性統計等 另外複習了隨機梯度下降演算法,並通過乙個demo實現了自動求梯度和反向傳播 此外還實現了乙個2d函式的模型構建與優化。pytorch自用筆記 第三週 高階篇 計算機視覺 本週學習了一些cnn框架,包括lenet...
第六周學習總結
scrum 原意是橄欖球,這裡特指一種敏捷開發框架,是乙個增量的 迭代的開發過程。然後講了 自主織團隊 與中國團隊的不同之處還有scrum在需求方面的核心理念,最主要的乙個概念是使用者故事,有關這個概念主持人用了相當一部分時間去講述,下面給大家補充一下使用者故事的標準格式 作為.角色 從使用者的角度...