第 4 章、組譯器 作者:陳鍾誠 旗標出版社.

Slides:



Advertisements
Similar presentations
平面构成 第六章 平面构成形式与法则 — 破规与变异. 第七章 平面构成形式与法则 — 破规与变异 破规与变异构成的形式、有下列四类: 一、特异构成 特异构成。其表现特征是,在普遍相同性质的事物 当中,有个别异质性的事物,便会立即显现出来。
Advertisements

第一單元 建立java 程式.
第2章 組譯器.
課程簡介與背景知識介紹 組合語言 971版.
第十課 第九味目錄 徐國能 課文 注釋 問題與討論.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Speaker :Fanjia Yen Adviser : Quincy Wu Date : 2007/11/15
主題五 CPU Learning Lab.
組合語言與系統分析 SIC程式教學.
基本程式範例.
國立大甲高工 電機科 單晶片微電腦控制實習 輸出埠基礎實習 廣告燈 2018年11月7日 8051 單晶片實習----E0903廣告燈.
正反器 一、循序邏輯電路 二、動作情形:用時序(timing),其次輸出( )是由外界輸入與( )所共同決定。
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
第 8 章、編譯器 作者:陳鍾誠 旗標出版社.
第 9 章、虛擬機器 作者:陳鍾誠 旗標出版社.
程式語言簡介.
物件導向程式設計 CH1, CH2.
2-3 基本數位邏輯處理※.
和春技術學院資訊管理系 九十三學年度第一學期 系統程式
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
Java程式概觀.
2-1 接腳說明 2018/11/30 第2章 系統分析.
C語言簡介 日期 : 2018/12/2.
SQL Stored Procedure SQL 預存程序.
(Circular Linked Lists)
安裝JDK 安裝Eclipse Eclipse 中文化
第 12 章、系統軟體實作 作者:陳鍾誠 旗標出版社.
12-1 類比/數位(A/D)轉換IC 2018/12/25 第12章 類比/數位(A/D)介面實習.
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A.
雲端運算的基石(2) 虛擬化技術實作(XP篇─上)
第 8 章 Combinational Logic Applications
檔案與磁碟的基本介紹.
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
第 2 章、電腦的硬體結構 作者:陳鍾誠.
Chap3 Linked List 鏈結串列.
虎克定律與簡諧運動 教師:鄒春旺 日期:2007/10/8
第一單元 建立java 程式.
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
雲端計算.
輸入&輸出 函數 P20~P21.
第十章 指標.
第 3 章、組合語言 作者:陳鍾誠 旗標出版社.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
美麗的西子湖.
C qsort.
Mathematica 動畫教學 -振動模態
MicroSim pspice.
陣列與結構.
編輯網頁可用那些應用程式? 記事本 Word FrontPage Dreamweaver.
一、簡介 電腦硬體設計:純硬體電路(hardware)及韌體電 路(firmware)兩種方式。
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A.
資料表示方法 資料儲存單位.
第1章、系統軟體 作者:陳鍾誠 旗標出版社.
Quiz1 繳交期限: 9/28(四).
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
開發Java程式語言的工具 JDK.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
Chapter 4 Multi-Threads (多執行緒).
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
Unix指令4-文字編輯與程式撰寫.
JUDGE GIRL 使用介紹 & 常見問題 TAs :
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
Memory Management 日期 : 2019/11/21.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第 4 章、組譯器 作者:陳鍾誠 旗標出版社

第 4 章、組譯器 4.1 組譯器簡介 4.2 組譯器的演算法 4.3 完整的組譯範例 4.1 組譯器簡介 4.2 組譯器的演算法 4.3 完整的組譯範例 4.4 實務案例:處理器 IA32 上的 GNU 組譯器

4.1 組譯器簡介 組譯器乃是將組合語言轉換為機器碼的工具。 組譯器是組合語言程式師所使用的主要工具。 組合語言  (組譯器)  目的檔 (或執行檔) 組譯器是組合語言程式師所使用的主要工具。

組譯器的過程示意圖 組合語言 MUL R5, R2, R2 ADD R1, R2, R5 ADD R2, R4, R2 目的檔 15 52 20 00 13 12 50 00 13 24 20 00 組譯器 Assembler 組合語言 目的檔 圖 4.1 組譯器的過程示意圖

簡單的組合語言程式

組譯:將組合語言轉譯成目的碼

組譯的原理 (絕對定址)

組譯的原理 (相對於 PC 定址)

二階段的組譯方式 (1). 運算元轉換: (2). 參數轉換: (3). 資料轉換: (4). 目的碼產生: 將指令名稱轉換為機器語言 (1). 運算元轉換: 將指令名稱轉換為機器語言 例如 LD 轉為00, ST 轉為01等 (2). 參數轉換: 將暫存器轉為代號,符號轉換成機器位址 例如 R1 轉為 1, A 轉為 000C,B 轉為 0010 等。 (3). 資料轉換: 將原始程式當中的資料常數轉換為內部的機器碼 例如 29 轉換為 001D。 (4). 目的碼產生: 根據指令格式, 轉換成目的碼, 輸出到目的檔中。 (2) (3)

映像檔 映像檔:最簡單的目的碼 組合語言  (組譯器)  映像檔

as0 組譯器

4.2 組譯器的演算法 第一階段 計算符號位址 第二階段 組譯指令與資料 資料結構:符號表

第一階段 (計算符號位址) 1. 決定每一個指令所佔記憶空間 的大小 2. 計算出程式當中每一行的位址。 3. 儲存每一個標籤與變數的位址 例如 決定 WORD、RESW 等指令所定 義的資料長度 決定 LD、ST 等指令所佔空間的大 小 2. 計算出程式當中每一行的位址。 3. 儲存每一個標籤與變數的位址 變數 A 為 0x000C 變數 B 為 0x0010

第二階段 (組譯指令與資料) (1). 轉換指令OP欄位為機器碼 例如 LD 轉換為 00 ST 轉換為 01 (2). 轉換指令參數為機器碼 R1轉換為 1 B 轉換為 000C (3). 轉換資料定義指令為位元值 WORD B 29 轉為 0000001D (4). 產生目的碼並輸出到目的檔當 中 (2) (2) (3)

組譯器的資料結構 運算碼表 (Op Table) 符號表 (Symbol Table) 儲存指令與代碼的配對表 通常使用雜湊表格 儲存符號與位址的配對表

第一階段 (PASS1) 計算位址

第二階段 (PASS2) – 主程式 指令轉為機器碼

第二階段 (PASS2) – 指令轉換函數 根據指令類型 L 型 A 型 J 型 轉換成該型編碼

4.3 完整的組譯範例 範例:陣列加總功能 功能 如右圖 C 語言所示 原始程式 如範例 4.7 所示 組譯結果 如範例 4.8 所示

原始程式

組譯結果 組譯報表 範例 4.8 符號表 圖 4.6 目的檔 範例 4.9

4.4 實務案例: 處理器 IA32 上的 GNU 組譯器 as : GNU 的組譯器 -a 參數

GNU 的 組譯報表 符號表 指令長度不固定 範例 addl %eax, sum  010500000000 addl $1, %eax  83C001 符號表

結語 對 IA32 的編碼方式有興趣的讀者,可以參考 Kip Irvine 的組合語言一書

習題 請說明組譯器的輸入、輸出與功能為何? 請說明組譯器第一階段 (PASS1) 的功能為何? 請說明組譯器當中的符號表之用途為何? 請說明組譯器當中的指令表之用途為何? 請仿照範例 4.4,使用本書第12章所實作的 as0 組譯器,組譯 Ex4_1.asm0 組合語 言檔,並仔細觀察其輸出結果。 請閱讀本書第12章所附的 Assembler.c 與 Assembler.h 等C語言程式,並且對照本 章的演算法,以學習 CPU0 組譯器的實作方式。 請按照4.4節的方法,操作 GNU 工具對組合語言進行組譯動作,並檢視組譯報表, 找出各個符號的位址。 請於 http://kipirvine.com/asm/ 網站下載Kip Irvine 書籍組合語言程式範例,並以 Visual Studio 進行組譯與執行。