第4章 巨集處理器.

Slides:



Advertisements
Similar presentations
學校日簡報 ~ 608 ( 六下 ) 歡迎各位家長! 報告者:黃怡萍老師. 主題一 : 滿滿的感謝 一年多來感謝家長們的支持與鼓勵,使班 務運作順利,親師生溝通良好;六年級下 學期是貴子弟國小生涯的最後一階段,時 間雖然短暫,但老師也擬定最後衝刺的目 標,希望親師生三方持續合作,讓我們愉 快的度過每一天。
Advertisements

請按左鍵換頁 為人的藝術 ~善緣貴人多~ 廣結善緣 1. 有什麼觀念,就有什麼行為; 有什麼行為,就有什麼習慣; 有什麼習慣,就有什麼性格; 有什麼性格,就有什麼命運。 2. 對長輩謙虛是本分,對平輩謙虛是修養, 對 晚輩謙虛是高貴,對所有人謙虛是安全。 3. 廣結善緣,圓融的人際關係( EQ ):
1.1 程序和程序设计 程 序:简单的说程序就是指令的集合。 计算机设计语言: 机器语言 :二进制 0 、 1 汇编语言:助记符(英语单词)。 高级语言: 人类自然语言(数学语言 + 英语) 如: C 语言、 Qbasic 、 VB 等 第一章:程序设计基本概念.
应用文写作 主编:杨忠慧.
河內塔(Hanoi)問題.
打造活动品牌 推动队建发展 杨浦区少先队总辅导员 章希苓.
幼小課程統合與銜接 楊朝祥 中原大學講座教授.
機關改制(含員工權益保障)業務簡介 報告人:王奐寅 100年6月24日.
追求阳光心态 做一个心理健康的人 上海市徐汇区精神卫生中心 吴洪明.
电子成绩单项目实现.
養生與保健 郭點傳師慈悲.
女老闆的震撼教育 故事文案/黃祖強 視覺設計/高淑貞 版權所有,請保持著作完整性,歡迎自由分享。.
校园信息管理系统 河北科技大学网络中心 2000/4/10.
保良局何壽南小學 學校經驗分享: 學生成長的支援
被遗忘的细节 组长——冯沛欣、蒋佳润、王思轩.
主講者:林妙容 國立暨南國際大學 輔導與諮商研究所專任助理教授
第七章 发动机冷却系 第一节 冷却系的组成及水路
教师应做学生的心理保健师 (之三) 昆明市心桥心理健康研究所 钱锡安
電腦組合語言 光啟高中96學年度第2學期 第一篇 組合語言開發流程與指令格式.
股 指 期 货 的 应 用 1.
第三章 大学生学习与创造心理教育.
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
第 八 章 交互结构(2).
國中小教師甄試相關事宜 心理的準備 甄試日期 甄試方式 甄試內容 正式教師與代課教師差別 相關問題 關起門來說的問題 結語.
校 長 翁世盟 家長會長 蔡宏奕 教師會長 葉蕙境 敬上
二.应试选择题 解题策略.
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
課程內容 態度決定高度 履歷及面試重點提要 履歷 面試服裝及注意事項 性向分析 性向分析測驗.
老年期的心理健康 南京医科大学无锡精神卫生中心 王国强
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
國民小學EQ教育課程 《EQ學園─好人氣養成班》
公主的月亮 最近看了一本友人劉清彥譯的書〔公主的月亮〕,極有趣味。 這個難題由一個生病的小公主提出,她嬌憨的告訴疼她的國王,
公主的月亮 最近看了一本友人劉清彥譯的書〔公主的月亮〕,極有趣味。 這個難題由一個生病的小公主提出,她嬌憨的告訴疼她的國王,
第六章 假设检验的基本概念.
為人的藝術 ~善緣貴人多~ 請按左鍵換頁.
為人的藝術 ~善緣貴人多~ 請按左鍵換頁.
EQ劇場 ~ 李爾王.
桃園縣壽山國小 學校簡介 給孩子快樂的一片天
糖尿病肾病的护理 陈佳莉.
Chapter 3.0 C語言的結構與指標 資料結構導論 - C語言實作.
用教学实践解读课程标准.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
習作2-1 題目+解答 紐約港 紐約中央公園 格陵蘭島.
前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前,先進行加入其它檔案的內容、文字取代以及選擇性編譯等工作。
PHP 程式流程控制結構.
进程操作.
期中考试成绩分布 《程序设计》-2017年秋.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第九章 预处理命令.
第7章 陣列與指標 7-1 陣列的基礎 7-2 一維陣列的處理 7-3 二維與多維陣列的處理 7-4 陣列的函數參數
信樺文化事業有限公司.
课题2 宏程序编程介绍 1、宏变量 2、常量 3、运算符与表达式 4、赋值语句 5、条件判别语句IF,ELSE,ENDIF
Windows 程式設計 (使用 C++ / C#)
面試的準備 1.
沙田聖本篤堂 家庭牧民小組 簡介. 沙田聖本篤堂 家庭牧民小組 簡介 成立過程: 2000年教區會議期間,甘寶維神父邀請數對活躍於堂區夫婦商討籌辦家庭牧民小組的可行性 2000/01年間舉辦數次「家事談論會」凝聚有意投身服務人士,小組開始成型.
程式的時間與空間 Time and Space in Programming
微信商城系统操作说明 色卡会智能门店.
100學年度上學期 月亮班課程規劃.
香港大學教育應用資訊科技發展研究中心 資訊年代青年自學才能拓展計劃 (S計劃)
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
智慧與恩典 2015年12月5/6日 香港聖經教會.
Verilog HDL 基本语法 STEP 2016/12/3.
大綱 一.受試者之禮券/禮品所得稅規範 二.範例介紹 三.自主管理 四.財務室提醒.
班級經營--實務:疑難雜症 組員: 周雅文 李桂枝 顏純郁 黃福裕 戴曉真
第18讲 从C到C++ 计算机与通信工程学院.
習作2-1 題目+解答 紐約港 紐約中央公園 格陵蘭島.
判斷(選擇性敘述) if if else else if 條件運算子.
國立勤益科技大學 冷凍空調與能源系 實務專題成果展
实验六、COM类型病毒分析实验 2019/10/9.
Presentation transcript:

第4章 巨集處理器

內容 4.1節將會介紹巨集處理器的基本概念 4.2節討論巨集處理器的延伸功能 4.3節將會介紹一些巨集處理器的設計選項 4.4節將簡短地介紹三個巨集處理器的實際範

4.1 巨集處理器的基本功能 4.1.1節:討論巨集處理器的定義、呼叫(invocation)、展開(expansion)和參數替換 4.1.2節:介紹簡單巨集處理器的單階單演算法以及巨集處理上所需的資料結構

4.1.1巨集的定義和展開 圖4.1的程式是巨集處理器的輸入 圖4.2所示程 二個巨集指令:RDBUFF和WRBUFF MACRO指引(directive)之後的是構成巨集之主體(body)的敘述(第15行到90行)。這些敘述會在巨集展開時產生出來 MEND指引(第95行)可以標示巨集定義的結尾。

圖4.1 SIC/XE程式語言中的巨集

圖4.2 圖4.1巨集展開後的程式

注意 每ㄧ次呼叫巨集時,就會產生(和組譯)巨集所展開的敘述。但是,不論呼叫副程式多少次,副程式中的敘述都只會顯示一次。 巨集的主體中並沒有標籤

4.1.2 巨集處理器的演算法和資料結構 二階段巨集處理器 此種二階段巨集處理器並不允許巨集指令的主體中,具有其他巨集的定義 第一階段處理所有的巨集定義 第二次階段處理所有的巨集呼叫敘述的展開 此種二階段巨集處理器並不允許巨集指令的主體中,具有其他巨集的定義 單階段巨集處理器會在巨集定義與巨集展開之間切換,以順利處理一些巨集

巨集處理器有三項主要的資料結構 巨集定義是儲存在「定義資料表」(DEFTAB) 巨集定義的註解行(comment lines)並不會進入到DEFTAB 巨集名稱也會進入到「名稱資料表」(NAMTAB)中,以做為DEFTAB的索引。 「引數資料表」(ARGTAB):主要是用於巨集呼叫的展開時間

圖4.3 巨集主體中巨集定義的範例

圖4-4 針對圖4.1程式之巨集處理器表格的內容

單階段巨集處理器的演算法

4.2 與硬體無關的巨集處理器功能 4.2.1節將討論巨集指令參數和字串的連接方法。 4.2.2節將討論在巨集展開時,產生唯一標籤的方法 4.2.3節是介紹條件巨集展開的重要議題,並且利用一些範例來說明其概念。 4.2.4節所要介紹的是巨集指令的定義,以及關鍵字參數(keyword parameter)的使用。

4.2.1 巨集參數的連接 大部分的巨集處理器都會允許參數與其他字串進行連接。 假設此巨集指令的參數名稱是&ID, 巨集定義的主體中應該包含一個敘述: LDA X&ID1 LDA X&ID→1 &ID參數的結尾可以清楚地指定出來。 圖4.7展示在巨集展開中,裡產生唯一標籤的一個技術。

圖4.6 巨集參數的串接

圖4.7 在巨集展開中產生唯一的標籤

4.2.3 條件式巨集展開 大部分的巨集處理器可以根據在巨集呼叫中的引數,來修改巨集展開所產生的一系列敘述 IF敘述是用來判斷一個布林的運算式,如果此運算式的值為「TRUE」時,則IF後跟的敘述將持續進行巨集展開,直到遭遇到ELSE敘述為止; 否則,將會略過這些敘述,而展開ELSE之後的敘述 ENDIF敘述將會終止由IF敘述啟始的條件式

圖4.8 巨集時間條件式敘述的使用

巨集時間的WHILE迴圈敘述 只要WHILE敘述的條件成立時,就會ㄧ直重複展開WHILE敘述與ENDW敘述之間的敘述。

圖4.9 巨集時間迴圈敘述的使用

4.2.4 關鍵字巨集參數 迄今,所有的巨集指令定義都是使用位置參數(positional parameters)。 「關鍵參數」(Keyword parameters)是另一種不同形式的參數規範,每個引數值都會標示一個關鍵字,來表示對應的引數,因此引數可以用任何的順序來呈現。 GENER TYPE=DIRECT, CHANNEL=3

圖4.10 在巨集指令中使用關鍵字參數

4.3 巨集處理器的設計選項 4.3.1遞迴的巨集展開。 4.3.2節將要討論不受任何特殊程式所束縛的通用巨集處理器 4.3.3節將探討此項議題的其它面向:巨集處理器與一個特殊組譯器或編譯器的整合。

4.3.1遞迴的巨集展開 一個巨集呼叫另一個巨集 當程序以遞迴方式進行呼叫時,編譯器必須確定先前所宣告的變數值已經儲存起來。此外,它同時也要處理程序在回歸時的相關細節

圖4.11 巢狀巨集呼叫的範例

ARGTAB表 Parameter Value 1 F1 2 (unused) . Parameter Value 1 BUFFER 2 LENGTH 3 F1 4 (unused) . Parameter Value 1 F1 2 (unused) .

4.3.2 一般用途的巨集處理器 巨集處理器是最常用於協助組合語言程式;巨集處理器也可以運用在高階語言上 程式語言之間的其它差異,是與程式語言之項目、運算式或敘述的分群機制有關。一般用途的巨集處理器在掃描原始程式時,需要考量這些的分群(groupings)。 另一個較為通常的問題是程式語言的符記(tokens) 巨集定義和巨集呼叫敘述的使用語法

4.3.3 程式語言轉譯器中的巨集處理 巨集處理器可以稱之為「前置處理器」(preprocessors) 另一種方法:整合程式語言的轉譯器以及巨集處理器的功能。 逐行巨集處理器 以避免針對原始程式產生另一階段的處理 結合巨集處理器和語言轉譯器所需的資料結構 整合的巨集處理器 使用語言轉譯器從原始程式中所擷取出來的任何有用資訊 整合性和逐行式的巨集處理器也有其缺點。因為它們需要特別的設計和撰寫,並且必須與特定的組譯器或編譯器協同運作

4.4 實作範例 4.4.1 MASM巨集處理器 4.4.2 ANSI C巨集語言 4.4.3 ELENA 巨集處理器

4.4.1 MASM巨集處理器 MASM的巨集處理器是與組合語言的第一階段整合在一起 支援先前所討論之巨集處理器的所有功能 巨集可能在程式中重新定義 MASM巨集處理器與SIC之間的差異在於條件巨集展開敘述

圖4.12 MASM 巨集和條件敘述的範例 (a) (c) (b) (d)

圖4.13 MASM反覆敘述的範例 (a) (b)

4.4.2 ANSI C巨集語言 巨集的定義和呼叫是由前置處理器來執行 此前置處理器通常並不會與編譯器整合在一起 #define NULL 0 #define EOF (-1) 例如:定義巨集 #define EQ == 一個程式將可以寫成 while (I EQ 0)... 巨集處理器會將此轉換為 while (I == 0)...

範例 #define ABSDIFF(X,Y) ((X) > (Y) ? (X) – (Y) : (Y) – (X)) ABSDIFF(I+1,J-5) 將會被巨集處理器轉換成 ((I+1) > (J-5) ? (I+1) – (J-5) : (J-5) – (I+1)) #define DISPLAY(EXPR) printf("EXPR = %d\n" EXPR) 此巨集呼叫 #DESPLAY(I*J+1) 將會展開成. printf("EXPR = %d\n", I*J+1)

範例 #define DISPLAY(EXPR) printf(#EXPR “= %d\n”, EXPR) DISPLAY(I*J+1) 將會展開成為 printf("I*J+1" "= %d\n", EXPR) DISPLAY(ABSDIFF(3,8)) 會展開成下列的程式 Printf(“ABSDIFF(3,8)” “= %d\n”, ABSDIFF(3,8)) 在重新掃描後,將會變成下列的程式 Printf(“ABSDIFF(3,8)” “= %D\N”,((3) > (8) ? (3) – (8) : *8) – (3)))

範例 #define DEBUG 1 . #if DEBUG == 1 printf(...) /* debugging output */ #endif 在此範例中,printf敘述將會出現在前置處理程式的輸出中 define DEBUG 0 則程式中將不會出現此printf 。下列敘述也可以產生相同的結果 #ifdef DEBUG 在此範例中,假如原始程式是用 #define敘述來定義DEBUG時,則程式中將會出現printf敘述。

4.4.3 ELENA 巨集處理器 ELENA的巨集定義中包括標頭(header)和主體(body) 一系列的關鍵字(keywords)和參數標誌(以特別符號 % 來辨識)。 例如:一個具有標頭的巨集如下列所示: %1 = %2 + %3 可以用下列方式來呼叫: ALPHA = BETA + GAMMA 巨集標頭與巨集呼叫的比對程序會比較複雜。

圖4.14 ELENA巨集定義和呼叫的範例

圖4.15 ELENA巨集時間指令的範例