【摘要】:子程序是程序设计模块化的重要技术,可大幅提高程序代码的可重用性。子程序在使用时,有时需要从主程序获得某些数据,也可能需要将处理结果返回给主程序。这些工作通过子程序的参数来实现。 编写一个通用子程序,实现N个单字节无符号数之和。调用该子程序完成将片内30H~5FH中存储的单字节无符号数求和,结果存入60H、61H单元中。
子程序是程序设计模块化的重要技术,可大幅提高程序代码的可重用性。使用子程序时,主程序调用子程序需要用到LCALL或ACALL指令,在子程序末尾必须用返回指令RET返回。
子程序在使用时,有时需要从主程序获得某些数据,也可能需要将处理结果返回给主程序。这些工作通过子程序的参数来实现。根据数据传送的方向可将参数分为入口参数和出口参数。主程序在调用子程序时需将具体的数据传递给子程序中的相应变量(如寄存器等),这些数据称为入口参数;子程序执行结束后将运行结果传递给主程序供主程序使用,这些结果数据称为出口参数。
单片机子程序传递参数的方法主要有三种:通过累加器和通用寄存器传送;通过指针寄存器传送;通过堆栈传送。
【例5-9】 编写一个通用子程序,实现N个单字节无符号数之和(N<100H,存储在2FH单元)。调用该子程序完成将片内30H~5FH中存储的单字节无符号数求和,结果存入60H、61H单元中(高位在前)。(www.xing528.com)
本例中需要传递的参数有三种:参与运算的字节无符号数个数N,用寄存器R2传递;参与运算的数据,在RAM单元中,以R0为指针寄存器,通过间接寻址传送;运算结果,共两个,用R1间接寻址传送。
子程序如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。