- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一個巨集呼叫另一個巨集 當程序以遞迴方式進行呼叫時,編譯器必須確定先前所宣告的變數值已經儲存起來。此外,它同時也要處理程序在回歸時的相關細節 Parameter Value 1 BUFFER 2 LENGTH 3 F1 4 (unused) . . Parameter Value 1 F1 2 (unused) . . 巨集處理器是最常用於協助組合語言程式;巨集處理器也可以運用在高階語言上 程式語言之間的其它差異,是與程式語言之項目、運算式或敘述的分群機制有關。一般用途的巨集處理器在掃描原始程式時,需要考量這些的分群(groupings)。 另一個較為通常的問題是程式語言的符記(tokens) 巨集定義和巨集呼叫敘述的使用語法 巨集處理器可以稱之為「前置處理器」(preprocessors) 另一種方法:整合程式語言的轉譯器以及巨集處理器的功能。 逐行巨集處理器 以避免針對原始程式產生另一階段的處理 結合巨集處理器和語言轉譯器所需的資料結構 整合的巨集處理器 使用語言轉譯器從原始程式中所擷取出來的任何有用資訊 整合性和逐行式的巨集處理器也有其缺點。因為它們需要特別的設計和撰寫,並且必須與特定的組譯器或編譯器協同運作 4.4.1 MASM巨集處理器 4.4.2 ANSI C巨集語言 4.4.3 ELENA 巨集處理器 MASM的巨集處理器是與組合語言的第一階段整合在一起 支援先前所討論之巨集處理器的所有功能 巨集可能在程式中重新定義 MASM巨集處理器與SIC之間的差異在於條件巨集展開敘述 (b) (c) (d) (a) (a) (b) 巨集的定義和呼叫是由前置處理器來執行 此前置處理器通常並不會與編譯器整合在一起 二個簡單的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 printf(...) /* debugging output */ #endif 在此範例中,假如原始程式是用 #define敘述來定義DEBUG時,則程式中將會出現printf敘述。 ELENA的巨集定義中包括標頭(header)和主體(body) 一系列的關鍵字(keywords)和參數標誌(以特別符號 % 來辨識)。 例如:一個具有標頭的巨集如下列所示: %1 = %2 + %3 可以用下列方式來呼叫: ALPHA = BETA + GAMMA 巨集標頭與巨集呼叫的比對程序會比較複雜。 * ? 2007 台灣培生教育出版(Pearson Education Taiwan) ? 2007 台灣培生教育出版(Pearson Education Taiwan) 第4章 巨集處理器 4.1節將會介紹巨集處理器的基本概念 4.2節討論巨集處理器的延伸功能 4.3節將會介紹一些巨集處理器的設計選項 4.4節將簡短地介紹三個巨集處理器的實際範 4.1.1節:討論巨集
文档评论(0)