2021-2022第一學期20212302網路空間安全第三週自學總結
又一週網空導論課結束,使我再次體會了預習的重要性和自己實踐的必要性
比如pep9的下載和嘗試
第6章 低階程式設計語言與虛擬碼 第7章 問題求解與演算法設計
這部分的學習內容較之前而言,更加的抽象,而且真正引入了語言與程式碼。這也是今後要熟知的介面以及程式設計的重要一點。
第6章 低階程式設計語言與虛擬碼
機器語言是最低等級的程式語言。而虛擬碼能夠表示演算法。
6.1 計算機操作
計算機是能夠儲存(store)、檢索(retrieve)和處理(process)資料的可程式設計(programmable)的電子裝置。
6.2 機器語言
機器語言(machine language):由計算機直接使用的二進位制編碼指令構成的語言。
計算機必須參考的命令的真實清單並不存在,源於CPU嵌有相關指令。每條機器語言指令只能執行一個非常低階的任務。目前幾乎沒有程式是用機器語言編寫的。
每種型別的CPU都有它能理解的自己的機器語言。
虛擬機器(virtual computer):為了模擬真實機器的重要特徵而設計的假象機器。
可用位數決定了我們可以使用的記憶體大小。Pep/9中一條指令由兩部分組成,即8位的指令說明符(instruction)和可選的16位運算元說明符(operand specifier)。指令說明符說明了要執行什麼操作和如何解釋運算元的位置。運算元說明符存放的是運算元本身或者運算元的地址。3位的定址模式說明符(addressing mode specifier)表示了怎麼表示解析指令中的運算元部分。主要有立即定址(i)和直接定址(d)。沒有運算元的指令稱為一元指令(unary instruction)。
虛擬機器遵循的設計原理是(記憶體對映輸入/輸出memory-mapped I/O)
6.3 一個程式例項
我們必須使用儲存單一位元組的儲存指令。在機器語言執行之前,它必須被載入儲存器。這個任務通過一個叫做裝入程式(loader)的軟體工具來實現。模擬器在執行時遵守讀取-執行週期。
6.4 組合語言
組合語言(assembly language):一種低階語言,用助記碼錶示特定計算機的機器語言指令。
彙編器(assembler):把組合語言程式翻譯成機器程式碼的程式。
彙編器指令(assembler directive):翻譯程式使用的指令。
有時也被稱偽操作(pseudo-operation)。
註釋(comment):為程式讀者提供的解釋性文字。
由程式設計師解釋的內容。
我們從未直接使用過機器語言編寫程式來進行數值計算,因為Pep/9機器語言的輸出值被定義為單個字元。
分支(branch):指出執行下一條指令的指令。
標籤(label):對記憶體位置起的名字,可以將這個名字當作運算元。
我們可以重寫我們的AddNums程式來使用迴圈。
6.5 表達演算法
演算法(algorithm):解決方案的計劃或概要,或解決問題的邏輯步驟順序。
虛擬碼(pseudocode):一種表達演算法的語言。
虛擬碼的功能包括1.變數。2.賦值。3.輸入/輸出。4.選擇。5.重複。
布林表示式(Boolean expression):評價為真或為假的表示式。
一個虛擬碼語句可以被翻譯成多種組合語言語句。
桌面檢查(desk checking):在紙上走查整個設計。
6.6 測試
測試計劃就是一個文件,說明了要全面測試程式需要執行的次數以及執行程式使用的資料。每套輸入的資料值稱為測試用例(test case)。
程式碼覆蓋測試法(code-coverage testing):通過執行程式碼中的所有語句測試程式或子程式的測試方法。
資料覆蓋測試法(data-coverage testing):把程式碼作為一個暗箱,基於所有可能的輸入資料測試程式或子程式的測試方法。
測試結果實現(test-plan implementation):用測試計劃中規定的測試用例驗證程式是否輸出了預期的結果。
第7章 問題求解與演算法設計
7.1 如何解決未知問題
1.提出問題。2.尋找熟悉的情況。3.分治法。4.演算法。5.計算機問題求解過程(分析和說明階段、演算法開發階段、實現階段和維護階段)。6.方法總結。7.測試演算法。
7.2 帶有迴圈的演算法
迴圈控制變數(loop control variable)第一部分是初始化:迴圈控制變數初始化為某個初始值。第二部分是測試:迴圈控制次數是否已經達到特定值。第三部分是增量:迴圈控制變數以1遞增。
while迴圈被稱為前迴圈(pretest loop)。永遠不會終止的迴圈稱為一個無限迴圈(infinite loop)。迴圈中重複的次數是由迴圈自身內發生的事件控制的迴圈被稱為時間控制迴圈。包括時間初始化,事件必須被測試,事件必須更新。
巢狀結構(nested structure):控制結構另一個結構的結構,又稱為巢狀邏輯(nested logic)。
抽象步驟(abstract step):細節仍未明確的演算法步驟。
具體步驟(concrete step):細節完全明確的演算法步驟。
7.3 複雜變數
應用中的字母叫做字串。
陣列是同構專案的有名集合,專案在集合中的位置叫做引索。
7.4 搜尋演算法
AND是一種布林操作符,還包括OR、NOT。AND操作符只有在表示式都為假時返回FALSE,否則返回TRUE。NOT操作符改變表示式的值。
二分檢索(binary search):在有序列表中查詢專案的操作,通過比較操作排除大部分檢索範圍。
7.5 排序
氣泡排序是一種選擇排序法,只是在查詢最小值時採用了不同的方法。
7.6 遞迴演算法
當在一個演算法使用它自己時,這樣的演算法被稱為遞迴演算法。
遞迴(recursion):演算法呼叫他本身的能力。
每個遞迴演算法至少有兩種情況:基本情況和一般情況。所有遞迴解決方案的第一步都是確定尺寸係數。控制結構使用子程式。命名程式碼出現的地方被稱為呼叫單元。
如果問題陳述邏輯上分為兩種情況(基本情況、一般情況),則遞迴是一種可行的選擇。
7.7 幾個重要思想
對於設計的每個特定分層,設計者只考慮閾值相關的細節。
資訊隱蔽(information hiding):隱蔽模組的細節以控制對這些細節的訪問的做法。
抽象(abstraction):複雜系統的一種模型,只包括對觀察者來說的必須細節。
抽象是人們用來處理複雜事務的強有力的工具。
資料抽象(data abstraction):把資料的邏輯檢視和它的現實分離開。
過程抽象(procedural abstraction):把動作的邏輯檢視和它的現實分離開。
控制抽象(control abstraction):把控制結構的邏輯檢視和它的現實分離開。
控制結構(control structure):用於改變正常的順序控制流的語句。
**部落格內容借鑑了[https://www.cnblogs.com/MrHuan3/]()**