内容正文:
第四章 汇编语言程序设计方法
4.5 子程序设计和参数传递
《单片机技术与应用》 高教版 第二版 魏寿明
CONTENTS
目录
01
学习目标
02
新课引入
03
新课教学
04
师生互动
05
课堂练习
06
课堂小结
学习目标
CATALOGUE
一
掌握汇编语言子程序的基本概念和结构
理解汇编语言子程序的参数传递机制
了解汇编语言子程序的返回值和调用约定
学习目标
新课引入
CATALOGUE
二
在程序设计过程中,常有相同问题多次出现的情况。
通常把这些程序段独立出来,编成可供反复调用的程序段。独立出来的程序段称为子程序,调用子程序的程序称为主程序。
需要在程序的不同位置用到功能相同的程序段,如果编程中每次遇到这样的操作都编写一段程序,会使编程十分繁琐,也会占用大 量程序存储器空间。
新课引入
新课教学
CATALOGUE
三
子程序是一段可独立执行的代码块,通常用于执行特定任务,可以被主程序或其他子程序调用。
定义
模块化
重用性
独立性
子程序使得代码更加模块化,提高代码的可读性和可维护性。
子程序可以在程序中多次调用,避免了重复编写相同代码。
子程序通常独立于主程序和其他子程序,通过接口进行通信。
子程序定义与特点
功能分解
将复杂问题分解为多个简单问题,每个问题由一个或多个子程序解决。
代码优化
通过消除冗余代码和减少重复计算,提高程序的执行效率。
提高可读性
将代码划分为逻辑上独立的模块,使得程序结构更清晰,易于理解和维护。
子程序在程序设计中的作用
主程序通过调用子程序来执行特定任务,子程序执行完毕后返回主程序。
调用关系
主程序向子程序传递参数,子程序根据参数执行相应操作,并可能返回结果给主程序。
参数传递
主程序和子程序协同工作,共同完成程序的总体功能。
协同工作
子程序与主程序关系
主程序和子程序的调用关系
主程序和子程序调用关系如图所示:主程序中需要执行这种操作的地方放置一条调用指令,当程序执行到调用指令,就转到子程序中完成规定操作,操作完成后又返回到原来的程序继续执行下去。
子程序定义
一段完成特定功能的独立程序,可以被其他程序调用。
子程序结构组成
子程序头(包含子程序名和参数说明),子程序体(实现子程序功能的指令序列),子程序尾(返回调用程序的指令)。
子程序的调用和返回
通过CALL指令调用子程序,通过RET指令返回调用程序。
汇编语言子程序结构
01
02
03
04
模块化设计
将复杂问题分解为多个简单问题,每个问题对应一个子程序,提高代码的可读性和可维护性。
参数传递
通过寄存器或内存传递参数,实现子程序间的数据共享和通信。
错误处理
在子程序中添加错误处理机制,确保程序的稳定性和可靠性。
优化性能
在保证程序正确性的前提下,通过优化算法和指令选择,提高程序的执行效率。
汇编语言子程序设计原则
子程序调用
调用子程序的指令有ACALL和 LCALL, 执行调用指令时,先将程序地址指针 PC 改变, 然后PC 值压入堆栈,用新的地址代替。执行返回指令时,再将PC值弹出。
指令 功能
ACALLaddr11 2 KB内绝对调用
LCALL addr16 64KB内绝对调用
RET 子程序返回
子程序调用
现场保护和现场恢复
01
在子程序的执行过程中,有时可能要使用累加器和某些工作寄存器,而在调用子程序前,这些寄存器中可能已经存放有主程序的中间结果,它们在子程序返回后仍要使用,这样就需要在进入子程序之前,将要使用的累加器和寄存器中的内容预先转移到安全的地方保存起来,这 称为现场保护;当子程序执行完即将返回主程序之前,还要将这些内容先取出来,送回累加器 和原来的工作寄存器中,这个过程称为现场恢复。
子程序调用
现场保护和现场恢复
01
保护现场和恢复现场通常使用堆栈,即在进入子程序之前,将需要保护的数据压入堆栈, 在返回之前再将压入的数据弹出到原来的工作单元中,恢复原来的状态。看下面的例子:
由于堆栈的操作是“后进先出,先进后出”,所以编写指令时,必须把后压入堆栈的数据 先弹出来才能保证恢复到原来的状态。
子程序调用
02
参数传递
由于子程序是主程序的一部分,所以,在程序执行时必然发生数据上的联系,在调用子程 序时,主程序应先把有关参数存入约定的位置,子程序在执行时,可以从约定的位置取得参 数,当子程序执行完,将得到的结果再存入约定的位置,返回主程序后,主程序可以从这些约 定的位置取得需要的结果,这就是参数的传递。
MCS-51 系列单片机在汇编语言中,有多种参数传递的方法,如用累加器和寄存器、堆栈等进行参数的传递。
子程序调用
02
参数传递
例 编写 P1.0 控制一只 LED闪烁的程序。
使用特定的调用指令(如CALL)来启动子程序的执行。
调用指令
将需要传递给