主程序调用子程序编程指令是什么

主程序调用子程序编程指令是什么,第1张

主程序调用子程序编程指令是:右击——插入——OB,然后填上OB100,OB由系统调用,并非由用户调用。

一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。函数在面向过程的语言中已经出现。是结构和类的前身。本身就是对具有相关性语句的归类和对某过程的抽象。

转子指令和返回指令:

子程序的调用与返回过程中,子程序的入口地址是指子程序第一条指令的地址。用于调用子程序、控制程序的执行从主程序转向子程序的指令称为专注指令(子程序调用指令、过程调用指令)。为了正确调用子程序,必须在转子指令中给出子程序的入口地址。

主程序中转子指令的下一条指令的地址称为断点,断点是子程序返回主程序的返回地址,从子程序返回主程序的指令称为返回指令。为了在执行返回指令时能够正确地返回主程序,转子指令应具有保护断点的功能。

执行转子指令时保护断点的方式有多种,常用的有:将断点保存到子程序第一条指令的前一个字单元;将断点保存到某一约定的寄存器中;将断点压入堆栈。

子程序返回指令完整的功能是改变程序计数器的值;子程序调用指令是指调用子程序的指令,包括调用指令(转子指令)和返回指令(返主指令)。

子程序调用指令用于实现程序与程序之间的转移,与转移指令不同(转移指令用于实现同一程序内的转移)。子程序调用指令还可以进行嵌套调用,即可调用别的子程序,还可以实现递归调用,即直接或间接自己调用自己。

扩展资料:

在子程序的调用与返回过程中,子程序的入口地址是指子程序第一条指令的地址。用于调用子程序、控制程序的执行从主程序转向子程序的指令称为专注指令(子程序调用指令、过程调用指令)。为了正确调用子程序,必须在转子指令中给出子程序的入口地址。

主程序中转子指令的下一条指令的地址称为断点,断点是子程序返回主程序的返回地址,从子程序返回主程序的指令称为返回指令。为了在执行返回指令时能够正确地返回主程序,转子指令应具有保护断点的功能。

参考资料来源:

百度百科-子程序调用指令

这个当然是能使用LJMP指令重主程序跳转到子程序,或从子程序跳回主程序,但一般是不允许这样使用LJMP指令的,很容易造成程序运行混乱。因为调用子程序保护现场要将当前的地址压入堆栈,子程序返回时,会d出该地址赋值给PC指针。如果使用,必须满足以下条件:

跳出跳入成对出现,也就是说,从主程序用LJMP跳转到子程序,那么在子程序中的RET前,必须是用LJMP指令跳回。不成对出现,但是如果子程序是LJMP跳转来的控制,那么在RET前,需要压入返回位置的地址。由于单片机的RAM是有限的,程序在进入子程序之前经常会使用RAM来临时存储一些数据,包括SP指针在执行完子程序之后需要跳回的地址信息。也就是堆栈的“压栈”(PUSH)。

子程序执行完后,要执行一个RET指令结束子程序,指针指向的堆栈单元读取堆栈数据,这个过程叫做“出栈”(pop),然后指针会正常的运行下去。假如在子程序内直接用LJMP指令跳出到主程序,就会把堆栈压入的数据没有读出,造成数据丢失,SP指针指向的地址没有正确返回,造成堆栈不断增加,直到不够用了就会溢出。

JMP(AJMP,LJMP,SJMP)指令,是转移指令,它们在转移的时候,并不保留当前的地址,所以使用RET指令,是无法回到原来的位置的。

使用LCALL、ACALL指令,就是调用子程序的指令,是可以用RET指令返回的,因为LCALL、ACALL指令保存了原来的地址,可供RET使用。

另外,中断程序中是可以使用JMP指令的,但是要保证,要尽快使用RETI返回原来的断点,否则就一直处于中断之中,CPU以后就不会再相应同级别的中断了。

------------------------

问题补充:

,最后使用RET能不能回到CALL(ACALL,LCALL)调用前的位置

可以。

,多少次就会出错

LCALL、ACALL指令保存了原来的地址,是存放到堆栈里面。

51单片机的堆栈,是在片内RAM中,空间是有限的。

空间究竟有多大,和你的栈底初始化的地址有关,另外,堆栈中,还会保存其它的内容。所以,保存返回地址的空间究竟能有多大,需要你自己计算。

多少次会出错,是和你编写的程序有关的。

你可以用keil软件来调试,把你的程序单步的运行走一遍,即可知道堆栈空间的使用情况了。

以上就是关于主程序调用子程序编程指令是什么全部的内容,包括:主程序调用子程序编程指令是什么、子程序返回指令完整的功能是什么、安川机器人怎么从子程序跳转到主程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9799994.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存