- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章__子程序结构
第6章 子程序结构 ;6.1 子程序的概念 ;图6.1 主程序与子程序之间的关系 ; 子程序具有如下4个特性:
(1) 重复性。一个子程序只占用一段存储区域,但可以多次被调用,避免了编程人员的重复劳动,又节省程序的存储空间。由于增加了调用、返回等指令,因此程序执行时间会长些。如果一个程序段只用到一次,就没有必要编写成子程序形式。
; (2) 通用性。只能完成特定功能的子程序用处不大,例如,只能实现5个字节加法运算的多字节加法子程序和只能在定长字符串上查找某一固定字符的子程序都没有通用性,因而用处也就不大。要能够得到广泛应用的通用的多字节加法子程序,字节数应该是任意的,字符查找子程序、字符串的长度和查找的字符都应是任意的。
; (3) 可浮动性。所谓可浮动性,就是说子程序可以存放在存储区的任何地址处。假如子程序只能存放在固定的地址处,则在编写主程序时要特别注意存储单元的分配,不要使主程序占用了子程序的存储单元而破坏掉子程序,这样就会给编程人员带来很大麻烦,而且在装配主程序和子程序时往往造成存储空间的冲突或浪费。
; (4) 可递归和可重入性。如果子程序能够调用其本身,则称其可递归调用。
如果子程序可被中断,在中断处理中又被中断服务程序调用,并且能为中断服务程序和已中断的子程序两者都提供正确的结果,那么称该子程序是可重入的。
为使子程序具有可递归和可重入性,应当利用堆栈和寄存器作为中间结果的暂存器,而不能用固定的存储单元作暂存器。
; 6.2 子程序结构形式与操作
子程序定义伪操作用在子程序的前后,使整个子程序形成清晰的、具有特定功能的代码块。其格式为
PROCEDURE NAME PROC ATTRIBUTE?
PROCEDURE NAME ENDP
; 其中,子程序名为标识符,它又是子程序入口的符号地址。它的写法与标号的写法相同。属性(Attribute)是指子程序的类型属性,可以是NEAR或FAR。
如前所述,CALL和RET指令都有NEAR和FAR的属性。段内调用使用NEAR属性,但可以隐含;段间调用使用FAR属性。为了使用户的工作更方便,8086的汇编程序用PROC伪操作的类型属性来确定CALL和RET指令的属性。也就是说,如果所定义的子程序是FAR属性的,那么对它的调用和返回一定都是FAR属性的; ; 如果所定义的子程序是NEAR属性的,那么对它的调用和返回也一定是NEAR属性的。这样,用户只需在定义子程序时考虑它的属性,而CALL和RET的属性可以由汇编程序来确定。子程序属性的确定原则很简单,即:
① 如调用程序和子程序在同一个代码段中,则使用NEAR属性;
② 如调用程序和子程序不在同一个代码段中,则使用FAR属性。
;【例6-1】 调用程序和子程序在同一代码段中。
MAIN PROC FAR ;主程序
CALL SUBR1?
RET
MAIN ENDP
SUBR1 PROC NEAR ;子程序(NEAR可省略)?
RET
SUBR1 ENDP
; 由于调用程序MAIN和子程序SUBR1在同一代码段中,所以SUBR1定义为NEAR属性。这样,MAIN中对SUBR1的调用和SUBR1中的RET就都是NEAR属性的。但是一般说来,主子程序MAIN应定义为FAR属性,这是由于把程序的主子程序看作DOS调用的一个子程序,因而DOS对MAIN的调用以及MAIN中的RET就是FRA属性的。当然,CALL和RET的属性是汇编程序确定的,用户只需正确选择PROC的属性就可以了。
;例6-1的情况也可以写成如下的程序:
MAIN PROC FAR
? CALL SUBR1
RET
SUBR1 PROC NEAR?
RET
SUBR1 ENDP
MAIN ENDP
;【例6-2】 调用程序和子程序不在同一个代码段内。
SEGX SEGMENT
SUBT PROC FAR
RET
SUBT ENDP
CALL SUBT
SEGX ENDS
SEGY SEGMENT
CALL
您可能关注的文档
最近下载
- 江西财经大学西方经济学复习重点.docx VIP
- 刑事被害人心理损害的范围 (1).pptx VIP
- 某集团2021年人才盘点项目方案(项目建议书).pptx VIP
- 党委书记讲党课+讲稿—深入学习贯彻党的二十届三中全会精神-聚焦四个持之以恒,驱动企业高质量发展.pptx VIP
- 分裂型人格障碍的案例分析.doc VIP
- GB51445-2021 锑冶炼厂工艺设计标准.pdf VIP
- DL T 868-2014 焊接工艺评定规程 .docx VIP
- 第十届全国走美杯三年级初赛竞赛数学试卷答案.docx VIP
- 学校膳食监督家长委员会成立大会上,校长发言:从餐桌开始,家校合力为孩子成长食堂 “加营养”.docx VIP
- 《拍手歌》优秀课件.ppt VIP
文档评论(0)