按键精灵,调用子程序后,怎么返回主程序?

按键精灵,调用子程序后,怎么返回主程序?,第1张

1、首先新建一个按键精灵脚本,方法很简单。我就不给大家演示了。下图是我打开的按键精灵脚本。

2、首先在按键精灵中源文件的输入界面中输入子程序:Sub dzh()End Sub。

3、在子程序里面输入一个打招呼的命令:MessageBox "你好啊?"。

4、然后在第4行输入调用子程序命令:Call dzh()。

5、单击调试,我们看一下效果。(在这里启动程序的快捷键是F10)。

6、按下启动键自动d出子程序里面打招呼的内容。

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

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

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

子程序与主程序间的参数传递 用高级语言实现的程序,其主程序与子程序之间的参数传递方法是由编译系统来规定的。 一般是采用堆栈或者参数区(地址表)来进行参数的传递。 * 子程序总结: 1.主程序用CALL指令调用子程序,子程序执行完后用RET指令返回到主程序的CALL指令的下一条指令2.主程序有段内调用(NEAR)和段间调用(FAR),子程序返回对应有段内返回和段间返回3.主程序可通过寄存器﹑堆栈﹑地址表以及约定的内存变量向子程序传递参数4.凡在子程序中用到的寄存器必须先送堆栈,返回前按送栈相反的次序出栈5.注意子程序调用时堆栈指针的变化* 8.4 系统服务子程序 除用户设计的子程序外, *** 作系统还提供大量的系统服务子程序,通常称为中断服务程序。 这类程序通常用于完成必要的输入/输出功能和一些必要的系统 *** 作。


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

原文地址: http://outofmemory.cn/yw/11277048.html

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

发表评论

登录后才能评论

评论列表(0条)

保存