1. 程式人生 > >2018-2019-1 20165206 《資訊安全系統設計基礎》第4周學習總結

2018-2019-1 20165206 《資訊安全系統設計基礎》第4周學習總結

- 2018-2019-1 20165206 《資訊安全系統設計基礎》第4周學習總結

- 教材學習內容總結

  • 程式設計師可見的狀態:Y86-64程式中的每條指令都會讀取或修改處理器狀態的某些部分,這稱為程式設計師可見狀態。包括:程式暫存器、條件碼、程式狀態、程式計數器和記憶體。

  • Y86-64指令:Y86-64指令是x86-84指令集的一個子集。它只包括8位元組整數操作。有4個整數操作指令:addq、subq、andq和xorq。有7個跳轉指令:jmp、jle、jl、je、jne、jge和jg。有6個條件傳送指令:cmovle、cmovl、cmove、cmovne、cmovge和cmovg。

  • 彙編機器碼間的轉換。

  • Y86-64狀態碼:
    程式碼值1,命名為AOK,表示正常操作;
    程式碼值2,命名為HLT,表示遇到器執行halt指令;
    程式碼值3,命名為ADR,表示遇到非法地址;
    程式碼值4,命名為INS,表示遇到非法指令。

  • Y86-64指令集:

  • Y86-64程式暫存器識別符號:

  • Y86-64指令集的功能碼:

  • Y86-64例項:
    教材上例項程式碼:

gcc彙編及objdump反彙編後得到的x86-64程式碼:

教材中給出了Y86-64的彙編程式碼

  • x86-64程式碼和Y86-64的異同點。

  • YIS環境的構建與測試:

  • 邏輯閘:邏輯閘是數位電路的基本計算單元。它們產生的輸出,等於它們輸入位值的某個布林函式。包括:與(AND)、或(OR)和非(NOT)。

  • 組合電路:將狠多的邏輯閘組合成一個網,就能構建計算塊。

  • 組合電路和HCL布林表示式

  • 字級的組合電路和HCL整數表示式

  • 實現所有Y86-64指令所需要的計算可以被組織成6個基本階段。包括:取指、譯碼、執行、訪存、寫回合更新PC。

取指:取指階段從記憶體讀取指令位元組,地址為程式計數器的值。

譯碼:譯碼階段從暫存器檔案讀入最多兩個運算元,得到相應的值,並讀入指令指明的暫存器。

執行:執行階段,ALU要麼執行指令指明的操作,計算記憶體引用的有效地址,要麼增加或減少棧指標。

訪存:訪存階段可以將資料寫入記憶體,或者從記憶體讀出資料。

寫回:寫回階段最多可以寫兩個結果到暫存器檔案。

更新PC:將PC設定成下一條指令的地址。

  • SEQ的時序:
    SEQ的實現包括組合邏輯和兩種儲存器裝置:時鐘暫存器和隨機訪問儲存器。

組織計算原則:從不回讀。處理器從來不需要為了完成一條指令的執行而去讀由該指令更新了的狀態。

- 上週考試錯題總結

- 錯題1:

x86-64 Linux中,%rbp的值為0x108, pushq %eax後,%rbp的值為()

A .
0x100
B .
0x108
C .
0x110
D .
0x118

  • 答案:B
  • 解析:push不影響%rbp的值。

- 錯題2:

x86-64中,(%rsp)暫存器用來儲存執行時棧的結束位置(棧頂)。

- 錯題3:

Linux彙編中,銷燬棧幀的語句是( )

A .
movq %rbp, %rsp
popq %rbp
B .
leave
C .
enter
D .
pushq %rbp
movq %rsp, %rbp

  • 答案:A B
  • 解析:
    leave等價於:
    movq %rbp, %rsp
    popq %rbp