另一種程式寫法 (補充教材) 課本的程式是採 立即定址 方式輸出字母 另一種寫法: 可採直接定址方式

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

Introduction to C Programming
08 CSS 基本語法 8-1 CSS 的演進 8-2 CSS 樣式規則與選擇器 8-3 連結HTML 文件與CSS 樣式表
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 迴圈.
組合語言與系統分析 SIC程式教學.
基本程式範例.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 霹靂燈 2018年11月7日 8051 單晶片實習---E0902霹靂燈.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
Q101 在701 SDX Linux上的標準安裝與使用程序v2
JDK 安裝教學 (for Win7) Soochow University
第四章 流程控制(一) if,if-else 與 switch
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 閃爍燈 2018年11月23日 8051 單晶片實習---E0901閃爍燈.
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
在NS-2上模擬多個FTP連線,觀察頻寬的變化
2-1 接腳說明 2018/11/30 第2章 系統分析.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
安裝JDK 安裝Eclipse Eclipse 中文化
檔案與磁碟的基本介紹.
Ch07 低階程式語言 目標---研讀完本章後,你應該可以: 列出電腦可以執行的動作。 討論抽象階段與訂定具體演算步驟的關係。
Chap3 Linked List 鏈結串列.
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
VS.NET 2003 IDE.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
Ch20. 計算器 (Mac 版本).
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
第 19 章 XML記憶體執行模式.
第七單元 正反器 (教科書第四章) 數位系統實驗
輸入&輸出 函數 P20~P21.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
Introduction to C Programming
安裝 / 操作 flashget SOP (以Win 7 作業系統為範例)
CH05. 選擇敘述.
期末考.
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
撰寫MATLAB基礎財務程式 柯婷瑱.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
陣列與結構.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
11058: Encoding ★☆☆☆☆ 題組:Problem Set Archive with Online Judge
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
1-1 二元一次式運算.
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
13194: DPA Number II ★★☆☆☆ 題組:Problem Set Archive with Online Judge
資料表示方法 資料儲存單位.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
適用於多選一 可減少if 與 else配對混淆的錯誤.
Programming & Language Telling the computer what to do
第 4 章、組譯器 作者:陳鍾誠 旗標出版社.
開發Java程式語言的工具 JDK.
第三章 Arduino互動程式設計入門 Arduino程式基礎 認識變數 認識數字系統 認識常數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
Array(陣列) Anny
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
Chapter 4 Multi-Threads (多執行緒).
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
快取映射 之直接對映 計算整理.
Unix指令4-文字編輯與程式撰寫.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

另一種程式寫法 (補充教材) 課本的程式是採 立即定址 方式輸出字母 另一種寫法: 可採直接定址方式 指令由 11100000 (E0H) => 11100001 (E1H) 在程式碼後面插入資料 (參考 code/pep-p201.odc) 輸出 010H 地址的內容所代表的字元 000 E1 10 003 E1 11 006 E1 12 009 E1 13 010H 地址的內容為 48H 00C E1 14 00F 00 48 65 012 012 6C 6C 6F Ch07 低階程式語言

作業練習-2 請參考前頁,以直接定址方式利用 Pep/7 列印出 “Hello, 你的英文名字” Ch07 低階程式語言

Hello 程式變形 (補充教材) Hello 後增加一個由使用者互動輸入的字元 (參考 code/pep-p202.odc) 000 003 CHARI,輸入的字元儲存到 014H 記憶體位置 006 009 00C 00F D9 00 14 012 012 E0 00 00 這裡是 014H 015 00 Ch07 低階程式語言

7.5 組合語言 組合語言 (assembly language) 指定一些助憶的(mnemonic)字母編碼 (簡稱助憶碼)來代表每一個機器語言指令。 程式設計師使用這些助憶碼編寫程式而不需再使用二進制位元 組譯器 (assembler) 這個程式就負責讀入每一個助憶符號形式的指令,然後轉譯成相對的機器語言形式。 Ch07 低階程式語言

Pep/7組合語言 縮寫:CHAR 為 CHARACTER(字母),DEC 為 DECIMAL (十進制),h 為 hexidecimal , c 為 character,i 為 immediate,d 在 “,” 後為 direct, d 在 “,” 前是 decimal Ch07 低階程式語言

虛擬運算碼 定義:組譯器巨集指揮動作(assembler directive),也就是請組譯器完成的準備動作,以便利組合語言程式的執行,在 Pep7 有 4 個虛擬運算碼 (其中 .WORD 有 2 種運算元表示方式),都是以 ‘.’ 開始: BLOCK:區塊,占用記憶體位元組數目由運算元的值決定 WORD:字語:占用記憶體位元組數目固定為 2 個位元組,適 用於需要給訂初始值時 Ch07 低階程式語言

Hello程式(7-4節)的組合語言版本 (1) (立即定址模式) (參考 code/pep-p206-1.odc 及 code/pep-p206-2.odc ) Ch07 低階程式語言

Hello程式(7-4節)的組合語言版本 (2) (直接定址模式) (參考 code/pep-p208.odc) Ch07 低階程式語言

Hello程式(7-4節)的組合語言版本(3) 執行了Pep/7下拉選單的Assemble選項之後的結果顯示於下面的視窗畫面: Ch07 低階程式語言

Hello程式(7-4節)的組合語言版本(4) 我們也可以點選Pep/7下拉選單下的Assembler Listing選項,以得到組譯器列表如下圖所示。 Ch07 低階程式語言

Hello 程式變形 的組合語言版(補充教材) (參考 code/pep-p209.odc) Ch07 低階程式語言

一個加總程式範例 (1) 需求:請輸入 3 個整數,並計算其加總所得數字, 需要 4 個放整數的記憶體位置給 輸入值及加總結果 num1, num2, num3, sum 將 sum 的記憶體內容先設為 0,載入到 ALU 輸入 num1,再利用 ADDA 將 ALU 內容(0)與 num1 加起來 (ALU 會存有 num1 ) 輸入 num2,再利用 ADDA 將 ALU 內容與 num2 加起來 (ALU 存有 num1 + num2結果) 輸入 num3,再利用 ADDA 將 ALU 內容與 num3 加起來 (ALU 存有三數加總結果) 將 ALU結果以 STOREA 存到 sum的記憶體位置 Ch07 低階程式語言

一個加總程式範例 (2) 虛擬運算碼: 標籤:可用來命名變數或標示程式位置,以變數名稱開頭後加上 ‘:’,如 sum, num1, num2, num3。Main 為所有程式的開始執行位置之標籤 Ch07 低階程式語言

一個加總程式範例 (3) 無條件跳躍 預備動作 開始執行標籤 Ch07 低階程式語言

一個加總程式範例 (4) (參考 code/pep-p212.odc) Ch07 低階程式語言

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

作業練習-3 請參考課本的加總程式範例,改寫成只需要 2 個放整數的記憶體位置給輸入值 (num)及加總結果 (sum) 提示:因為本例題的各個輸入值加到加總後就沒有用了,因此,可以讓原程式的 num1, num2, num3 共用一個記憶體位置 num,也就是將原來的 “DECI num1, d” 、 “DECI num2, d”、 “DECI num3, d” 都改為 “DECI num,d” ,記得虛擬運算碼部分也要將 3 個虛擬運算碼改成 1 個 課本習題第 16-20 題 (手寫) 請於 12 月 5 日前將 3 題作業練習的程式碼繳交至教學支援平台 Ch07 低階程式語言

在組合語言中做決策(作判斷)的方法 Branch 及 Compare 的縮寫,EQ 為 Equal,LT 為 Less Than 本例為 008BH 範例: Ch07 低階程式語言

在組合語言中做決策(作判斷)的方法 COMPA limit, d:比較 A 暫存器內容與 limit 變數的值 當 A 暫存器內容 < limit 的值,會設定狀態位元 N 的值為 1 當 A 暫存器內容 = limit 的值,會設定狀態位元 Z 的值為 1 BRLT Case2: 當狀態位元 N (表 Negative,負) 的值為 1,則將程式計數器暫存器 (Program Counter ,PC) 設為運算元 Case2 標籤的記憶體位址 註:當 N 為 1 表示 A暫存器的值小於 0 BREQ Case1:當狀態位元 Z (表 Zero,零) 的值為 1,則將程式計數器暫存器 (Program Counter ,PC) 設為運算元 Case1標籤的記憶體位址 註:當 Z 為 1 表示 A暫存器的值等於 0 Ch07 低階程式語言

在組合語言中做決策(作判斷)的方法 假設需求改為:當總和sum為正數時就印出sum,如果sum為負值則印出一個錯誤訊息。 上面這個 If 敘述展開成為組合語言的演算法的形式如下: if 敘述,其基本型式(注意縮排)為: if 條件 條件成立時的操作 else 條件不成立時的操作 if 敘述的變形,其基本型式為: if 條件 條件成立時的操作 不管條件成不成立,都進行的操作 Ch07 低階程式語言

在組合語言中做決策的方法範例程式 因為 硬體自動設定 N 及 Z,所以可以直接BRLT Ch07 低階程式語言

一個具有迴圈的程式 迴圈:程式可以反覆執行同一段程式碼若干次 做法:讓 BR (或 BREQ, BRLT, COMPA) 等可以 跳回至前面的標籤 假設需求為:請先輸入要加總的整數的個數(每次執行時才決定,不是事先決定的),再請使用者一個一個輸入這些整數,加總後列印其總和 while 敘述 的類型 (要注意縮排): while condition statement1 statement2 statement3 Ch07 低階程式語言

一個具有迴圈的程式 第一步是預備動作,先宣告我們會使用到的變數:limit, number及sum。 每次進行迴圈時,內部的做法: Ch07 低階程式語言

一個具有迴圈的程式 Ch07 低階程式語言

一個具有迴圈的程式

更多範例程式 (補充教材) 比大小(使用 if 的概念) 迴圈 (while) code/Pr0701.odc :跟 100 比大小,大的話輸出 “high” ,否則輸出 “low” code/Pr0701-2.odc :增加 等於 100 時輸出 “eq” 的檢查 code/Pr0701-3.odc: 較簡潔的寫法 迴圈 (while) code/Pr0702.odc :警車追贓車 Ch07 低階程式語言

因為 limit 為常數,此處才能用 i(立即模式), code/Pr0701.odc 因為 limit 為常數,此處才能用 i(立即模式), Ch07 低階程式語言

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

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

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

作業: 12/12 交到教學支援平台 請輸入 3 個整數,分別存在 num1, num2, num3 這 3 個變數,請計算出 num1 – num2 + num3 的值,輸出結果。如果 結果為正,輸出 “++”,如果結果為負,輸出 “--”,如果結果為 0,輸出 “0” (註:減法的部分,可用 SUBA 助憶符號) 請輸入一個正整數值 n,計算 1 + 2 + … + n 的總和 說明:可以參考 第 24 頁範例(一個具有迴圈的程式),但本程式在迴圈中不用輸入值,直接加上 limit 的值即可 課本習題第 41, 42 題,找出程式碼的錯誤,並且加以訂正 (第 41 題以文字檔繳交,第 42 題以程式碼繳交) Ch07 低階程式語言

7.6 其他重要的關聯:抽象化與測試 機器語言有很少的資訊隱藏,僅隱藏以下位元資訊:以二的補數表示負整數 組合語言可用抽象化概念隱藏一些細節 用變數來命名一個區塊(BLOCK)或一個字組(WORD) 標示程式位置,這樣程式可直接跳到這個位置,這在設計迴圈及 IF-ELSE 程式碼時尤其方便 一個測試計畫 (test plan)基本上是一件文件,當中指定要執行多少次及使用什麼樣的資料來測試程式以達到程式的完整測試。每一組輸入資料值就叫作一個測試樣本 (test case)。 Ch07 低階程式語言

抽象化與測試 測試過程中有幾種測試方法可以依循 一種稱為涵蓋碼 (code-coverage) 的方法是設計測試樣本時要確保程式中所有的敘述都要被執行到。因為對於測試者而言,程式碼都是看得到的,所以這種方法也被稱作透明盒子測試 (clear-box testing)。 另一種稱為涵蓋資料測試 (data-coverage testing) 的方法是設計測試樣本時要確保所有可能資料範圍都必須涵蓋到。由於這種方法只基於輸入資料本身而不管程式碼,所以也被稱作黑盒子測試 (black-box testing)。 Ch07 低階程式語言

測試計畫的實施 測試計畫的實施 (test-plan implementation) 涵蓋執行測試計畫中所列的每一個測試樣本,並記錄所有的結果。 我們要做加總三個數字的動作,所以設計輸入值時必須確定加總後的和不會超過 ± 215 – 1。 要實現這個測試計畫,程式必須執行六次,逐次測試每一種資料樣本。 Ch07 低階程式語言

測試計畫的實施 Pep/7選單中選擇Execution Input (執行輸入),我們將會見到以下的畫面: Ch07 低階程式語言

測試計畫的實施 我們只要鍵入一個數字並點選Continue鈕。這個畫面會再出現兩次以便我們輸入另外兩個數值。如果我們先輸入第一個數值4,第二個數值6,及第三個數值1,則我們可得到下面的輸出畫面: Ch07 低階程式語言