副程式与程式库.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
副程式与程式库.doc

第十章 副程式與程式庫 第  PAGE 4 頁 10 - 1 副程式的意義 副程式的使用,相信在這之前即有用過。有兩種情況,我們較常使用副程式,一種情況是在程式設計時,有時候某一段小程式會反覆在程式中被使用,增加該程式的長度,若能將這段小程式編寫成副程式的型態,那麼在整個程式中,只要寫一次即可,要用時只需呼叫副程式即可,增加程式的可讀性及方便除錯。另外一種情況,即它是一段特殊的小程式,我們為了強調它的特殊性,也可以把它編寫成副程式的型態。 10 - 1-1 PROC/ENDP假指令 PROC(procdure)與ENDP(end of procdure)是MASM的假指令,PROC用來宣告副程式(程序)的開始,而 ENDP則是用來宣告副程式(程序)的結束。在宣告副程式時,必須將副程式的名稱(name)寫在PROC假指令的前面,副程式的名稱(name)最長32個字元,大小寫均可,但不可是保留字,而且每個副程式的名稱都不可以重複使用。 10 - 1-2 NEAR/FAR假指令 NEAR與FAR是MASM的假指令,NEAR是定義近程副程式,FAR是定義遠程副程式,一般是寫在PROC假指令之後,用以宣告程序是近程或遠程。所謂近程副程式(near procdure)是指主程式與副程式在相同區段,而遠程副程式(far procdure)是指主程式與副程式在不同區段。如果在宣告副程式時,不特別標示NEAR或FAR,則系統會自動內定型態,在TINY、SMALL、COMPACT三種記憶體型態時,內定為NEAR,在MEDIUM、LARGE、HUGE三種記憶體型態時,內定為FAR。 10 - 1-3 CALL/RET指令 CALL是副程式的呼叫指令,CALL指令在執行時,會先將它的下一個指令的位址儲存到堆疊中,再跳越至CALL所指定的目的位址上繼續執行。目的位址可以是同一區段(近程呼叫)或不同區段(遠程呼叫)。副程式的最後一個指令必須是RET(return),代表返回主程式之意。有關近程呼叫、返回與遠程呼叫、返回,說明如下: 近程呼叫 1.SP暫存器內容減2(SP←SP-2)。 2.將目前IP暫存器內容值(返回之偏移位址)存入SS:SP所指堆疊中。 3.將副程式第一個指令的偏移位址存入IP暫存器中。 4.執行副程式的第一個指令。 近程返回 1.自SS:SP所指堆疊中取出返回位址存入IP暫存器中。 2.將SP暫存器內容加2(SP←SP+2)。 3.執行IP暫存器所指位址的指令,即CALL指令之後的第一個指令。 遠程呼叫 1.SP暫存器內容減2(SP←SP-2)。 2.將目前CS暫存器內容值(返回之區段位址)存入SS:SP所指堆疊中。 3.SP暫存器再減2(SP←SP-2)。 4.將目前IP暫存器內容值(返回之偏移位址)存入SS:SP所指堆疊中。 5.將副程式第一個指令的區段位址存入CS,偏移位址存入IP。 6.執行副程式的第一個指令。 遠程返回 1.自SS:SP所指堆疊中取出返回偏移位址存入IP暫存器。 2.將SP暫存器內容值加2(SP←SP+2)。 3.自SS:SP所指堆疊中取出返回區段位址存入CS暫存器。 4.將SP暫存器內容值加2(SP←SP+2)。 5.執行CS:IP所指位址的指令,即CALL指令之後的第一個指令。 10 – 2 外部副程式 當我們所撰寫的程式愈來愈大時,如果將主程式與副程式寫在一起,不但程式複雜,而且維護不易,如果能將副程式獨立成另一個檔案,不但可以降低程式複雜度,而且這些副程式還可以供其它主程式來呼叫使用。這種獨立的副程式,我們稱之為外部副程式或副程式模組(module)。 10 - 2-1 PUBLIC假指令 PUBLIC是用來宣告副程式或變數為公用(public)的,如此這個副程式、或變數才可以供其它主程式使用。平常LINK程式無法將不同模組間的副程式或變數連結起來,所以不同模組間的資料也不能相互存取,如果不同模組間的資料要相互存取,則必須使用PUBLIC來宣告。PUBLIC是在所在區段位置開頭宣告,即副程式在程式區段開頭宣告,而變數則在資料區段開頭宣告。 格式:1. PUBLIC 標記 2. PUBLIC 變數 10 - 2-2 EXTRN假指令 EXTRN是用來宣告副程式或變數為外部的(external),也就是說該副程式或變數不在主程式中,而是在外部模組。使用EXTRN宣告副程式時,必須定義其型態(type)為NEAR、FAR或PROC,如果是宣告變數資料時,必須定義其型態為BYTE、WORD、DWORD、QWORD或TWORD等。其中NEAR表示此副程式為近程呼叫,FAR表示此副程式為遠程呼叫,PROC表示此副程式將依所在區段性質及

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档