位单片机及语音嵌入式系统.ppt

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

子程序 : 在实际应用中,经常会遇到在同一程序中,需要多次进行一些相同的计算和操作,例如:延时,算术运算等。如果每次使用时都再从头开始编写这些程序,则程序不仅繁琐,而且浪费内存空间,也给程序的调试增加难度。因此,可以采用子程序的概念,将一些重复使用的程序标准化,使之成为一个独立的程序段,需要时调用即可。我们就把这些程序段称作为子程序。一般来说子程序的结构包括三个部分:1.子程序的定义声明和开始标号部分;2.子程序的实体内容部分,表明程序将进行怎样的操作;3.子程序的结束标号部分 子程序结构 程序的调用包括主程序调用子程序,子程序调用子程序 在程序调用的过程中,需要注意到的问题是断点的现场保护。就是说,子程序将占用的资源是否与主程序冲突,子程序将会破坏什么寄存器的内容,而这些寄存器是否是主程序持续使用的等等。通常的做法是用堆栈对现场进行保护,在子程序开始就把子程序要破坏掉的寄存器的内容压栈保护,当子程序结束的时候,再弹栈恢复现场。 程序调用的过程都伴随着参数的传递,正确的参数传递要满足入口和出口条件。入口条件指执行子程序时所必需的有关寄存器内容或源程序的存储器的存储地址等,主程序调用子程序时必须先满足入口条件,换句话说就是满足子程序对输入参数的约定。出口参数就是指子程序执行完了之后运算结果所存放的寄存器或存储器地址等, 参数的传递有以下几种情况: 1) 通过寄存器传递 2) 通过变量传递 3) 通过堆栈传递 下面我们针对每一种情况进行具体讲解,分析 通过寄存器传递参数 : 寄存器传递参数,是最常用的一种参数传递的方式。我们常用到的传递参数的寄存器有4个,分别为R1~R4;在程序调用的过程中,寄存器中的值也会被带到被调用的子程序中供子程序使用。以主程序调用子程序为例:在调用子程序前R1~R4这4个寄存器中可能暂存一些值,发生调用子程序以后,这些值仍被带到相应的子程序中继续参加子程序的运算,子程序运算结束后返回主程序,这些寄存器的新值也会被带到主程序中继续参加主程序的运算。这个过程也可以用图来表示。实线表示参数的传递方向是由主程序到子程序,虚线表示参数的传递方向是由子程序到主程序。 范例程序,就是利用寄存器传递变量。 求32位有符号数的绝对值 //函数: F_Abs_32() //语法:void F_Abs_32(int A,int B) //描述:求32位有符号数具对值 //参数:r3有符号数低16位,r4有符号数高16位 //返回:r1绝对值结果的低16位,r2绝对值结果的高16位 .CODE .PUBLIC F_Abs_32 F_Abs_32: R1 = R3; //传送低16位 R2 = R4; //传送高16位 JMI ?neg; //如果为负则跳转到负数处理 RETF; //为正数则无需任何处理,返回 ?neg: //负数处理 R1 ^= 0xFFFF; //低16位去反 R2 ^= 0xFFFF; //高16位取反 R1 += 1; //低16位加1 R2 += 0,Carry; //高16位加进位 RETF; 通过变量传递参数 : 通过变量进行的参数传递,主要是通过全局型变量实现的。在汇编中,一个变量名,就代表了一个实际的寄存器的物理地址。可以直接对物理地址进行赋值和读取,但这种的方法会带来很多麻烦。用变量名去代表一个实际的物理地址,就涉及到某部分汇编代码是否认识该变量名的问题。 如果在某个汇编文件中定义了一个全局变量(.PUBLIC),那么此汇编文件中的所有汇编代码都能够使用这个变量。但是在其他的汇编文件中,仍不能直接使用这个变量。在这种情况下,需要在使用这个变量的汇编文件中将该变量声明成外部变量(.external),既可使用这个变量,同时该变量也起到了参数传递的作用。 如图所示。实线表示参数的传递方向是由主程序到子程序,虚线表示参数的传递方向是由子程序到主程序。 ENDP 【类 别】定义类 【功能描述】结束程序的定义 【语法格式】ENDP 【应用解释】程序定义的起始要用伪指令

文档评论(0)

peili2018 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档