2018-2019-1 20165237 《資訊安全系統設計基礎》第四周學習總結
阿新 • • 發佈:2018-10-31
2018-2019-1 20165237 《資訊安全系統設計基礎》第四周學習總結
處理器體系結構
Y86指令集體系結構
- 內容:定義一個指令集體系結構,包括定義各種狀態元素、指令集和它們的編碼、一組程式設計規範和異常事件處理
程式設計師可見狀態:
- Y86程式中的每條指令都會讀取或修改處理器狀態的某些部分。
- Y86具體包括:8個程式暫存器、3個條件碼ZF\SF\OF、程式計數器(PC)。
- Y86用虛擬地址引用儲存器位置。 程式狀態的最後一個部分是狀態碼Stat,它表明程式執行的總體狀態。
Y86指令
Y86指令
- 指令介紹:
- halt:這個指令將會終止指令的執行
- nop:這是一個佔位指令,他不做任何事,後續為了實現流水線,它有一定的作用
- xxmovl:這是一系列的資料傳送指令,其中r代表暫存器,m代表儲存器,i代表立即數.比如rrmov指令,則代表將一個暫存器的值,賦給另外一個暫存器
- opl:操作指令,比如加法,減法等等
- jxx:條件跳轉指令,根據後面的條件進行跳轉
- cmovxx:條件傳送指令,後面的xx代表的是條件.特別的是,條件傳送只發生在兩個暫存器之間,不會將資料傳送到儲存器.
- call與ret:方法的呼叫和返回指令.一個將返回地址入棧,並跳到目標地址.一個將返回地址入PC,並跳到返回地址.
- push和pop:入棧和出棧操作
指令編碼
- 在上圖的右邊,是指令所佔的位元組數或者說編碼.一般兩個暫存器佔用一個位元組,儲存器則佔用四個字街,指令的編碼和功能佔用一個位元組.因此可以看到,比如rrmovl指令,它的字長長度是2,其中第一個位元組代表了指令rrmovl,第二個位元組代表了兩個暫存器.
- 對於opl,jxx,cmovxx指令來說,都有一個fn標緻,佔用4個二進位制位(半個位元組).這個便是指令的功能部分,這個是由於他們的指令編碼一樣,但功能有所不同所造成的.比如對於opl,就有加,減,與,異或等操作,那麼它們的指令編碼第一個位元組就分別為十六進位制的60,61,62,63.
- 對於暫存器的表示,是使用4個二進位制位表示的,這是一個ID標誌.所有的暫存器可以看做是一個暫存器檔案,其中的ID標誌就類似於它們的地址.對於一些只需要一個暫存器的指令來說,另一個暫存器標誌位使用0xF表示.
- 還有的指令需要一個字的常數,比如irmovl指令,call指令等等.這種指令,將會把常數放在最後的四個位元組當中,順序按照大端法或小端法表示(與機器和OS有關).對於call指令來說,這四個位元組就是一個地址,這個地址就是絕對地址,指向了儲存器當中的某一個位置,這個位置儲存著程式碼.採用絕對地址是為了描述簡單,真實當中,時採取的基於PC的相對地址.
Y86異常
- 對Y86來說,程式設計師可見的狀態中就有stat狀態碼,它標誌了程式執行的狀態.Y86需要有能力根據stat去做一些處理.捕獲為了簡單起見,這裡除了正常執行之外,都將停止指令的執行.真實當中,會有專門的異常處理程式.
- Y86有四種不同的狀態碼:AOK(正常),HTL(執行halt指令),ADR(非法地址)和INS(非法指令).
Y86程式
- Y86指令和IA32程式碼的主要區別在於,它可能需要多條指令來執行一條IA32指令能完成的所有功能。
- Y86沒有伸縮定址模式。
- 以“.”開頭的詞是彙編器命令,命令.pos0告訴彙編器應該從地址0處開始產生程式碼。
- 建立Y86程式碼的唯一工具是彙編器。
- YIS:指令集模擬器
- Y86和X86的區別在於,有的時候Y86需要兩條指令來達到X86一條指令就可以達成的目的.
- 比如對於X86指令中的addl $4,%ecx這樣的指令,由於Y86當中的addl指令不包含立即數,所以Y86需要先將立即數存如暫存器,即使用irmovl指令,然後再使用addl來處理加法運算.
- 總的來說,Y86就是X86的一個縮減版,他的目的就是以簡單的結構來實現一個處理器,幫助我們瞭解處理器的設計和實現.
一些Y86指令的詳情
- 大多數Y86指令是以一種直接的方式修改程式狀態的。
- 執行pushl和popl指令時,處理器的行為是不確定的,因為要入棧的暫存器會被同一條指令修改。通常有兩種約定:
- 壓入/彈出%esp的原始值
- 壓入/彈出%esp-/+4後的值
邏輯設計和硬體控制語言HCL
邏輯閘
- 邏輯閘是數位電路的基本計算元素,它們的輸出,等於它們輸入位值的某個布林函式。
- 邏輯閘總是活動的,一旦一個門的輸入變化,在短時間內,輸出就會跟著變化。。
組合電路和HCL布林表示式
- 組合電路:將很多的邏輯閘組合成一個網,能構建計算塊。
- 多路複用:根據輸入控制訊號的值,從一組不同的資料訊號中選出一個。
- 構建這些網有2條限制:
- (1)兩個或多個邏輯閘的輸出不能連線在一起
- (2)這個網必須是無環的。
- HCL表示式和C語言中邏輯表示式的區別:
- (1)組合邏輯電路的輸出會持續地響應輸入的變化;C表示式只有在程式執行過程中被遇到時才會求值。
- (2)C的邏輯表示式允許引數是任意整數,0表示FLASE,其他任何值都表示TRUE;邏輯閘只對位值0和1進行操作。
- (3)C的邏輯表示式可能只被部分求值;組合邏輯沒有部分求值的規則,邏輯閘只是簡單地響應輸入的變化。
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 20篇 | 400小時 | |
第一週 | 61/61 | 1/1 | 10/10 | 瞭解vim,gcc,gdb基本操作 |
第二週 | 0/61 | 1/2 | 10/20 | 瞭解資訊的表示和處理 |
第三週 | 21/81 | 1/3 | 10/30 | 更深層次瞭解資訊處理 |
第四周 | 29/100 | 2/5 | 10/40 | Y86處理器 |