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

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

教材學習內容總結

程式設計師可見的狀態: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指令集的功能碼:

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

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

組合電路和HCL布林表示式

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

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

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

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

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

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

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

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

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

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

上週考試錯題總結

1.

下面的跳轉指令與ZF有關的是()
A .jmp
B .je
C .js
D .ja
E .jb
F .jbe
解析:

2.

假設用ADD指令完成C表示式t=a+b的功能,有關條件碼暫存器的說法正確的是()
A .若t==0 ,則ZF=1
B .若t<0, 則CF=1
C .若t<0, 則SF=1
D .若(a<0==b<0)&&(t<0 != a<0), 則OF=1
E .若(a<0==b<0)&&(t<0 != a<0), 則CF=1
F .leaq指令不影響條件碼暫存器
G .cmp指令不影響條件碼暫存器
解析:課本p135
ZF:零標誌。最近的操作得出的結果為0,故當t==0,ZF=1,A對
CF:進位標誌。最近的操作使最高位產生了進位。B E不對
SF:符號標誌。最近的操作得到的結果為負數。
OF:溢位標誌。最近的操作導致一個補碼溢位——正溢位或負溢位。(a<0==b<0)&&(t<0!=a<0) 有符號溢位,故選D
leaq指令不改變任何條件碼,選F
CMP指令根據兩個運算元之差來設定條件碼。除了只設置條件碼而不更新目的暫存器之外,與SUB指令的行為是一樣的。

3.

x86-64 Linux中,有關MOV,下面正確的是()

A .movw $0x50, %eax
B .movw %bp, %sp
C .movl ($1234), ($2345)
D .movb $10, (%rsp)
E .movq %rax, 4(%rbp)
F .movb (%rdi, %rcx), %ah
解析:課本p122 ,p123, 注意記憶體之間不能直接mov,要用暫存器中轉。b,w,l,q表示的長度要和暫存器匹配。