2021-2022-1 20211420《資訊保安專業導論》第五週學習總結

20211420楊謹徽發表於2021-10-21

作業資訊

|作業屬於|2021-2022-1資訊保安專業導論
|作業要求|2021-2022-1資訊保安專業導論第五週作業

  • 學習目標
    • Pep/9虛擬機器
    • 機器語言與組合語言
    • 演算法與虛擬碼
    • 測試:黑盒,白盒

|班課作業連結|
無窮的技藝
尋找你的黑客偶像
用或非門實現其他門

教材學習內容總結

通過學習第6章內容,我知道了以下內容:

  • 機器語言和組合語言的區別
    • 機器語言是由計算機直接使用二進位制編碼指令構成的語言
    • 組合語言是一種低階語言,用助記碼錶示特定計算機的機器語言指令
  • Pep/9的基本特性
    • Pep/9的記憶體單元由65536位元組的儲存空間構成
    • Pep/9有七個暫存器(以下為其中三個)
      • 程式計數器(PC),其中包含下一條即將被執行的指令的地址
      • 指令暫存器(IR),其中包含正在被執行的指令的一個副本
      • 累加器(A),用來儲存資料和運算的結果
    • 指令格式:一條指令由兩部分構成,即8位的指令說明符和(可選的)16位的運算元說明符。Pep/9的指令長度為1位元組或3位元組。
      • 指令說明符的格式是操作程式碼(即操作碼),長度為4位到8位不等,教材中均是4位,因此第五位是暫存器。教材中均是0,因為例子中使用的都是A暫存器(累加器)。後面3位是定址模式說明符,其中000是立即定址,001是直接定址。沒有運算元(要處理的資料)的指令稱為一元指令,長度為1位元組
  • 立即定址和直接定址的區別
    參考連結

立即定址方式:
運算元就包含在指令中。作為指令的一部分,跟在操作碼後存放在程式碼段。
這種運算元成為立即數。立即數可以是8位的,也可以是16位的。
例如:
指令: MOV AX,1234H
則: AX = 1234H
直接定址方式:
運算元在暫存器中,指令直接包含有運算元的有效地址(偏移地址)
注:運算元一般存放在資料段
所以運算元的地址由DS加上指令中直接給出的16位偏移得到。如果採用
段超越字首,則運算元也可含在資料段外的其他段中。
例如:
MOV AX,[8054]
如(DS) = 2000H,
則執行結果為(AX) = 3050H
(實體地址=20000+8054=28054H)
28054H裡的內容為3050H


根據參考資料,我對這兩種模式的理解就是:
立即定址直接就能得到將要執行的資料,而直接定址要先獲得這個資料的地址,然後再得到這個資料。

  • 編寫一個簡單的機器語言程式(如圖)
  • 建立和執行組合語言程式的步驟
    1.畫程式框圖
    2.編寫程式碼
    3.編譯程式碼(若編譯無法進行就需要檢查程式碼是否有誤)
    4.執行程式碼/程式
  • 編寫一個簡單的組合語言程式(如圖)
  • 給彙編器的指令和要翻譯的指令的區別
    • 給彙編器的指令:組合語言程式被翻譯成機器程式碼
    • 要翻譯的指令:虛擬碼被翻譯成Pep/9語句
  • 執行一個演算法和開發一種演算法的區別
    • 執行一個演算法:執行已經寫好的某一個演算法(演算法是現成的,只需要執行就行)
    • 開發一種演算法:從0開始編寫一種演算法,從無到有,並且還要對寫好的演算法進行走查和測試,看演算法是否有問題
  • 表達演算法時使用的虛擬碼結構
# 變數:引用記憶體中儲存值的位置
# 賦值:給變數一個儲存值
Set sum to 0
# 把一個值存放到變數sum中
sum <- 1
# 輸入/輸出:從外界輸入資料值,再輸出到螢幕上
Write "Enter the number of values to read and sum"
Read sum
# 選擇:選擇執行與否
# if-then
//Read and sum three numbers
IF (sum<0)
    Print error message
ELSE
    Print sum
//Whatever comes next
# 或者if-then-else
//Read and sum three numbers
IF (sum<0)
    Print error message
ELSE
    Print sum
//Whatever comes next
# 重複:重複執行指令
Set limit to number of values to sum
WHILE (counter < limit)
    Read num
    Set sum to sum + num
    Set counter to counter + 1
//Rest of program

  • 使用虛擬碼描述演算法
Set sum to 0
Read num1
Set sum to sum + num1
Read num2
Set sum to sum + num2
If (sum < 0)
    Write "Error"
ELSE
    Write sum
# 該虛擬碼表示輸入兩個值求和,若和為負值,則輸出錯誤

  • 兩種測試方式
    • 程式碼覆蓋測試法明箱測試法):該測試用例會確保程式中的每條語句都能被執行到,且測試者能看到程式碼
    • 資料覆蓋測試法暗箱測試法):該測試用例會確保包括允許使用的資料的邊界值,該方法基於輸入的資料
  • 如何為簡單的組合語言程式設計和實現測試方案
    使用明箱測試法和暗箱測試法結合,執行測試計劃中列出的所有測試用例,並記錄執行結果,若結果與預期不符,必須重新審查設計,找出並糾正其中的錯誤(測試計劃實現)。

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

問題1:不明白何為立即定址和直接定址
解決過程:儘管書上說的概念比較清楚,但是我仍然不明白Pep/9中是如何進行的,因此我上雲班課看了一下有沒有其他同學也有這個問題,然後王其同學就問了這個問題,學長給了他一個連結,我點進去一看,發現裡面的解釋還是很模糊,於是自己重新上網查詢資料,當然就找到一篇解釋比較清楚一點的文章
問題2:在學習python中的類時,不清楚構造方法和例項方法的區別
解決過程:在網上找到一篇文章,這篇文章就比較清楚的說明了兩種方法的區別並有程式碼例項,當然我還找到了另一篇文章,裡面不僅僅講了這兩種方法,還有類方法和靜態方法的一些內容,我更是對方法有了深入的瞭解

程式碼除錯中的問題和解決過程

問題1:學習九九乘法表如何運用python實現時,發現自己執行的結果為一行一個算式
解決過程:
程式碼如下

for i in range(1, 10):
    for j in range(1, i):
        print(str(j) + "×" + str(i) + "=" + str(i * j))
    print(str(i) + "×" + str(i) + "=" + str(i * i))

執行結果如圖
然後我通過搜尋資料得知,在第三行的print中還應當輸入一個換行符,所以修改的程式碼如下

for i in range(1, 10):
    for j in range(1, i):
        print(str(j) + "×" + str(i) + "=" + str(i * j), end=' ')
    print(str(i) + "×" + str(i) + "=" + str(i * i))

執行結果如圖
當然,不只是這一種方法能實現,還有下面一種方法實現九九乘法表

for i in range(1, 10):
    for j in range(1, i + 1):
        print(str(j) + "×" + str(i) + "=" + str(i * j) + "\t", end='')
    print('')

執行結果如圖

問題2:在Pep/9寫兩數求和的程式時,執行的時候輸入的兩數沒法得到和,如圖

解決過程:
重新回到教材中,發現我所寫的程式碼缺少第一行的BR和main,才導致輸入的兩數無法求和,只需要把BR和main加在第一行就可以解決問題了

程式碼託管


上週考試錯題總結

1.Which of the following is a unit in an abstract mathematical system subject to the laws of arithmetic?
以下哪一項是受算術法則約束的抽象數學系統中的一個單元?
A.Number
B.Natural number
C.Integer
D.Negative number
E.Rotional number
答案應當選A,只要是數都會受到算術法則的約束
2.What is the largest digit in the decimal number system?
A.0
B.9
C.10
D.15
E.16
本題應選B,因為十進位制數每個位上只能是0到9,因此最大的數為9
3.Which number represents the value of the base in every number system?
哪個數字代表每個數字系統中的基數值?
A.0
B.1
C.10
D.11
E.100
答案應為C,因為10代表1*R(基數)+ 0=基數
4.The value of each position in a number system is determined by subtracting the base from the position number.
數字系統中每個位置的值是通過從位置編號中減去基數來確定的。
本題錯誤,並不是通過減去基數確定
5.How many things can be represented using three bits?
有多少東西可以用三位來表示?
A.3
B.4
C.6
D.8
E.12
本題選D,相關資料
6.Which of the following characters are not represented in the ASCll character set?
以下哪些字元不在ASCL字符集中表示?
A. Uppercase letters(A-Z)A.大寫字母(A-Z)
B. Lowercase (a-z)B.小寫字母(a-z)
C. Punctuation such as a period or commaC.標點符號,如句號或逗號
D. Cyrillic charactersD.西里爾文字
E. Nonprintable characters such as ESC (escape) and DEL(delete)E.不可列印字元,如ESC(轉義)和DEL(刪除)
應當選擇D
7.Recording the voltage level of an audio signal at regular intervals is called what?
定期記錄音訊訊號的電壓水平稱為什麼?
A.SamplingA.抽樣
B. Peak analysisB.峰值分析
C. Pulse-code modulationC.脈衝編碼調製
D. MP3 analysisD.MP3分析
E. CD simulationE.CD模擬
本題應選擇A
8.It is possible to represent four things with two bits.
可以用兩個位表示四個事物。
本題正確
9.Negative numbers cannot be represented using the fixed-sized number representation technique
負數不能使用固定大小的數字表示技術表示
本題錯誤
10.Audio data is often represented on a computer by sampling the continuous signal that represents a
音訊資料通常通過對錶示音訊的連續訊號進行取樣來在計算機上表示
本題正確

學習感受

通過本週的學習,我認為我在理解知識上還是有一些問題,所以如果我有不懂的問題一定得多問,多問多思考,再在網上找資料理解。總體來說,本週學習的知識還是有一定難度的,所以自己得加油了

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 50/50 4/4 20/20
第二週 100/150 2/6 15/35
第三週 150/300 2/8 12/47
第四周 1000/1300 5/13 36/83
第五週 300/1600 4/17 30/113

計劃學習時間:24小時
實際學習時間:30小時
改進情況:本週我的閱讀速度仍然有所提升,但是知識理解還是有點問題,應當加強這一方面

參考資料

《電腦科學概論》
[《看漫畫學Python》]

相關文章