2017-2018-1 20155301 《信息安全系統設計基礎》第7周學習總結
教材學習內容總結
- 作為我們處理器實現的運行實例,因為受x86-64指令集的啟發,它被俗稱為“x86”,所以我們稱我們的指令集為“Y86-64”,與“x86-64”相比,Y86-64指令集的數據類型、指令和尋址方式都要少一些。它的字節級編碼也比較簡單,機器代碼沒有相應的x86-64代碼緊湊,不過設計他的CPU譯碼邏輯也要簡單一些。
- 定義Y86指令集體系結構:包括定義各種狀態元素、指令集和它們的編碼、一組編程規范和異常事件處理。
- Y86-64的狀態類似于x86-64。有15個程序寄存器:%rax、%rcx、%rdx、%rbx、%rsp、%rbp、%rsi、%rdi和%r8到%r14。
- 內存從概念上來說就是一個很大的字節數組,保存著程序和數據。
- 下圖給出了Y86-64 ISA中各個指令的簡單描述。Y86-64指令集基本上是x86-64指令集的一個子集。它只包括8字節整數操作,尋址方式較少,操作也較少。
- x86-64的movq指令分成了4個不同的指令:irmovq、rrmovq、mrmovq、rmmovq分別顯示地指明源和目的的格式。源可以是立即數(i)、寄存器(r)或內存(m)。目的可以是寄存器(r)或內存(m)。兩個內存傳送指令中的內存引用方式是簡單的基址和偏移量形式。
- 有4個整數操作指令,如下圖中的OPq。它們是addq、subq、andq和xorq。它們只對寄存器數據進行操作,而x86-64還允許對內存數據進行這些操作,這些指令會設置3個條件碼ZF、SF和OF。
- 7個跳轉指令是jmp、jle、jl、je、jne、jge、jg。
- 有6個條件傳送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg。這些指令的格式與寄存器-寄存器傳送指令rrmovq一樣,但是只有當條件碼滿足所需要的約束時,才會更新目的寄存器的值。
- call指令將返回地址入棧,然后跳到目的地址。ret指令從這樣的調用中返回。
- pushq和popq指令實現了入棧和出棧,就像在x86-64中一樣。
- halt指令停止指令的執行。x86-64中有一個與之相當的指令hlt。x86-64的應用程序不允許使用這條指令,因為他會導致整個系統暫停運行。
- 每個指令需要1~10個不等的字節。每條指令的第一個字節表明指令的類型。這個字節分為兩部分,每部分4位:高4位是代碼部分,低4位是功能部分。
- 在指令編碼中以及在我們的硬件設計中,當需要指明不應該訪問任何寄存器時,就用ID值0xF來表示。
數字 | 寄存器名字 | 數字 | 寄存器名字 | |
---|---|---|---|---|
0 | %rax | 8 | %r8 | |
1 | %rcx | 9 | %r9 | |
2 | %rdx | A | %r10 | |
3 | %rbx | B | %r11 | |
4 | %rsp | C | %r12 | |
5 | %rbp | D | %r13 | |
6 | %rsi | E | %r14 | |
7 | %rdi | F | 無寄存器 |
-Y86-64異常,對于Y86-64來說,程序員可見的狀態包括狀態碼State,它描述程序執行的總體狀態。當遇到這些異常的時候,我們就簡單地讓處理器停止執行指令
值 | 名字 | 含義 | |
---|---|---|---|
1 | AOK | 正常操作 | |
2 | HLT | 遇到器執行halt指令 | |
3 | ADR | 遇到非法地址 | |
4 | INS | 遇到非法指令 |
- 邏輯設計和硬件控制語言HCL,在硬件設計中,用電子電路來計算對位進行運算的函數,以及在各種存儲器單元中存儲位,邏輯1是用1.0伏特左右的高電壓表示的,而邏輯0是用0.0伏特左右的低電壓表示的。
- AND用&&表示,OR用||表示,而NOT用!表示,我們用這些符號而不用C語言中的位運算符&、|和~,這是因為邏輯們只對單個位的數進行操作。
將很多的邏輯們組合成一個網,就能構建計算塊,稱為組合電路。如何構建這些網有幾個限制:
1.每個邏輯們的輸入必須連接到下述選項之一:1)一個系統輸入(成為主輸入)
2)某個存儲單元的輸出
3)某個邏輯門的輸出。
2.兩個或多個邏輯們的輸出不能連接在一起。否則它們可能會實現上的信號矛盾,可能會導致一個不合法的電壓或電路故障。
3.這個網必須是無環的,也就是在網中不能有路經經過一系列的門而形成一個回路,這樣的回路會導致該網絡計算的函數有歧義。- HCL表達式很清楚地表明了組合邏輯電路和C語言中邏輯表達式的對應之處。它們都是用布爾操作來對輸入進行計算的函數,但是有以下區別:
1.因為組合電路是由一系列的邏輯門組成,它的屬性輸出會持續地響應輸入的變化,如果電路的輸入變化了,在一定的延遲之后,輸出也會相應地變化,而C表達式只會在程序執行過程中被遇到時才進行求值。
2.C的邏輯表達式允許參數是任意整數,0表示FLASE,其他任何值都表示TRUE,而邏輯門只對位值0和1進行操作。
3.C的邏輯表達式有個屬性就是它們可能只被部分求值。如果一個AND或OR操作的結果只用對第一個參數求值就能確定,那么就不會對第二個參數求值了。 - 在處理器設計中,很多時候都需要將一個信號與許多可能匹配的信號做比較,以此來檢測正在處理的某個指令代碼是否屬于某一類指令代碼。
- 時鐘寄存器存儲單個位或字。時鐘信號控制寄存器加載輸入值。
- 隨機訪問存儲器存儲多個字,用地址來選擇該讀或該寫哪個字。
通常,處理一條指令包括很多操作,將他們組織成某個特殊的階段序列,即使指令的動作差異很大,但所有的指令都遵循統一的序列。下面是關于各個階段以及各階段內執行操作的簡略描述:
1.取指:取指階段從內存讀取指令字節,地址為程序計數器(PC)的值。從指令中抽取出指令指示符字節的兩個四位部分,稱為icode和ifun。它可能去出一個寄存器值指示符字節,指明一個或兩個寄存器操作數指示符rA和rB。他還可能取出一個四字節常數字valC。他按順序方式計算當前指令的下一跳指令的地址valP。
2.譯碼:譯碼階段從寄存器文件讀入最多兩個操作數,得到值valA和/或valB。通常,他讀入指令rA和rB字段指明的寄存器,不過有些指令是讀寄存器%rsp的。3.執行:在執行階段,算術\邏輯單元要么執行指令指明的操作,計算內存引用的有效地址,要么增加或減少棧指針。得到的值我們稱為value。在此,也可能設置條件碼。對一條條件傳送指令來說,這個階段會檢驗條件碼和傳送條件,如果條件成立,則更新目標寄存器。
4.訪存:訪存階段可以將數據寫入內存,或者從內存中讀出數據。讀出的值為valM。
5.寫回:寫回階段最多可以寫兩個結果到寄存器文件。
6.更新PC:將PC設置成下一條指令的地址。SEQ階段的實現
在控制邏輯中必須被顯式引用的常數:(常數值都是大寫的)
nop指令只是簡單的經過各個階段,除了將PC加1,不進行任何處理。halt指令是處理器狀態被設置為HLT,導致處理器停止運行。
實驗樓環境
教材學習中的問題和解決過程
代碼調試中的問題和解決過程
代碼托管
上周考試錯題總結
- 錯題1及原因,理解情況
- 錯題2及原因,理解情況
- ...
結對及互評
點評模板:
- 博客中值得學習的或問題:
- xxx
- xxx
- ...
- 代碼中值得學習的或問題:
- xxx
- xxx
- ...
- 其他
本周結對學習情況
[20155317](http://www.cnblogs.com/wxwddp/p/7671075.html)

- 結對學習內容- XXXX- XXXX- ...
其他(感悟、思考等,可選)
xxx
xxx
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什么這么難,軟件工程 估計方法
計劃學習時間:XX小時
實際學習時間:XX小時
改進情況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料
- 《深入理解計算機系統V3》學習指導
- ...