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
2018-2019-1 20165206 《信息安全系統設計基礎》第4周學習總結