Ch07 低階程式語言 目標---研讀完本章後,你應該可以: 列出電腦可以執行的動作。 討論抽象階段與訂定具體演算步驟的關係。

Slides:



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

計算機程式語言實習課.
另一種程式寫法 (補充教材) 課本的程式是採 立即定址 方式輸出字母 另一種寫法: 可採直接定址方式
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
Hadoop 單機設定與啟動 step 1. 設定登入免密碼 step 2. 安裝java step 3. 下載安裝Hadoop
主題五 CPU Learning Lab.
題目:十六對一多工器 姓名:李國豪 學號:B
Chapter 5 迴圈.
組合語言與系統分析 SIC程式教學.
第1章 背景.
基本程式範例.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 廣告燈 2018年11月7日 8051 單晶片實習----E0903廣告燈.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 霹靂燈 2018年11月7日 8051 單晶片實習---E0902霹靂燈.
電腦操作 會考電腦 浸信會永隆中學.
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
第 9 章、虛擬機器 作者:陳鍾誠 旗標出版社.
Visual C++ introduction
物件導向程式設計 CH1, CH2.
2-3 基本數位邏輯處理※.
JAVA 程式設計與資料結構 第十二章 JAR File.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 閃爍燈 2018年11月23日 8051 單晶片實習---E0901閃爍燈.
和春技術學院資訊管理系 九十三學年度第一學期 系統程式
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
Java程式概觀.
2-1 接腳說明 2018/11/30 第2章 系統分析.
學習目標 列出Von Neumann machine的元件以及它們的功能。
C語言簡介 日期 : 2018/12/2.
SQL Stored Procedure SQL 預存程序.
安裝JDK 安裝Eclipse Eclipse 中文化
雲端運算的基石(2) 虛擬化技術實作(XP篇─上)
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
第 2 章、電腦的硬體結構 作者:陳鍾誠.
Chap3 Linked List 鏈結串列.
第一單元 建立java 程式.
VS.NET 2003 IDE.
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
第 19 章 XML記憶體執行模式.
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
CH05. 選擇敘述.
期末考.
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
挑戰C++程式語言 ──第8章 進一步談字元與字串
如何使用Gene Ontology 網址:
數位邏輯設計與實習 Ch08實驗室實習.
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
陣列與結構.
4-1.3 CPU指令運作週期 P60 資訊科技概論--電腦硬體.
一、簡介 電腦硬體設計:純硬體電路(hardware)及韌體電 路(firmware)兩種方式。
1-1 二元一次式運算.
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
1757: Secret Chamber at Mount Rushmore
資料表示方法 資料儲存單位.
Programming & Language Telling the computer what to do
第 4 章、組譯器 作者:陳鍾誠 旗標出版社.
開發Java程式語言的工具 JDK.
第三章 Arduino互動程式設計入門 Arduino程式基礎 認識變數 認識數字系統 認識常數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
Chapter 4 Multi-Threads (多執行緒).
快取映射 之直接對映 計算整理.
Unix指令4-文字編輯與程式撰寫.
單晶片實作講義 微電腦控制界面 (LCD) 。.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

Ch07 低階程式語言 目標---研讀完本章後,你應該可以: 列出電腦可以執行的動作。 討論抽象階段與訂定具體演算步驟的關係。 描述出 Pep/7 虛擬機器的重要特徵。 分辨出立即定址模式(immediate addressing mode)及直接定址模式(direct addressing mode)的不同。 將一簡單的演算法則轉換成機器語言程式。 分辨出機器語言(machine language)及組合語言(assembly language) 的不同。 將一簡單的演算法則轉換成組合語言程式。 分辨出要送給組譯器的指令及將被轉譯的指令。 對一個簡單的組合語言程式,設計及實現一個測試程式計畫。 25 Ch07 低階程式語言

7.1 電腦的動作 一部電腦是一個可程式化的電子裝置,它可以儲存、擷取及運算資料。 資料及運用資料的指令在邏輯上是相同的, 他們都是 0 與 1 的序列,而且可以儲存在相同地方(指記憶體及檔案),這也是范紐曼機器的基本概念。 儲存、擷取及運算就是電腦處理資料的動作,也就是可程式化的概念。 運算包括所有資料數值的加減乘除等算術及邏輯運算式的求值 Ch07 低階程式語言

7.2 抽象(abstraction)階段 一個抽象步驟是許多細節尚未定義完整,而一個具體步驟則是將細節完整定義好。 如何知道演算法(一個演算法是指在有限時間內,使用有限資料來解決一個問題或子問題的一組指令)中某個步驟是否夠具體? 取決於程式語言的支援程度 我們會在第 7 章之後介紹第 6 章演算法,之後第 8、9 章將說明如何將虛擬碼轉成高階程式語言。 本章先由機器語言 (machine language) 開始,它是伴隨硬體產生的語言;逐漸轉到組合語言 (assembly language) 。 Ch07 低階程式語言

7.3 機器語言 機器語言 (machine language) 電腦唯一真正能執行的程式指令,這些指令依照特定電腦功能建立於硬體中。 所有的處理器系列(CPU series) 型態都有自己獨特的一組機器指令。 這些指令被賦予一個編碼 (以 0 與 1 的字串表示) 處理器及其所能執行的機器指令之間的關係是完全整合在一起的。 每一個機器語言指令僅僅做了一個非常低階的工作,例如 “將某記憶體位址的內容上載到 CPU 的累加器暫存器”。 即使是將 2 個數字相加也要用到 3 個指令 目前已沒有人直接用機器語言寫程式 Ch07 低階程式語言

機器語言程式範例 將 0 與 1 的位元串以 16 進制表示,最後以 zz 表示程式結束, zz 是用來告訴 Pep7 模擬器 “不用再往下讀了”,不是機器語言程式的一部份 Ch07 低階程式語言

Pep/7:一個虛擬電腦 一個虛擬電腦就是一台假想的機器,但是包含了真實電腦所應具備的一些重要特徵。 由Stanley Warford 所設計的Pep/7 就是一台我們在本章中要討論的虛擬機器。 最新版本為 Pep/8 Pep/7 具有32個機器語言指令(所以需要 5 個位元來表示各個指令) 我們不完整介紹 Pep/7 所有指令,只看其中幾個指令,重點在了解機器語言如何運作 Ch07 低階程式語言

Pep/7 的重要特徵 Pep/7的記憶單元是由 4,096 (212)位元組的記憶體所組成。所以需要 12 個位元來表示某一記憶體位置 Pep/7的字語長度是 2個位元組(即 16 個位元 ),表示資訊流入或流出 ALU 的基本長度是 16 位元 在Pep/7中含有 7 個暫存器,其中 我們會用到以下3 個: 程式計數器 (PC, Program Counter),2 bytes,存放下一個將被執行的指令的記憶體位址。 指令暫存器 (IR, Instruction Register),3 bytes,儲存目前正在執行的指令之編碼。 累加器 (A暫存器, Accumulator),2 bytes,存放資料或運算後的結果。 Ch07 低階程式語言

Pep/7 的重要特徵 在Pep/7中含有四個狀態位元,其中我們將探討以下兩個: 狀態位元 N (Negative):當累加器為負數時其值為1,否則其值為0。 狀態位元 Z (Zero):當累加器為 0 時其值為1,否則其值為0。 這兩個位元的設定是由硬體自動處理 狀態位元用於設計 迴圈 及 IF-ELSE 程式碼 判斷某些布林運算式的真假值,以決定後續要執行的指令的記憶體位置 (也就是程式計數器) Ch07 低階程式語言

Pep/7 的重要特徵 409510 Ch07 低階程式語言

指令格式 一個指令可以分成兩個部分:8位元的指令指標 (instruction specifier) 及16位元的運算元指標 (operand specifier) (不一定要有)。 Ch07 低階程式語言

指令格式 運算碼 (operation code) 是5個位元長度 (以灰色底表示)。運算碼中的位元串指定將要執行何種指令。當我們說Pep/7有32種指令時,你應該可以想到指令運算碼需要5個位元,因為5個位元可產生32種個別的碼,範例在第 12 張投影片。 佔 1 個位元的暫存器指標 (register specifier) 在本書範例固定是存放 0,因為我們只用到暫存器A (累加器)。如需用到其他暫存器,才會存放 1。 佔 2 個位元的定址模式指標 (addressing-mode specifier) (藍綠色底) 指示如何解譯指令的運算元部分,範例說明在第 13 張投影片。 若一個指令不帶有運算元 (要被運算的資料),那就稱為單一位元組指令 (unary instruction),同時不帶有運算元指標,因此只需要 1 個位元組,而不是一般的 3 個位元組。 訂正 Ch07 低階程式語言

指令格式 單一位元組(unary)指令 Ch07 低階程式語言

指令格式 佔2個位元的定址模式指標指示如何解譯指令的運算元部分,共 4 種,本書僅展示 00 (immediate,組合語言以 i 表示)、01(direct ,組合語言以 d 表示) Ch07 低階程式語言

一些指令範例 00000 停止執行 00001 載入運算元 (0007H) 到暫存器 (LOADA 0007, i) 以下為另一個載入指令 (LOADA (001F), d) 08H 0007H 09H 001FH 將記憶體位址 001F 及 0020 的內容載入 A 暫存器 Ch07 低階程式語言

指令格式 00010 儲存暫存器到運算元 ( STOREA (000A), d ) 將 A 暫存器內容第 1 byte 存到記憶體位址 000A ,第 2 byte存到記憶體位址 000B ( STOREA (000A), d ) 11H 000AH Ch07 低階程式語言

指令格式 00011 加上運算元到暫存器裡 (ADDA 20A, i) 如同載入運算一樣,加法運算也同時使用暫存器指標及定址模式指標而產生不同的義涵。 這個指令的第二個及第三個位元組 (運算元指標) 的內容 (十六進制 020A) 被加到A暫存器的內容之中。運算元指標位元使用的底色顯示它們就代表著資料。 例如:如果 A暫存器原本內容為 107AH,此指令執行完畢後,A暫存器內容改為 1284H (ADDA 20A, i) 18H 020AH Ch07 低階程式語言

指令格式 ADDA (20A), d 指令的第二個及第三個位元組組成的運算元指標所指定的記憶體位址字語內容 (即020A 及 020B 位址的內容) 被加到A暫存器之中。 00100 減去運算元 這個指令與加法運算相似,只不過運算元是從A暫存器減去而不是加上去。與載入及加法指令一樣,減法指令依定址模式的不同也有不同的變化。 19H 020AH Ch07 低階程式語言

指令格式 11011 字元輸入到運算元 CharI (000A) 這個指令允許讓程式在執行時,程式可以由輸入裝置輸入一個ASCII字元。但是這個指令只允許直接定址模式,所以字元是儲存在運算元指標所指定的位址內。 以上的指令代表從輸入裝置讀取一個ASCII字元,並將它儲存在000A位址內。此指令只會影響 1 個位元組而不是 1 個字語。 CharI (000A) D9H 000AH Ch07 低階程式語言

指令格式 11100 字元由運算元輸出 CharO h#41,i 這個指令在程式執行時會由輸出裝置送出一個ASCII字元。定址模式可以是立即定址或直接定址模式。 由於指定的是立即定址模式,所以這個指令會將運算元指標所存放的ASCII字元送出去。這個指令的運算元指標放的是1000001,也就是十六進制41或是十進制65,這個值代表的ASCII字元就是字母 “A” 所以這個指令將在螢幕上輸出字母A。 CharO h#41,i E0H 0041H Ch07 低階程式語言

指令格式 CharO (000A), d 因為是使用直接定址模式,這個指令會將運算元指標所指定的位址內容之ASCII字元送出,也就是將000A位址的內容位元組以ASCII字元輸出。 E1H 000AH Ch07 低階程式語言

一個程式的範例:問題及演算法 讓我們先從一個非常簡單的問題開始,假設要在螢幕上寫出 “Hello” 。 Ch07 低階程式語言

問題及演算法 在機器語言裡,我們必須將每個字母轉換成它們的ASCII碼表示法。 Ch07 低階程式語言

一個程式 (參考 code/pep-p200.odc) 機器碼,當載入器完成工作後,Pep/7的記憶體看起來的樣子。 Ch07 低階程式語言

手動模擬 這個程式的執行我們可以依據擷取 / 執行週期的步驟來模擬。這種以手動追蹤執行步驟確實可反映出實際電腦運作時的狀況。 擷取下一個指令 (由程式計數器指定的位址)。 指令解碼 (同時更新程式計數器)。 取得資料 (運算元),如果需要的話。 執行指令。 Ch07 低階程式語言

手動模擬 (1) 這個指令被解碼成為使用立即定址模式「將字元寫到輸出」的指令。由於這個指令佔了3個位元組,所以PC暫存器內容要加 3,得到 3。資料是從IR暫存器的運算元指標中取出,然後這個指令就被執行了。結果是 ‘H’ 這個字元被輸出寫在螢幕上。 Ch07 低階程式語言

手動模擬 (2) 這個指令一樣被解碼成一個使用立即定址模式「將字元寫到輸出」的指令。由於指令佔了3個位元組,所以PC暫存器內容要再加 3,變為 6。資料被取出後,指令就可以執行, ‘e’ 這個字元就輸出寫在螢幕上。 其餘 ‘l’, ‘l’, ‘o’ 也都以此方式,一一印出 Ch07 低階程式語言

手動模擬 (3) 這個運算碼被解碼成「停止」的指令。所以定址模式及運算元指標就被省略掉,整個擷取 / 執行週期就停止了。 Ch07 低階程式語言

Pep/7模擬器 雖然Pep/7是一個虛擬 (假想) 的機器,但我們可以用模擬器 (simulator) 來實現它 程式輸出的視窗畫面從螢幕上抓下來的圖: 下拉選單的畫面如下圖所示: Ch07 低階程式語言

Pep/7模擬器 假如忘記在 zz 之前隔一個空白字元,那麼載入器將回應以下的錯誤訊息: Ch07 低階程式語言

作業練習-1 請利用 Pep/7 列印出 “Hello, 你的英文名字” 例如: “Hello, John Rose” 步驟: 先查 ASCII 表,知道各個字母的碼,再將這些碼一一填入以下 ____ 處: E0 00 ___ …… 00 最後將上述機器碼(記得最後面加 zz)輸入到 Pep/7 上執行 Ch07 低階程式語言