電工學習網

 找回密碼
 立即注冊

宏與子程序的區別

2015-3-22 09:12| 編輯:電工學習網| 查看: 15554| 評論: 0

摘要: 宏和子程序都是為了簡化源程序的編寫,提高程序的可維護性,但是它們二者之間存在著以下本質的區別: 1 、在源程序中,通過書寫宏名來引用宏,而子程序是通過 CALL 指令來調用; 2 、匯編程序對宏通過宏擴 ...
宏和子程序都是為了簡化源程序的編寫,提高程序的可維護性,但是它們二者之間存在著以下本質的區別:

1 、在源程序中,通過書寫宏名來引用宏,而子程序是通過 CALL 指令來調用;

2 、匯編程序對宏通過宏擴展來加入其定義體,宏引用多少次,就相應擴展多少次,所以,引用宏不會縮短目標程序;而子程序代碼在目標程序中只出現一次,調用子程序是執行同一程序段,因此,目標程序也得到相應的簡化;

3 、宏引用時,參數是通過“實參”替換“形參”的方式來實現傳遞的,參數形式靈活多樣,而子程序調用時,參數是通過寄存器、堆棧或約定存儲單元進行傳遞的;

4 、宏引用語句擴展后,目標程序中就不再有宏引用語句,運行時,不會有額外的時間開銷,而子程序的調用在目標程序中仍存在,子程序的調用和返回均需要時間。

    總之,當程序片段不長,速度是關鍵因素時,可采用宏來簡化源程序,但當程序片段較長,存儲空間是關鍵因素時,可采用子程序的方法來簡化源程序和目標程序。 處理的時間不同.宏調用是在源程序被匯編程序處理的;而子程序調用是在程序執行期間由 CP 直接執行的.
    處理的方式不同.兩者都必須先定義后使用,但宏調用是用宏體替換宏調用偽指令,實參代替形參,源程序被翻譯成目標代碼后宏定義隨著消失;而子程序則沒有這樣的替換操作,是以 CALL 指令將控制權由調用者轉給子程序并執行.
參數處理不同.宏調用是以實參代替形參,參數的形式不受限制,可以是任何合法的字符;子程序的參數需要寄存器或存儲單元進行傳遞,而且需要附加的指令實現參數傳遞.
    執行速度不同.子程序調用時需要執行 CALL 指令和 RET 指令,還要執行實現參數傳遞的附加指令,因而會比宏展開后的代碼多而執行速度稍慢.
    占用的存儲器空間大小不同.宏指令在每次調用時都要展開,把宏體中的程序段復制一遍,因而用宏指令編寫的程序在目標代碼中會重復出現相同或相似的程序段,占用內存空間較大;而子程序是由 CALL 指令調用的,無論調多少次,子程序的目標代碼只在程序中出現一次,目標代碼相對較短.
    宏與子程序具有各自的特點,程序員應該根據具體問題選擇使用那種方法通常,當程序段較短或要求較快執行時,應選用宏;當程序段較長或為減小目標代碼時,要選用子程序比較結論

上一篇:宏匯編下一篇:重復匯編 收藏

看過《宏與子程序的區別》的人還看了以下文章:

發表評論

最新評論

|電工學習網 ( )

GMT+8, 2020-3-30 18:44

Powered by © 2011-2020 www.jeefkt.live 版權所有 免責聲明 不良信息舉報

技術驅動未來! 電工學習網—專業電工基礎知識電工技術學習網站。

欄目導航: 工控家園 | 三菱plc | 西門子plc | 歐姆龍plc | plc視頻教程

返回頂部
黑龙江快乐10分开奖查询 熊猫四川麻将辅助 比亚迪股票 麻将群公告群规则 富时全球股票指数 贵州快三走势图和值 上证指数最低点 广西快乐双彩最新开 贵阳捉鸡麻将游戏下 淘股吧股票论坛首页 河北快三开奖结果爱彩 赢翻网配资 nba直播极速 广东闲来麻将下载安卓官方 潍柴重机股票 36选7走势 怎样下载微乐麻将