- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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表示此副程式將依所在區段性質及
您可能关注的文档
- 关于2010年度污染源普查动态更新调查方案的说明.doc
- 关于举办2007吉威数源杯程序设计大赛的通知.doc
- 关于举办资本重构--混合所有制的机遇与挑战研讨会的.doc
- 关于公布2013年鄞州区社区专职工作者招聘体检补检结果及进入考核人员.doc
- 关于办公自动化项目询价采购.doc
- 关于华艺数位.doc
- 关于大会工作的提案.doc
- 关于申报2015年度国家级科技思想库湖北省科协.doc
- 关怬钋膊婝洚椡簴瓒嘣海关三大质疑解析与相关疑难应对.doc
- 内资登记操作手册.doc
- 前端开发工程师-前端性能优化-调试工具_调试工具在性能分析中的应用.docx
- 前端开发工程师-前端基础-JavaScript_JavaScript面向对象编程.docx
- 前端开发工程师-前端基础-JavaScript_异步编程:回调函数与Promise.docx
- 前端开发工程师-前端基础-JavaScript_JavaScript安全编程.docx
- 前端开发工程师-前端性能优化-代码分割_代码分割的挑战与解决方案.docx
- 前端开发工程师-前端框架和库-Angular_Angular与AngularJS的差异.docx
- 前端开发工程师-前端性能优化-网络优化_网络流量控制与优化.docx
- 前端开发工程师-前端框架和库-Angular_Angular性能优化.docx
- 前端开发工程师-前端性能优化-Cross-Browser Compatibility_解决跨浏览器兼容性问题的框架与库.docx
- 前端开发工程师-前端框架和库-Vue.js_Vue.js与TypeScript结合使用.docx
文档评论(0)