第章 子程序过.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第章 子程序过

第8章 子程序设计 本章重点:理解MASM汇编程序的简化编程结构. 掌握过程的定义、调用和返回,了解程序调用时必须解决的一些问题. 掌握过程调用时参数的正确传递,合理使用堆栈并维持其平衡,能通过寄存器或变量实现过程间的参数传递并进行子程序程序设计。 8.1 MASM(宏汇编)的简化编程结构 简化的段定义源程序的格式为: .MODEL SMALL ;定义程序的存储模式(一般为SMALL) .STACK ;定义堆栈段 .DATA ;定义数据段 ... ;数据定义 .CODE ;定义代码段 .STARTUP ;程序开始点并确定DS,SS,SP的值 ... ;程序代码 .EXIT 0 ;程序结束返回DOS ... ;子程序代码 END ;汇编结束语句 8.1.1 简化段定义伪指令 (1)代码段定义:.CODE[段名] 表明其下面的内容是代码段中的内容。若没有给出段名,则采用默认段名。 (2)堆栈段定义:.STACK[堆栈区大小] 定义一个堆栈,段名为STACK。其中‘堆栈区大小’可不写(默认为1KB)。 (3)数据段定义:.DATA 表明其下面的内容是在数据段中的变量定义。.DATA用于创建一个数据段,段名是‘_DATA’。 (4)程序开始伪指令:.STARTUP 它能按照给定CPU类型,依据.MODEL语句选择的存储模式、操作系统和堆栈类型,生成程序初始代码,并指定程序入口位置;一般选DOS方式的SMALL模式,它将初始化DS,并调整SS和SP的值。 (5)返回系统的伪指令:.EXIT[返回数码] 它能产生终止程序执行,并返回DOS操作系统的指令代码。通常用0表示没有错误,.EXIT 0对应代码为: MOV AX,4C00H INT 21H MASM简化编程结构 简化编程结构应用举例 [例8.1.2]:试用简化段定义格式设计一个按任意键后响铃的COM程序。 解:参考源程序如下. ·MODEL SMALL ·CODE ·STARTUP LEA DX,BUFF MOV AH,09H ;显示提示信息 INT 21H MOV AH,01H ;等待按键 INT 21H MOV AH,02H MOV DL,7 ;响铃一次 INT 21H ·EXIT 0 ;程序结束返回DOS BUFF DB ‘Press any key!’,0DH,0AH,‘$’ END 8.2 子程序设计方法 8.2.1 子程序的定义、调用与返回 1、过程定义语句PROC和ENDP 在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。一个过程由伪指令PROC和ENDP来定义,其格式为: 过程名 PROC [NEAR/FAR] 过程体 RET 过程名 ENDP 8.2.1 子程序的定义、调用与返回 其中过程名是为过程所起的名称,不能省略,NEAR/FAR定义了过程的属性,NEAR属性的过程,只能被同代码段的程序调用(称段内近调用);FAR属性的过程,只能被不同代码段的程序调用(称为段间远调用)。如果缺省类型,则该过程就默认为近过程。ENDP表示过程结束。过程体内至少应有一条RET指令,以便返回被调用处。过程可以嵌套,也可以递归使用。 8.2 子程序设计方法 例8.2.1]:一个延时100ms的子程序,其过程可定义如下, DELAY PROC NEAR ;定义子程序DELAY PUSH BX PUSH CX MOV BL,10 ;延时10ms,改变BL和CX中的值,即可改变延时时间。 AGAIN:MOV CX,2801 WAIT: LOOP WAIT DEC BL JNZ AGAIN POP CX POP BX RET DELAY ENDP CALL DELAY ;调用该过程 远过程调用时被调用过程必定不在本段内。例如,有两个程序段,其结构如下: CODE1 SEGMENT ;定义代码段CODE1 ASSUME CS:CODE1 FARPROC PROC FAR RET FARPROC ENDP CODE1 ENDS CODE2 SEGMENT ;定义代码段CODE2 ASSUME CS:CODE2 CALL FARPROC ... CODE2 ENDS CODE1 段中的FARPROC 过程被另一段CODE2调用,故为远过程。 8.2 子程序设计方法

文档评论(0)

jyf123 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档