Ch07 低階程式語言 1 7.4 程式範例 在螢幕上寫出 “Hello” 的程式 ( 參考...

Preview:

Citation preview

11

Ch07 低階程式語言

7.4 7.4 程式範例程式範例 在螢幕上寫出“在螢幕上寫出“ Hello” Hello” 的程式 的程式 (( 參考 參考 code/pep-p200.odc)code/pep-p200.odc)

22

Ch07 低階程式語言

Hello (1/3)Hello (1/3)

PC=PC=000000HH CharO CharO h#h#48, i48, i

33

Ch07 低階程式語言

Hello (2/3)Hello (2/3)

PC=PC=000033HH CharO CharO h#h#65, i65, i

44

Ch07 低階程式語言

Hello (3/3)Hello (3/3)

PC=PC=000F0FHH STOP STOP

55

Ch07 低階程式語言

Pep/7Pep/7 模擬器模擬器 模擬 模擬 Pep/7 Pep/7 虛擬機器的行為的程式虛擬機器的行為的程式 要執行一個程式之前,我們必須先以十六進制碼的方式,一個要執行一個程式之前,我們必須先以十六進制碼的方式,一個

位元組一個位元組地位元組一個位元組地 (( 兩位元組間須以空白分隔兩位元組間須以空白分隔 )) 輸入程式輸入程式

課本第 200 頁

66

Ch07 低階程式語言

機器碼機器碼

000

003

006

009

00C

00F

77

Ch07 低階程式語言

Pep7 Pep7 畫面畫面

88

Ch07 低階程式語言

另一種寫法另一種寫法 剛剛的程式是採 立即定址 方式輸出字母剛剛的程式是採 立即定址 方式輸出字母 另一種寫法另一種寫法 : : 可採直接定址方式 可採直接定址方式 (( 參考 參考 code/pep-p201.odc)code/pep-p201.odc)

指令由 指令由 11100000 => 1110000111100000 => 11100001 在程式碼後面插入資料在程式碼後面插入資料

10E1

E1

E1

E1

E1

11

12

13

14

48 65 6C 6C 6F012

000

003

006

009

00C

00F

99

Ch07 低階程式語言

Pep7 Pep7 畫面畫面

1010

Ch07 低階程式語言

加強版的 加強版的 Hello Hello 程式程式 輸出增加一個使用者輸入的字母輸出增加一個使用者輸入的字母 (( 參考 參考 code/pep-code/pep-

p202.odc)p202.odc)

設定輸入模式及輸出設定輸入模式及輸出

記憶體位址 0014 的內容於程式執行時會被重新載入使用者輸入的字母

1111

Ch07 低階程式語言

7.5 7.5 組合語言組合語言

組合語言(組合語言( Assembly languagesAssembly languages ):):指定助憶的 指定助憶的 (mnemonic) (mnemonic) 字母編碼字母編碼 (( 簡稱助憶碼簡稱助憶碼 )) 來代表每一來代表每一個機器語言指令個機器語言指令 程式設計師使用這些助憶碼編寫程式而不需再使用二程式設計師使用這些助憶碼編寫程式而不需再使用二

進制位元進制位元 組譯器組譯器(( assemblerassembler )這個程式就負責讀入每一個助憶)這個程式就負責讀入每一個助憶

符號形式的指令並將它轉譯成其所代表的機器語言符號形式的指令並將它轉譯成其所代表的機器語言

1212

Ch07 低階程式語言

圖 圖 7.57.5 組譯過程組譯過程

1313

Ch07 低階程式語言Pep/7Pep/7 組合語言組合語言CHAR 為 CHARACTER( 字母 ) 縮寫

DEC 為 DECIMAL ( 十進制 ) 縮寫

1414

Ch07 低階程式語言

虛擬運算碼虛擬運算碼有用的組譯器巨集指令動作( assembler directive ),也就是幾個組譯器的指令的縮寫

1515

Ch07 低階程式語言

Hello Hello 程式程式

寫出 “寫出 “ Hello”Hello” ,在組合語言中必須一次輸出一個字,在組合語言中必須一次輸出一個字母母

1616

Ch07 低階程式語言

HelloHello 程式 程式 (( 立即定址立即定址 ))

(( 參考 參考 code/pep-p206-1.odc code/pep-p206-1.odc 及 及 code/pep-p206-2.odccode/pep-p206-2.odc ))

1717

Ch07 低階程式語言

HelloHello 程式 程式 (( 直接定址直接定址 ))

(( 參考 參考 code/pep-p208.odc)code/pep-p208.odc)

1818

Ch07 低階程式語言

HelloHello 程式 程式 (( 直接定址直接定址 ++ 寫出使用者輸寫出使用者輸入字母入字母 ))

(( 參考 參考 code/pep-p209.odc)code/pep-p209.odc)

1919

Ch07 低階程式語言

另一新程式另一新程式 (( 加總加總 33 數字數字 ))

2020

Ch07 低階程式語言

虛擬碼虛擬碼

標籤:可用來命名變數或標示程式位置

2121

Ch07 低階程式語言

完成的程式完成的程式

第 212 頁

2222

Ch07 低階程式語言

我們完成的程式我們完成的程式

(( 參考 參考 code/pep-p212.odc)code/pep-p212.odc)

2323

Ch07 低階程式語言

執行結果執行結果

繼續執行同一程式會一直累加,若不想累加之前執行的結果,須清空記憶體

2424

Ch07 低階程式語言

7.6 7.6 其他重要議題其他重要議題

機器語言有很少的資訊隱藏,僅隱藏以下位元資機器語言有很少的資訊隱藏,僅隱藏以下位元資訊:以二的補數表示負整數訊:以二的補數表示負整數

組合語言可用組合語言可用虛擬碼虛擬碼 來命名一個區塊來命名一個區塊 ((BLOCKBLOCK)) 或一個字組或一個字組 ((WORDWORD)) ,, 或標示程式位置,這樣程式可直接跳到這個位置,這或標示程式位置,這樣程式可直接跳到這個位置,這在設計迴圈及 在設計迴圈及 IF-ELSE IF-ELSE 程式碼時尤其方便程式碼時尤其方便

2525

Ch07 低階程式語言

測試測試 測試計畫測試計畫::基本上是一件文件,當中指定要執行多基本上是一件文件,當中指定要執行多

少次及使用什麼樣的資料來測試程式,以達到程式少次及使用什麼樣的資料來測試程式,以達到程式的完整測試的完整測試 每一組資料就叫做一個測試個案 每一組資料就叫做一個測試個案 (test case)(test case)

測試方法測試方法 涵蓋碼(涵蓋碼( code-coveragecode-coverage ))的測試方法在設計測試個的測試方法在設計測試個

案時,要確保程式中所有的程式碼都要被執行到,又叫案時,要確保程式中所有的程式碼都要被執行到,又叫透明盒子測試 透明盒子測試 (clear-box test)(clear-box test)

涵蓋資料測試 (涵蓋資料測試 ( data-coverage testingdata-coverage testing ))的測試方法的測試方法在設計測試個案時,要確保所有可能資料範圍的邊界值在設計測試個案時,要確保所有可能資料範圍的邊界值都涵蓋到,又叫黑盒子測試 都涵蓋到,又叫黑盒子測試 (black-box test)(black-box test)

2626

Ch07 低階程式語言

測試測試 (( 以以加總加總 33 數字為例數字為例 ))

3 3 個值須涵蓋正負數,且需測試加總結果在 個值須涵蓋正負數,且需測試加總結果在 2 2 個 個 byte byte 所能表示的最大值 所能表示的最大值 (2(21515 -1) -1) 及最小值及最小值 (-2(-21515))

都運作正常都運作正常 測試 測試 32767, -1, +132767, -1, +1 測試 測試 32766, 1, 1 (32766, 1, 1 ( 溢位溢位 ))

2727

Ch07 低階程式語言

COMPA limit, iCOMPA limit, i :比較 :比較 A A 暫存器內容與 暫存器內容與 limit limit 的值的值 當 當 A A 暫存器內容內容 暫存器內容內容 < limit < limit 的值,會設定狀態位元 的值,會設定狀態位元 N N 的值為 的值為 11 當 當 A A 暫存器內容內容 暫存器內容內容 = limit = limit 的值,會設定狀態位元 的值,會設定狀態位元 Z Z 的值為 的值為 11

BRLT Case2: BRLT Case2: 當狀態位元 當狀態位元 N (N ( 表 表 NegativeNegative ,負,負 ) ) 的值為 的值為 11 ,則將程式計數器暫存器 ,則將程式計數器暫存器 (Program Counter (Program Counter ,, PC) PC) 設為設為運算元 運算元 Case2 (Case2 ( 當 當 N N 為 為 1 1 表示 表示 AA 暫存器的值小於 暫存器的值小於 0)0)

BREQ Case1:BREQ Case1: 當狀態位元 當狀態位元 Z (Z ( 表 表 ZeroZero ,零,零 ) ) 的值為 的值為 11 ,,則將程式計數器暫存器 則將程式計數器暫存器 (Program Counter (Program Counter ,, PC) PC) 設為運設為運算元 算元 Case1 (Case1 ( 當 當 Z Z 為 為 1 1 表示 表示 AA 暫存器的值等於 暫存器的值等於 0)0)

Example programExample program code/Pr0701.odc code/Pr0701-2.odc code/Pr0701-3.odccode/Pr0701.odc code/Pr0701-2.odc code/Pr0701-3.odc (( 比大小,比大小, IF-ELSE)IF-ELSE) code/Pr0702.odc (WHILE)code/Pr0702.odc (WHILE)

狀態位元相關組合語言碼狀態位元相關組合語言碼 (( 補充教材補充教材 ))

2828

Ch07 低階程式語言code/Pr0701.odccode/Pr0701.odc

2929

Ch07 低階程式語言 code/Pr0701-2.odccode/Pr0701-2.odc

3030

Ch07 低階程式語言code/Pr0701-3.odccode/Pr0701-3.odc

3131

Ch07 低階程式語言 code/Pr0702.odccode/Pr0702.odc

3232

Ch07 低階程式語言

道德的議題道德的議題::軟體侵權,版權軟體侵權,版權

研究指出,研究指出,在在 20002000 年一年中,全世界損失在盜版年一年中,全世界損失在盜版軟體上的金額有美金 軟體上的金額有美金 $115$115 億元億元

開放原始碼的擁護者認為程式的原始碼必須要公開放原始碼的擁護者認為程式的原始碼必須要公開出來開出來

對於不是開放程式碼的軟體,從許多角度來看,對於不是開放程式碼的軟體,從許多角度來看,尊重其軟體版權是非常重要的尊重其軟體版權是非常重要的

3333

Ch07 低階程式語言

勘誤勘誤 第 第 202 202 頁,倒數第 頁,倒數第 5 5 列,識別子 英文 為 列,識別子 英文 為 identifier identifier ,改,改翻譯為 變數名稱翻譯為 變數名稱

第 第 212 212 頁程式碼的圖, 頁程式碼的圖, num1num1 、、 num2num2 、、 num3 num3 應該都是 應該都是 d#2 (d#2 ( 而非 而非 d#1)d#1) ,因此也造成其於記憶體位址 ,因此也造成其於記憶體位址 00140014 、、 00170017 、、 001A001A 、、 001D 001D 機器碼也都要修改,機器碼也都要修改,

參考講義第 參考講義第 22 22 頁頁

第 第 214 214 頁,最後一列,最小值應為 頁,最後一列,最小值應為 -2-21515

Recommended