把b字符串连接到a字符串的后面,并返回a中新字符串的长度,请填空。请自己补充相应主程序,验证是否正确。

把b字符串连接到a字符串的后面,并返回a中新字符串的长度,请填空。请自己补充相应主程序,验证是否正确。,第1张

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

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

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

这里的地址是几个特定程序的入口地址,例如复位、中断。当发生特定的时间后,CPU会自动跳到相应的地址执行里面的程序。其具体如下 00H 复位 03H 外部中断0 0BH 定时器0 13H 外部中断1 1BH 定时器1 23H 串口中断 2BH 定时器2 由于每个中断地址之间的间隙很小,不能放下太多的程序,所以在学中断函数的时候,一般是在特定的地址下面放一条跳转指令,而真正的中断服务程序放在别的地方,当发生中断时,CPU跳到相应的中断入口地址,然后执行那个地址上的跳转指令,进入相应的中断服务程序。例如定时器0的中断服务程序: ORG 00H;复位入口地址 LJMP INIT;跳转到初始化程序 ORG 0BH;定时器中断入口地址 LJMP TIMER0;跳转到定时器中断服务程序 ORG 30H INIT: 初始化程序 MAIN: 主程序 TIMER0: 定时器0中断服务程序 RETI 一定要有RETI指令,要不然回不到主程序中。 END

以上就是关于把b字符串连接到a字符串的后面,并返回a中新字符串的长度,请填空。请自己补充相应主程序,验证是否正确。全部的内容,包括:把b字符串连接到a字符串的后面,并返回a中新字符串的长度,请填空。请自己补充相应主程序,验证是否正确。、主程序调用子程序编程指令是什么、单片机的程序怎么编写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9781762.html

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

发表评论

登录后才能评论

评论列表(0条)

保存