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

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

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

教材學習內容總結

ISA

  • 概念:

一個處理器支援的指令和指令的位元組級編碼稱為它的指令集體系結構ISA。

雖然每個廠商製造的處理器效能和複雜性不斷提高,但是不同型號在ISA級別上都保持著相容。因此,ISA在編譯器編寫者和處理器設計人員之間提供了一個概念抽象層。

這個概念抽象層即ISA模型:CPU允許的指令集編碼,且順序地執行指令,也就是先取出一條指令,等到她執行完畢,再開始下一條。然而,現代處理器的實際工作方式可能跟ISA隱含的計算模型大相徑庭。通過同時處理多條指令的不同部分,處理器可以獲得較高的效能。但其必須對外表現出符合ISA模型的執行結果。

在電腦科學中,用巧妙的方法在提高效能的同時,又保持一個更簡單、更抽象模型的功能,這種思想是眾所周知的(抽象)。

  • 指令集:

一個ISA可能包含多個指令集

通常會把CPU的擴充套件指令集稱為”CPU的指令集”(因為基本的,類似加減的指令似乎是必須被CPU所支援的指令)。每款CPU在設計時就規定了一系列與其硬體電路相配合的指令集。

80x86指令系統,指令按功能可分為以下七個部分。

(1) 資料傳送指令。
  

(2) 算術運算指令。
  

(3) 邏輯運算指令。
  

(4) 串操作指令。
  

(5) 控制轉移指令。
  

(6) 處理器控制指令。
  

(7) 保護方式指令。

x86 指令編碼的核心是:Opcode、ModRM 以及 SIB。Opcode 提供指令的操作碼,ModRM 及 SIB 提供運算元的定址模式。

RISC(精簡指令集計算機)和CISC(複雜指令集計算機)是當前CPU的兩種架構。它們的區別在於不同的CPU設計理念和方法。

早期的CPU全部是CISC架構,它的設計目的是要用最少的機器語言指令來完成所需的計算任務。比如對於乘法運算,在CISC架構的CPU上,您可能需要這樣一條指令:MUL ADDRA, ADDRB就可以將ADDRA和ADDRB中的數相乘並將結果儲存在ADDRA中。將ADDRA, ADDRB中的資料讀入暫存器,相乘和將結果寫回記憶體的操作全部依賴於CPU中設計的邏輯來實現。這種架構會增加CPU結構的複雜性和對CPU工藝的要求,但對於編譯器的開發十分有利。比如上面的例子,C程式中的a*=b就可以直接編譯為一條乘法指令。今天只有Intel及其相容CPU還在使用CISC架構。

RISC架構要求軟體來指定各個操作步驟。上面的例子如果要在RISC架構上實現,將ADDRA, ADDRB中的資料讀入暫存器,相乘和將結果寫回記憶體的操作都必須由軟體來實現,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。這種架構可以降低CPU的複雜性以及允許在同樣的工藝水平下生產出功能更強大的CPU,但對於編譯器的設計有更高的要求。

Y86:

  • halt
    這個指令將會終止指令的執行。

  • nop
    這是一個佔位指令,他不做任何事,後續為了實現流水線,它有一定的作用。

  • xxmovl
    這是一系列的資料傳送指令,其中r代表暫存器,m代表儲存器,i代表立即數。比如rrmov指令,則代表將一個暫存器的值,賦給另外一個暫存器。

  • opl
    操作指令,比如加法,減法等等。

  • jxx
    條件跳轉指令,根據後面的條件進行跳轉。

  • cmovxx
    條件傳送指令,後面的xx代表的是條件.特別的是,條件傳送只發生在兩個暫存器之間,不會將資料傳送到儲存器。

  • call與ret
    方法的呼叫和返回指令.一個將返回地址入棧,並跳到目標地址。一個將返回地址入PC,並跳到返回地址。

  • push和pop
    入棧和出棧操作

  • Y86異常
    對Y86來說,程式設計師可見的狀態中就有stat狀態碼,它標誌了程式執行的狀態。Y86需要有能力根據stat去做一些處理。捕獲為了簡單起見,這裡除了正常執行之外,都將停止指令的執行。真實當中,會有專門的異常處理程式。

Y86有四種不同的狀態碼:AOK(正常),HTL(執行halt指令),ADR(非法地址)和INS(非法指令)。

教材學習中的問題和解決過程

(一個模板:我看了這一段文字 (引用文字),有這個問題 (提出問題)。 我查了資料,有這些說法(引用說法),根據我的實踐,我得到這些經驗(描述自己的經驗)。 但是我還是不太懂,我的困惑是(說明困惑)。【或者】我反對作者的觀點(提出作者的觀點,自己的觀點,以及理由)。 )

  • 問題1:Y86和X86的區別
  • 問題1解決方案:

有時候Y86需要兩條指令來達到X86一條指令就可以達成的目的。比如對於X86指令中的addl$4,%ecx這樣的指令,由於Y86當中的addl指令不包含立即數,所以Y86需要先將立即數存如暫存器,即使用irmovl指令,然後再使用addl來處理加法運算

其他(感悟、思考等,可選)

86就是X86的一個縮減版,他的目的就是以簡單的結構來實現一個處理器,幫助我們瞭解處理器的設計和實現。

上週班課錯題