另一種程式寫法:直接定址輸出字母

格式
pdf
大小
1.32 MB
頁數
9
作者
cjou
收藏 ⬇️ 下載檔案
提示: 文件格式为 pdf,轉換可能會出現排版或格式的些許差異,請以實際檔案為準。
此檔案建立於 2010-12-06,离现在 14 323 天,建議確認內容是否仍然適用。
PDF 加载中...
background image

另一種程式寫法 (補充教材)

另一種程式寫法 (補充教材)

• 課本的程式是採

立即定址

方式輸出字母

• 另一種寫法: 可採

直接定址

方式

– 指令由 11100000 (E0

H

) =>  11100001 (E1

H

)

(

H

)

(

H

)

– 在程式碼後面插入資料

(參考 code/pep-p201.odc)

輸出 010

000

003

E1

E1

10

11

輸出 010

H

地址的內
容所代表

003

006

E1

E1

E1

12

11

13

容所代表
的字元

48

65

009

00C

E1

E1

00

13

14

010

H

址的內容

1

Ch07 低階程式語言

6C

6C

6F

012

48

65

00F

012

00

址的內容
為 48

H

作業練習-2

作業練習-2

• 請參考前頁,以

直接定址

方式利用 Pep/7 列印出

• 請參考前頁,以

直接定址

方式利用 Pep/7 列印出

Hello, 你的英文名字

2

Ch07 低階程式語言

Hello 程式變形 (補充教材)

Hello 程式變形 (補充教材)

• Hello 後增加一個由使用者互動輸入的字元

• Hello 後增加一個由使用者互動輸入的字元

(參考 code/pep-p202.odc)

000

003

006

CHARI
輸入的字

009

00C

輸入的字
元儲存到
014 

E0

00

00

012

00C

00F

012

D9

0

0

14

014

H

憶體位置

3

Ch07 低階程式語言

E0

00

00

012

012

015

00

這裡是
014

H

7 5 組合語言

7.5 組合語言

• 組合語言 (assembly language)

• 組合語言 (assembly language)

– 指定一些助憶的(mnemonic)字母編碼 (簡稱助憶碼)來代

表每一個機器語言指令。

表每一個機器語言指令。

– 程式設計師使用這些助憶碼編寫程式而不需再使用二

進制位元

進制位元

– 組譯器 (assembler) 

這個程式就負責讀入每一個助憶符

號形式的指令,然後轉譯成相對的機器語言形式。

4

Ch07 低階程式語言

background image

Pep/7組合語言

組合語言

5

Ch07 低階程式語言

縮寫:CHAR 為 CHARACTER(字母)DEC  為 DECIMAL (十進制)為 hexidecimal 
為 character為 immediate在 “,” 後為 direct, 在 “,” 前是 decimal

虛擬運算碼

虛擬運算碼

定義:組譯器巨集指揮動作(assembler directive),也就
是請組譯器完成的準備動作,以便利組合語言程式的執行,在

是請組譯器完成的準備動作

以便利組合語言程式的執行

Pep7 有 4 個虛擬運算碼 (其中 .WORD  有 2 種運算元表示
方式),都是以 `.' 開始:

BLOCK:區塊,占用記憶體位元組數目由運算元的值決定
WORD:字語:占用記憶體位元組數目固定為 個位元組,適

6

Ch07 低階程式語言

WORD:字語:占用記憶體位元組數目固定為 個位元組,適

用於需要給訂

初始值

Hello程式(7-4)的組合語言版本 (1)

Hello程式(7-4)的組合語言版本 (1)

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

(立即定址模式)

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

7

Ch07 低階程式語言

Hello程式(7-4)的組合語言版本 (2)

Hello程式(7-4)的組合語言版本 (2)

• (直接定址模式)

• (直接定址模式)

(參考 code/pep-p208.odc)

8

Ch07 低階程式語言

background image

Hello程式(7-4)的組合語言版本(3)

Hello程式(7-4)的組合語言版本(3)

• 執行了Pep/7下拉選單的Assemble選項之後的結果

• 執行了Pep/7下拉選單的Assemble選項之後的結果

顯示於下面的視窗畫面:

9

Ch07 低階程式語言

Hello程式(7 4)的組合語言版本(4)

Hello程式(7-4)的組合語言版本(4)

• 我們也可以點選Pep/7下拉選單下的Assembler

• 我們也可以點選Pep/7下拉選單下的Assembler 

Listing選項,以得到組譯器列表如下圖所示。

10

Ch07 低階程式語言

H ll 程式變形 的組合語言版

(補充教材)

Hello 程式變形 的組合語言版

(補充教材)

(參考 code/pep p209 odc)

(參考 code/pep-p209.odc)

11

Ch07 低階程式語言

一個加總程式範例 (1)

一個加總程式範例 (1)

需求:請輸入 個整數,並計算其加總所得數字,

需求:請輸入 個整數 並計算其加總所得數字

需要 個放整數的記憶體位置給 輸
入值及加總結果 num1, num2, 
num3, sum
1.

將 sum 的記憶體內容先設為 0
載入到 ALU

2.

輸入 num1,再利用 ADDA 
ALU 內容(0)與 num1 加起來

會存有

(ALU 會存有 num1 )

3.

輸入 num2,再利用 ADDA 
ALU 內容與 num2 加起來
(ALU 存有

1

2結果)

(ALU 存有 num1 + num2結果)

4.

輸入 num3,再利用 ADDA 
ALU 內容與 num3 加起來
(ALU 存有三數加總結果)

12

Ch07 低階程式語言

(ALU 存有三數加總結果)

5.

將 ALU結果以 STOREA 存到
sum的記憶體位置

background image

一個加總程式範例 (2)

一個加總程式範例 (2)

虛擬運算碼:

虛擬運算碼:

標籤:可用來命名

變數

或標示程式位置,以變數名

稱開頭後加上 ‘:’,如 sum, num1, num2, num3
Main 為所有程式的開始執行位置之標籤

13

Ch07 低階程式語言

Main 為所有程式的開始執行位置之標籤

一個加總程式範例 (3)

一個加總程式範例 (3)

無條件跳躍

預備
動作

動作

開始
執行

執行
標籤

14

Ch07 低階程式語言

一個加總程式範例 (4)

15

Ch07 低階程式語言

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

執行結果

執行結果

繼續執行同一程式會一直累加,若不想累加之前執行的結果,須
以如下方式清空記憶體 內容,再重新

Assemble/Load/Execute

以如下方式清空記憶體 內容,再重新

Assemble/Load/Execute

16

Ch07 低階程式語言

background image

作業練習-3

作業練習-3

• 請參考課本的加總程式範例,改寫成只需要 2 個放

• 請參考課本的加總程式範例,改寫成只需要 2 個放

整數的記憶體位置給輸入值 (num)及加總結果 (sum)

提示:因為本例題的各個輸入值加到加總後就沒有用了

– 提示:因為本例題的各個輸入值加到加總後就沒有用了,

因此,可以讓原程式的 num1, num2, num3 共用一個記憶
體位置 num,也就是將原來的

“DECI num1, d” 、 “DECI

體位置 num 也就是將原來的

DECI num1, d

DECI 

num2, d”、 “DECI num3, d” 都改為 “DECI num,d” ,記得

虛擬運算碼部分也要將 3 個虛擬運算碼改成 1 個

課本習題第 16-20 題 (手寫)

課本習題第 16 20 題 (手寫)

請於 12 月 日前將 題作業練習的程式碼繳交至教學支援平台

17

Ch07 低階程式語言

請於

月 日前將 題作業練習的程式碼繳交至教學支援平台

在組合語言中做決策(作判斷)的方法

在組合語言中做決策(作判斷)的方法

Branch 及 Compare 的縮寫,EQ 為 EqualLT 為 Less Than

本例為 008B

H

範例:

18

Ch07 低階程式語言

在組合語言中做決策(作判斷)的方法

在組合語言中做決策(作判斷)的方法

• COMPA   limit, 

d

:比較 A 暫存器內容與 limit  變數的值

,

比較

暫存器內容與

變數的值

– 當 A 暫存器內容 < limit 的值,會設定狀態位元 N  的值為 1
– 當 A 暫存器內容 = limit 的值,會設定狀態位元 Z  的值為 1

當狀態位元

負 的值為

• BRLT  Case2: 當狀態位元 N (表 Negative,負) 的值為 1,

則將程式計數器暫存器 (Program Counter ,PC) 設為運算
元 C

2 標籤的記憶體位址

元 Case2 標籤的記憶體位址

– 註:當 N 為 1 表示 A暫存器的值小於 0

BREQ C

1 當狀態位元 Z (表 Z

零) 的值為 1 則將

• BREQ  Case1:當狀態位元 Z (表 Zero,零) 的值為 1,則將

程式計數器暫存器 (Program Counter ,PC) 設為運算元
Case1標籤的記憶體位址

Case1標籤的記憶體位址

– 註:當 Z 為 1 表示 A暫存器的值等於 0

19

Ch07 低階程式語言

在組合語言中做決策(作判斷)的方法

在組合語言中做決策(作判斷)的方法

• 假設需求改為:當總和sum為正數時就印出sum,如果sum

為負值則印出一個錯誤訊息

為負值則印出一個錯誤訊息。

if 敘述,其基本型式(注意縮排)為:
if 條件

if  條件

條件成立時的操作

else

條件不成立時的操作

• 上面這個 If 敘述展開成為組合語言的演算法的形式如下:

條件不成立時的操作

• 上面這個 If 敘述展開成為組合語言的演算法的形式如下:

if 敘述的變形,其基本型式為:
if 條件

if  條件

條件成立時的操作

不管條件成不成立,都進行的操作

20

Ch07 低階程式語言

background image

在組合語言中做決策的方法範例程式

在組合語言中做決策的方法範例程式

21

Ch07 低階程式語言

因為 硬體自動設定 及 Z,所以可以直接BRLT 

一個具有迴圈的程式

一個具有迴圈的程式

迴圈:程式可以反覆執行同一段程式碼若干次

做法

讓 BR (或 BREQ BRLT COMPA) 等可以

做法:

讓 BR (或 BREQ, BRLT, COMPA)  等可以

跳回至前面的標籤

假設需求為:請先輸入要加總的整數的個數(每次執行時才決
定,不是事先決定的),再請使用者一個一個輸入這些整數,
加總後列印其總和

加總後列印其總和

while 敘述 的類型 (要注意縮排)

hil

diti

while  condition 

statement1
statement2
statement3

statement3

22

Ch07 低階程式語言

一個具有迴圈的程式

一個具有迴圈的程式

• 第一步是預備動作,先宣告我們會使用到的變數:

limit, number及sum。

每次進行迴圈時,內部的做法:

23

Ch07 低階程式語言

一個具有迴圈的程式

一個具有迴圈的程式

24

Ch07 低階程式語言

background image

一個具有迴圈的程式

25

更多範例程式 (補充教材)

更多範例程式 (補充教材)

• 比大小(使用 if 的概念)

比大小(使用 if 的概念) 

– code/Pr0701.odc :跟 100 比大小,大的話輸出 “high” ,否則輸出

“low”

– code/Pr0701-2 odc :增加 等於 100 時輸出 “eq” 的檢查

– code/Pr0701-2.odc :增加 等於 100 時輸出 eq  的檢查
– code/Pr0701-3.odc: 較簡潔的寫法

• 迴圈 (while)

– code/Pr0702.odc :警車追贓車

26

Ch07 低階程式語言

code/Pr0701.odc

因為 limit 為常數,此
處才能用 i(立即模式)

27

Ch07 低階程式語言

處才能用 i(立即模式), 

code/Pr0701 2 odc

code/Pr0701-2.odc

28

Ch07 低階程式語言

background image

code/Pr0701-3.odc

29

Ch07 低階程式語言

code/Pr0702.odc

30

Ch07 低階程式語言

作業:

12/12

交到教學支援平台

作業:

12/12

交到教學支援平台

1. 請輸入 3 個整數,分別存在 num1, num2, num3 這 3 

,

,

個變數,請計算出 num1 – num2 + num3 的值,輸出
結果。如果 結果為正,輸出 “++”,如果結果為負
,輸出 “--”,如果結果為 0,輸出 “0” (註:減法的
部分,可用 SUBA  助憶符號))

2. 請輸入一個正整數值 n,計算 1 + 2 + … + n 的總和

說明:可以參考 第 24 頁範例(一個具有迴圈的程式),但

說明:可以參考 第 24 頁範例(一個具有迴圈的程式) 但
本程式

在迴圈中

不用輸入值,直接加上 limit 的值即可

3

課本習題第 41 42 題,找出程式碼的錯誤,並且加

3. 課本習題第 41, 42 題

找出程式碼的錯誤

並且加

以訂正 (第 41 題以文字檔繳交,第 42 題以程式碼
繳交)

繳交)

31

Ch07 低階程式語言

7 6 其他重要的關聯:抽象化與測試

7.6 其他重要的關聯:抽象化與測試

• 機器語言有很少的資訊隱藏,僅隱藏以下位元資訊

:以二的補數表示負整數

• 組合語言可用抽象化概念隱藏一些細節

組合語言可用抽象化概念隱藏一些細節

–用變數來命名一個區塊(BLOCK)或一個字組(WORD)
–標示程式位置,這樣程式可直接跳到這個位置,這在設

標示程式位置,這樣程式可直接跳到這個位置,這在設

計迴圈及 IF-ELSE 程式碼時尤其方便

• 一個

測試計畫 (test plan)

基本上是一件文件,當中

指定要執行多少次及使用什麼樣的資料來測試程式

指定要執行多少次及使用什麼樣的資料來測試程式
以達到程式的完整測試。每一組輸入資料值就叫作
一個測試樣本 (test case)。

32

Ch07 低階程式語言

一個測試樣本 (test case)。

background image

抽象化與測試

抽象化與測試

• 測試過程中有幾種測試方法可以依循

• 測試過程中有幾種測試方法可以依循

– 一種稱為

涵蓋碼 (code-coverage)

的方法是設計測試樣

本時要確保程式中所有的敘述都要被執行到。因為對

本時要確保程式中所有的敘述都要被執行到。因為對
於測試者而言,程式碼都是看得到的,所以這種方法
也被稱作

透明盒子測試 (clear-box testing)

(

g)

– 另一種稱為

涵蓋資料測試 (data-coverage testing)

的方法

是設計測試樣本時要確保所有可能資料範圍都必須涵
蓋到。由於這種方法只基於輸入資料本身而不管程式
碼,所以也被稱作

黑盒子測試 (black-box testing)

33

Ch07 低階程式語言

測試計畫的實施

測試計畫的實施

• 測試計畫的實施 (test-plan implementation)

涵蓋執行測試計

測試計畫的實施 (test plan implementation)

涵蓋執行測試計

畫中所列的每一個測試樣本,並記錄所有的結果。

• 我們要做加總三個數字的動作,所以設計輸入值時必須確

定加總後的和不會超過

定加總後的和不會超過 ± 2

15

– 1。

• 要實現這個測試計畫,程式必須執行六次,逐次測試每一

種資料樣本。

34

Ch07 低階程式語言

測試計畫的實施

測試計畫的實施

• Pep/7選單中選擇Execution Input (執行輸入),我們

將會見到以下的畫面:

將會見到以下的畫面:

35

Ch07 低階程式語言

測試計畫的實施

測試計畫的實施

• 我們只要鍵入一個數字並點選Continue鈕。這個畫

• 我們只要鍵入一個數字並點選Continue鈕。這個畫

面會再出現兩次以便我們輸入另外兩個數值。如
果我們先輸入第一個數值4,第二個數值6,及第

果我們先輸入第一個數值4,第二個數值6,及第
三個數值1,則我們可得到下面的輸出畫面:

36

Ch07 低階程式語言

版權說明: 檔案資源由用戶上傳,僅供學習交流使用,尊重著作權。 若您認為內容涉及侵權,請點擊「侵權舉報」提交相關資料,我們將儘快核實並處理。